Docs / Research snapshots
Research snapshots
The monthly snapshot files, for keys with approved research access.
GET/v1/downloads · API key required
Lists the monthly summary snapshots (gzipped CSV and JSON, one row per recall notice). Bulk downloads are not part of the free plan: a key gets them after its research and journalism access request at https://recalldb.app/data is approved (non-commercial, attribution required). Download a file with GET /v1/downloads/{name}, for example /v1/downloads/recalls-2026-11.csv.gz.
Other free keys get 403 plan_limit with a message that says how to request research access and that daily full-field snapshots with commercial use are planned for Pro.
Request
curl https://recalldb.app/v1/downloads \
-H "Authorization: Bearer $RECALLDB_KEY"const res = await fetch('https://recalldb.app/v1/downloads', {
headers: { Authorization: `Bearer ${process.env.RECALLDB_KEY}` },
})
console.log(await res.json())import os, requests
r = requests.get("https://recalldb.app/v1/downloads", headers={"Authorization": f"Bearer {os.environ['RECALLDB_KEY']}"})
r.raise_for_status()
body = r.json()
print(body)Response
{
"data": [
{
"name": "recalls-2026-11.csv.gz",
"size": 18234567,
"uploaded": "2026-11-01T03:10:00.000Z"
},
{
"name": "recalls-2026-11.json.gz",
"size": 24456789,
"uploaded": "2026-11-01T03:10:00.000Z"
}
],
"meta": {
"how": "GET /v1/downloads/{name} with your key. Files are gzipped (CSV and JSON). One download counts as one request."
},
"attribution": {
"text": "Data from RecallDB",
"url": "https://recalldb.app"
}
}Every response includes source (agency, official ID, official URL, last updated) and attribution. Attribution rules.
Notes
- Listing and each download count as one request. GET /v1/usage shows research_access (pending, approved or denied). Keys created before 2026-11-15 keep download access until 2026-12-15.
Errors: error codes. Limits: rate limits.