How it works

Three calls, one audit trail.

The API answers two questions — is this recalled, and can you prove you checked — and the second is the one compliance actually needs.

Look up an identifier

Check a single barcode, VIN or model number against every source at once.

Check a catalogue

Submit up to 1,000 identifiers and get matches plus a receipt of the check.

Produce the evidence

Retrieve any past receipt, frozen as it stood — later amendments never rewrite it.

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.