API
The recall API — four calls to production.
One normalized feed across openFDA, CPSC, NHTSA, and EU Safety Gate. Read recalls, filter by source and severity, and stream webhook deliveries — all with a single API key.
Sample data
See it working
Sample data from real agency formats — normalized into a single feed.
Beerenmischung
hersteller: jütro tiefkühlkost gmbh & co. kg produktbezeichnung/ -beschreibung: bio beerenmischung „biobio“, tiefgefroren, 300 gramm · 2026-07-25
ALERTA INTERNACIONAL JULIO – 2026
2026-07-24
travers de porc cuit bruni
prestige de la sarthe · 2026-07-24
tete roulee
prestige de la sarthe · 2026-07-24
langue de porc en gelee
prestige de la sarthe · 2026-07-24
tranches de poitrine de porc cuite fumee - congelees
prestige de la sarthe · 2026-07-24
SureFit SF-400 Space Heater — fire and burn hazard
"event": "watchlist.match",
"deliveryId": "del_01hxyz9k3m",
"match": {
"watchlistId": "wl_brand_surefit",
"kind": "brand",
"value": "SureFit Appliances",
"matchedOn": ["recallingFirm"]
},
"recall": {
"id": "cpsc_2024_11_surefit",
"sourceCode": "cpsc",
"title": "SureFit SF-400 Space Heater — fire hazard",
"hazard": "Fire and burn hazard",
"classification": "High risk",
"recallDate": "2024-11-14",
"recallingFirm": "SureFit Appliances"
},
"timestamp": "2024-11-14T09:04:22Z"// Request
GET /recalls?source=cpsc HTTP/1.1
X-Api-Key: rr_live_xxxxxxxxxxxx
// Response 200 OK
{
"data": [{
"id": "cpsc_2024_11_surefit",
"sourceCode": "cpsc",
"title": "SureFit SF-400 Space Heater",
"classification": "High risk"
}],
"meta": {
"total": 847,
"limit": 20,
"offset": 0
}
}Reference
Endpoints
A small, predictable REST surface. Every request authenticates with your X-Api-Key header.
| Method & path | Description | Auth |
|---|---|---|
| GET /recalls | List recalls across all agencies. Offset paginated (meta.total / limit / offset). Filters: source, classification, since.openFDACPSCNHTSAEU Safety Gate | X-Api-Key |
| GET /recalls/:id | Fetch a single normalized recall (RecallView) by its RecallStream id. | X-Api-Key |
| GET /recalls/filters | Discover the available filter values — active sources and classification labels — so you can build UI without hardcoding. | X-Api-Key |
| GET /events | Your webhook deliveries and watchlist matches. Cursor paginated (opaque cursor) for stable streaming. | X-Api-Key |
| GET /incidents/:id | Cross-source incident-linking — the same recall clustered across agencies and jurisdictions by shared GTIN, brand, firm, and date into one incident. Fetch an incident and its linked recalls. Pro+ | X-Api-Key |
Response shape
One envelope, one record type
List endpoints return a consistent envelope: a data array of records plus a meta object with pagination.
{
"data": [ /* RecallView objects */ ],
"meta": {
"total": 1657,
"limit": 20,
"offset": 0
}
}id— stable RecallStream id (always present)sourceCode— agency, drives the source badge (always present)title— headline (always present)hazard?— free-text hazard, when knownclassification?— e.g. "Class I" / risk levelrecallDate?— ISO date, often absentrecallingFirm?— company, when providedurl?— link to the source notice
Fields marked ? are omitted entirely when absent — we never send null placeholders or "N/A". Code defensively for optional keys.
Authentication & limits
One key. Push or pull.
The public data API authenticates with an X-Api-Key header — create and rotate keys in your dashboard (the full key is shown once at creation). Per-minute rate limits (and a daily fair-use ceiling) scale with your plan; exceeding them returns 429 with a Retry-After header. Dashboard and account calls use a session bearer token instead.
Prefer push? Use webhooks.
Register an endpoint and RecallStream POSTs a watchlist.match event the moment a recall matches your brands, suppliers, or keywords. Verify the signature with your whsec_… secret.
{
"event": "watchlist.match",
"deliveryId": "del_01hxyz9k3m",
"match": {
"watchlistId": "wl_brand_surefit",
"kind": "brand",
"value": "SureFit Appliances",
"matchedOn": ["recallingFirm"]
},
"recall": { /* RecallView summary */ },
"timestamp": "2024-11-14T09:04:22Z"
}