One barcode, every source
# Returns matches from all seven sources, deduplicated by identifier GET /v1/identifiers/gtin/00012345678905 Authorization: Bearer $KEY
Identifiers are extracted from the agencies' free-text fields, not just their structured
ones, and every GTIN is check-digit validated before it enters the index. A malformed
identifier returns 400 rather than "no recalls found" — telling you a product
is clear when we never looked it up is the one failure a compliance tool must not have.
A catalogue in one call
# Up to 1,000 identifiers; one request, one receipt POST /v1/checks Authorization: Bearer $KEY
The response contains the matches and a check id. The check is stored as it stood at that moment, against a corpus of recorded freshness.
The receipt is the product
# The same answer, months later, unchanged GET /v1/checks/chk_01J9Z2K3M4N5P6Q7R8S9T0 Authorization: Bearer $KEY
Agencies revise recalls after publication without announcing it — a recall covering three lot codes in March can cover eleven by June, at the same URL. So a receipt records what was checked, when, and against what, and a later amendment never rewrites it. Under the EU's General Product Safety Regulation the obligation is continuous diligence, and "we subscribed to a feed" is not evidence of it.
The reasoning behind that design, and the measurements behind it, are in Seven government recall feeds.
Where the data comes from
Seven official sources across the EU, France and the US, each under an open licence permitting commercial reuse. Every attribution obligation is published at /v1/sources and travels with every export. Per-source ingestion freshness is public on the status page, with no key required.
Full endpoint reference, filters and error vocabulary in the API documentation. See pricing.