EU Product Recalls
Live API

Is anything in your catalogue recalled in the EU?

Check your products against the European Commission's Safety Gate, by barcode, brand, model, or plain product title. One call per product, or 50 in a single batch.

One call, one answer
# Is this product recalled anywhere in the EU?
curl -X POST https://recalls.oredrift.com/v1/match \
  -H 'Content-Type: application/json' \
  -d '{"title": "MICA LED christmas tree",
       "barcode": "8720362191049"}'

→ exact alert, confidence 0.99, with the risk,
  the batches, and what the authority ordered.
47,122alerts since 2005
31notifying countries
98%useful answers
<4 msmedian response
Endpoints

What you can call

Five endpoints, one contract, published as OpenAPI. Every match carries the alert itself: product, brand, model, risk type and official severity, the batch numbers concerned, the country of origin, the official photo and the publication date - plus what the authority ordered. No second call per result.

Get access

Three steps to your first answer

Free while in early access. No card, no call, no sales process - the whole point of this product is that nobody has to talk to anybody.

Subscribe on RapidAPI

The listing carries the free tier, the interactive console and ready-made snippets in 20+ languages. Subscribing takes a minute and bills nothing.

Open the listing

Copy your key

RapidAPI issues it the moment you subscribe and shows your usage against the quota. One key works across every API you subscribe to on the hub.

Send your first product

A title is enough to get an answer. A barcode gets a certain one. Nothing else is required, and there is no onboarding to sit through.

Your first call
# The listing gives you the exact host and a ready-made
# snippet in your language. The shape never changes.
curl -X POST https://<your-host>.p.rapidapi.com/v1/match \
  -H 'Content-Type: application/json' \
  -H 'X-RapidAPI-Key: YOUR_KEY' \
  -d '{"title": "MICA LED christmas tree"}'

Access runs through RapidAPI: it issues the key, meters your calls and shows what you have used. You can exercise every endpoint from the listing's own console before you subscribe, without writing a line of code - and the origin accepts nothing that did not come through it.

Who uses this

Three ways it gets called

Marketplaces screening listings

Run every new seller listing through /v1/match at submission. A flagged title gets a human look before it goes live, rather than after a regulator finds it.

Retailers checking a catalogue

Send up to 50 references in one call, with your own identifier on each line and returned verbatim, so results drop straight back into your product table.

Compliance teams watching the feed

Alerts are collected on the Commission's own schedule. Ask /v1/alerts for everything collected since your last run and you have a weekly diff without storing the archive.

The problem

Why is this not a lookup table?

Safety Gate data is public and free, but it is entered by hand by authorities in 31 countries, and it is inconsistent in three ways that each break the obvious implementation.

25%

Barcodes are mostly missing

Only a quarter of alerts carry a barcode in the barcode field. Some of those hold an internal supplier reference; others hold several GTINs concatenated without a separator. A plain GTIN lookup misses three recalls out of four.

44%

Oredrift recovers more of them

Where the source records a barcode inconsistently, Oredrift recovers it and validates it before trusting it. Exact barcode reach rises from a quarter of the archive to 44%, with no guessing: a code that fails its check digit is never used.

84%

Brands need reconciling

Brand is present on 80% of alerts and a model reference on 77%, but model fields list several references in one string, and the single most common brand value in the whole archive is the literal word Unknown.

One product, one answer

A product sold across the EU is notified separately by each country that finds it, so the raw feed repeats the same recall several times. Alerts describing the same product are grouped: you get one result per product, with the number of related alerts and the list of notifying countries, instead of five rows to reconcile yourself.

Uncertainty is labelled, not hidden

Matches based on text alone are flagged lead_only. They are leads to review, not conclusions. In product safety, a confidently wrong match costs more than a flagged uncertain one - so the API says which it is, and why, in plain words.

What comes back

One call, the whole answer

Not a case number to look up afterwards. The alert itself, how certain the match is and why, and what the authority actually ordered - which is the part that decides what you have to do.

