E-commerce & Marketplaces

Product Safety & Recall Match API API

The Product Safety & Recall Match API matches a product to safety recalls as clean JSON.

3 actionsLive JSON1,000 free creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

The primary product_match endpoint resolves a product's identity (title, brand, category, GTIN) and returns matching recalls with a confidence score and what they matched on, and you can run a brand_check and batch many products. It is built for e-commerce, marketplace safety and compliance workflows that need to flag recalled products without maintaining recall feeds. One ReefAPI key, one shared credit pool, the standard envelope.

Live example

Real request and response JSON

Captured from the indexed primary action, product_match, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/enrich-recall/v1/product_match",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "gtin": "0860007279478"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "enrich-recall",
    "endpoint": "product_match",
    "mode": "live",
    "latency_ms": 9641,
    "record_count": 0,
    "bytes": 0,
    "cache_hit": false,
    "subcalls": [
      {
        "api": "barcode",
        "action": "lookup",
        "status": "ok",
        "latency_ms": 2442.6
      },
      {
        "api": "recall",
        "action": "search",
        "status": "ok",
        "latency_ms": 1151.2
      },
      {
        "api": "recall",
        "action": "by_company",
        "status": "ok",
        "latency_ms": 1157.4
      }
    ],
    "candidates_scored": 1
  },
  "data": {
    "identity": {
      "resolved_title": "Sichuan Chili Crisp",
      "brand": "Fly By Jing",
      "category": "food",
      "gtin": "[redacted-phone]",
      "source": "barcode (openfoodfacts, upcitemdb)",
      "resolved": true
    },
    "recalls": [],
    "possible": [
      {
        "match_confidence": 0.706,
        "matched_on": [
          "brand:exact:1.0",
          "category:match"
        ],
        "components": {
          "brand": 1,
          "title": 0.265,
          "category": 1,
          "exact_id": false
        },
        "agency": "U.S. FDA (openFDA RES)",
        "source": "openFDA",
        "recall_id": "H-[redacted-phone]",
        "category": "food",
        "classification": "Class II",
        "severity_score": 75,
        "recalling_firm": "Fly By Jing Inc.",
        "product": "Fly By Jing (branded) Creamy Sesame Noodles; 3.8 oz packets. Sold in single and 4 packs. Single UPC: [redacted-phone] pack UPC: [redacted-phone]",
        "hazard": "Possible cross-contamination resulting in undeclared allergen ingredient (Peanut)",
        "remedy": "Recall (Voluntary: Firm initiated)",
        "status": "Ongoing",
        "date": "[redacted-phone]",
        "url": null
      }
    ],
    "counts": {
      "recalls": 0,
      "possible": 1,
      "candidates_scored": 1
    },
    "sources_searched": [
      "U.S. FDA (openFDA RES)",
      "EU Safety Gate (RAPEX)"
    ],
    "coverage_gaps": [
      "CPSC (.gov, not yet accessible)",
      "NHTSA (served by the `vehicle` engine)",
      "Health Canada / UK OPSS / OECD (per-portal, not yet integrated)"
    ],
    "no_match_note": "Absence of a recall match does NOT mean the product is safe. Coverage = U.S. FDA (openFDA food/drug/device) + EU Safety Gate (RAPEX); it does NOT include CPSC, NHTSA, Health Canada or other national portals. This is safety INFORMATION, not a compliance or legal decision — verify with the official agency before acting."
  }
}
Actions

What the Product Safety & Recall Match API API does

