JSON API
Read-only and free, the same public data as the website. Every score is an automated transparency score from public data, not a security audit. Only projects that have a public page are in the API.
Basics
- Base URL:
https://recheckable.com/api/v1. Thev1prefix is stable: we only add fields. A breaking change would get a new prefix (v2) andv1would keep working for a long time. - The older paths
/api/projects,/api/p/<slug>and/api/weekly/<week>.jsonkeep working and return the same as theirv1twins. - Format: JSON, UTF-8. Times are Unix seconds (UTC). Unknown fields should be ignored. CORS is open (
Access-Control-Allow-Origin: *) for these read-only routes. - Rate limit: 120 requests per minute per client. Every answer carries
X-RateLimit-Limit,X-RateLimit-RemainingandX-RateLimit-Reset(Unix seconds). Above the limit you get429withRetry-After. The limiter keeps a salted hash in memory for one minute and stores nothing. - Caching: answers are cacheable for 60 seconds (
Cache-Control: public, max-age=60). Scores change at most once per review, so please cache. - Terms: attribution is required, terms for the data come with the public launch. Please send a descriptive
User-Agent.
Endpoints
GET /api/v1/projects
The public list. Query: limit (1 to 500, default 100), cursor (the next_cursor of the last page; needs the default sort), q (name, domain or address), cat, band (A to F or none), track (onchain or offchain), status (claimed or unclaimed), scoring (scored or unscored), sort (name, score or checked). Projects that have no published score have scored: false and no grade, number or date.
curl -s 'https://recheckable.com/api/v1/projects?limit=2&status=claimed'{
"items": [
{
"slug": "example-dex",
"name": "Example DEX",
"category": "DeFi",
"chain": "Solana",
"domain": "example.org",
"demo": false,
"claimed": true,
"scored": true,
"badge": "active",
"score": 71,
"band": "B",
"coverage": 88,
"tracks": [
"onchain"
],
"reviewed": 1792000000,
"method": "0.2.1",
"label": "Automated score"
},
{
"slug": "example-wallet",
"name": "Example Wallet",
"category": "Wallets & tools",
"chain": "Solana (offchain)",
"domain": "example.net",
"demo": false,
"claimed": false,
"scored": false,
"label": "Not scored yet"
}
],
"count": 2,
"total": 2,
"limit": 100,
"next_cursor": null
}GET /api/v1/projects/<slug>
One project. Scored: the project, its badge state, the full report with every check, its status, source links and evidence hashes, and the event history. Listed but not scored: only name-level data and "scored": false. Unknown or non-public slugs return 404.
curl -s https://recheckable.com/api/v1/projects/example-dex | head -c 400GET /api/v1/weekly/<year>-w<week>.json
The weekly list (new, newly claimed, movers). Same as the weekly page.
curl -s https://recheckable.com/api/v1/weekly/2026-w42.jsonBadges
For claimed projects only: https://recheckable.com/badge/<slug>.svg. Copy-paste code on /badge-embed/<slug>.
Errors
400 a bad parameter ({"error": "limit must be between 1 and 500"}), 404 not found, 429 rate limited. A slug without a public page gives the same 404 as one that does not exist.