Response, unedited
{
  "data": {
    "matched": true,
    "matches": [
      {
        "case_number":  "SR/02362/26",
        "source_url":   "https://ec.europa.eu/safety-gate-alerts/...",
        "level":        "gtin",                 // which key matched
        "confidence":   0.99,
        "rationale":    "barcode 8720362191049 matches exactly",
        "lead_only":    false,                  // a conclusion, not a lead
        "related_alerts": 1,                     // same product, other countries
        "alert": {
          "product":           "LED Christmas tree",
          "brand":             "MICA",
          "model":             "1121031",
          "risk_type":         "Environment",
          "risk_level":        "Serious risk",
          "batch_number":      null,
          "country_of_origin": "People's Republic of China",
          "picture_url":       "https://ec.europa.eu/.../image/11231512",
          "published":         "28/08/2026"
        },
        "measure": {
          "action":               "withdrawal",
          "concerns_sold_units":  false,       // stock, not customers
          "category":             "Withdrawal of the product from the market",
          "effective_date":       "21/05/2026",
          "economic_operator":    "Distributor"
        }
      }
    ]
  },
  "meta": {
    "attribution":       "Alerts from the Rapid Alert System for ...",
    "source":            "https://ec.europa.eu/safety-gate-alerts",
    "language":          "en",
    "data_retrieved_at": "2026-10-01T22:15:04Z"
  }
}

How sure, and why

confidence and rationale say in plain words what matched. lead_only separates a conclusion you can act on from a lead a human should read first.

What you must actually do

measure carries the authority's order. concerns_sold_units answers the first question a seller asks: is this about stock I still hold, or units already in customers' hands?

Where it came from

Every response carries the attribution, the language and the exact moment the archive was last refreshed. Every match links to the official record, so anyone can check you.

Measured, not claimed

Quality is a number

Measured on the full archive and rerun on every change. The second column is the one that matters: it asks the question a seller actually asks, from a marketplace-style product title rather than from the official wording of the alert.

Benchmark of 4 October 2026, 800 queries over the full archive.
Alert textSeller title
Exact alert returned84%93%
Useful to the subscriber97%98%
Correct alert in first position-81%
Noise on off-topic queries0 / 120 / 12
Median latency3.9 ms3.9 ms
For AI agents

Model Context Protocol

The recalls API speaks MCP over the same engine and the same data as its REST endpoints, with four tools and nothing to install. The endpoint is key-protected and is being listed on MCP registries; ask for access and we will send you the URL and a key.

Tools exposed
check_product    one item against every recall
check_catalogue  up to 200 items in one call
get_alert        one alert by official case number
list_alerts      browse by category, risk, country
Regulatory context

Why do sellers need this?

Under Regulation (EU) 2023/988 on general product safety, applicable since 13 December 2024, online sellers and marketplaces addressing the EU must operate a process to detect unsafe products. Safety Gate is the reference public source.

This service helps you find relevant alerts. It does not determine your legal obligations, and it is not legal advice. Matches flagged lead_only require human review before you act on them.

Data, source and attribution

Where this comes from

Recall data originates from the European Commission Safety Gate portal and is reused under Commission Decision 2011/833/EU on the reuse of Commission documents. Reuse is authorised provided the original meaning of the alerts is not distorted and the source is acknowledged. Every response carries that acknowledgement, the extraction date and the language, and every match links to the official record.

Alerts from the Rapid Alert System for dangerous non-food products, published free of charge on the Safety Gate website (c) European Union, 2005 - 2026.

Not distorting the source is a condition of that permission, so it is built into the contract rather than left to good intentions: official fields come back verbatim under source, anything Oredrift derives comes back separately under enriched, and no derived value ever replaces an official one. The official severity is the Commission's, never a score of ours.

Safety Gate publishes in English and machine-translates into 24 other languages; in case of conflict the English version prevails. This API serves the English version only, so no translation layer is added to what the authorities wrote.

Alerts are refreshed weekly, following the Commission's own publication schedule. The meta.data_retrieved_at field gives the exact moment the archive was last refreshed.

On accuracy. Alerts are written by national authorities in 31 countries. Under point 3.6 of Annex I to Commission Delegated Regulation (EU) 2024/3173, the Commission itself accepts no liability for their correctness, and neither can we: Oredrift undertakes to return what the source says, reconciled and labelled, not to warrant that what the source says is right.

Oredrift is not affiliated with, endorsed by, or acting on behalf of the European Commission.