API documentation
Everything the site shows comes from a public JSON API at https://api.staging.proudlydev.ca. No key is needed today. Requests are rate limited per address: 10 scans a minute, 2 forced rescans, and a handful of form submissions.
| Method | Path | What it does |
|---|---|---|
POST | /v1/scan | Body {"url": "example.ca"}. Returns the report, from cache when under 24 hours old. Add ?force=1 to rescan. |
GET | /v1/report/:domain | The latest report for a domain, or 404 if it has never been scanned. |
GET | /v1/report/:domain/history | Every past scan, newest first. ?full=1 returns whole reports, ?limit=N caps the count. |
GET | /badge/:domain.svg | The live badge image. Cached for an hour; a stale report triggers a background rescan. |
GET | /v1/services | Service providers with scores. Filters: ?kind=technology|network|nameserver|registrar, ?status=stub|draft|published. |
GET | /v1/services/:slug | One provider, with its Canadian alternatives and the providers it is an alternative to. |
POST | /v1/services/:slug/requests | A listing or correction request. Body {"type": "alternative"|"correction", "name", "website", "email", "message"}. |
POST | /v1/survey/:domain | Self-reported details for a site. GET /v1/survey/questions lists the accepted fields. |
GET | /v1/leaderboard | ?board=canadian|not, ?limit=N. Ranked entries with score, grade, and the services behind them. |
Example
curl -X POST https://api.staging.proudlydev.ca/v1/scan \
-H 'content-type: application/json' \
-d '{"url": "canada.ca"}'A report carries the domain, score, grade, coverage, and one entry per check with its status, weight, evidence, and a plain-language note. Statuses are canadian, foreign, mixed, or unknown; unknown checks are excluded from the score and lower coverage instead.