ActionDescriptionConcrete use caseKey params
product_matchResolve a product (GTIN ‖ title+brand ‖ listing_url) and match it against FDA + EU recalls with transparent confidence. recalls[] = high-confidence (brand independently matched); possible[] = lower-confidence candidates.Pricing teams call product_match to resolve a product (GTIN ‖ title+brand ‖ listing_url) and match it against FDA + EU recalls wi….gtin, title, brand, category, listing_url, ...
brand_checkAll recalls for a brand / recalling-firm (normalized passthrough of the recall engine's by_company), newest first — the seller-watch / due-diligence use case.Marketplace operators call brand_check to get all recalls for a brand / recalling-firm (normalized passthrough of the recall engine's by_co….brand, category, date_from, date_to, limit
batchScan up to 25 catalog products in one call (seller pre-listing audit). Each item is product_match'd; per-item ok/error + a roll-up summary.Catalog enrichment teams call batch to scan up to 25 catalog products in one call (seller pre-listing audit).items, max_results
Code samples

Call product_match from your stack

curl -X POST https://api.reefapi.com/enrich-recall/v1/product_match \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"gtin":"0860007279478"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.enrich-recall.product_match with {"gtin":"0860007279478"}.
Use cases

Who uses this API and why

  • Marketplaces call product_match to flag or delist products that match an active safety recall.
  • Retail compliance tools use brand_check to monitor whether a supplier's brand has recalls.
  • Catalog pipelines use batch to screen an entire product feed against recall data.
FAQ

Questions developers ask before integrating

What is the Product Safety & Recall Match API API?

Product Safety & Recall Match API API is a ReefAPI endpoint group for product safety & recall match api It returns live JSON through POST requests under /enrich-recall/v1.

Is the Product Safety & Recall Match API API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Product Safety & Recall Match API calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Product Safety & Recall Match API login or account?

No login to Product Safety & Recall Match API is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Product Safety & Recall Match API data?

The page example is captured from a live product_match call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Product Safety & Recall Match API API use?

Product Safety & Recall Match API actions currently cost 2-3 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Product Safety & Recall Match API from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call enrich-recall actions with the same key, credit pool and JSON envelope used by normal REST requests.

Is the Product Safety & Recall Match API API a Product Safety & Recall Match API scraper?

It is the managed alternative to a DIY Product Safety & Recall Match API scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same product safety & recall match api back as clean JSON.

Why does my Product Safety & Recall Match API scraper keep getting blocked?

Most Product Safety & Recall Match API scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked or failed calls are free.

docs / enrich-recall

Product Safety & Recall Match API

Product Safety & Recall Match API

base /enrich-recall/v13 endpoints
post/enrich-recall/v1/product_match3 credits

Resolve a product (GTIN ‖ title+brand ‖ listing_url) and match it against FDA + EU recalls with transparent confidence. recalls[] = high-confidence (brand independently matched); possible[] = lower-confidence candidates.

ParameterAllowed / rangeDescription
gtinoptionalProduct barcode (GTIN-8/12/13/14, UPC, EAN or ISBN). The engine resolves it to {title, brand, category} via the barcode engine, then matches recalls. Provide this OR (title + brand) OR listing_url.
titleoptionalProduct title/name. Use with `brand` when you have no barcode. Ignored if `gtin` resolves a product.
brandoptionalProduct brand / manufacturer. STRONGLY recommended with `title` — brand is the independent false-match guard (a title match with a different brand is never asserted).
categoryoptionalOptional product category hint (food / drug / device / toy / apparel …) — improves category-fit scoring. Auto-derived from the barcode when available.
listing_urloptionalA marketplace product URL (amazon/ebay/…). MINIMUM support: the host is recorded and you must still pass title (+brand) for matching. Full URL→product resolution is the enrich-url engine's job.
max_results = 25optional1–50Max recalls[] + max possible[] returned (each list capped at this).
Try in playground →
post/enrich-recall/v1/brand_check2 credits

All recalls for a brand / recalling-firm (normalized passthrough of the recall engine's by_company), newest first — the seller-watch / due-diligence use case.

ParameterAllowed / rangeDescription
brandrequiredBrand / recalling-firm name to list recalls for.
categoryoptionalall · food · drug · deviceFDA recall category scope (passed through to the recall engine). Default all.
date_fromoptionalFilter recalls with report date from this YYYY-MM-DD.
date_tooptionalFilter recalls with report date to this YYYY-MM-DD.
limit = 25optional1–100Max recalls to return for the brand.
Try in playground →
post/enrich-recall/v1/batch2 credits

Scan up to 25 catalog products in one call (seller pre-listing audit). Each item is product_match'd; per-item ok/error + a roll-up summary.

ParameterAllowed / rangeDescription
itemsrequiredUp to 25 products (seller-catalog scan). Each item = a {gtin} OR {title, brand[, category]} object (or a bare barcode string). Per-item ok/error; one bad item never sinks the batch.
max_results = 25optional1–50Max recalls[] + max possible[] returned (each list capped at this).
Try in playground →