Skip to content

API reference ​

Base URL: https://recallguard-api.vercel.app

The machine-readable spec on that host is GET /openapi.json. Error bodies are { "error", "message" }.

GET /api/v1/health ​

Free.

json
{
  "status": "ok",
  "dataset_count": 21812,
  "dataset_built_at": "2026-09-28T17:26:11Z",
  "date_min": "2023-01-04",
  "date_max": "2026-09-24",
  "sources": {
    "cpsc": 1508,
    "fda-food": 6140,
    "fda-drug": 3277,
    "fda-device": 10887
  }
}

Those numbers are the health body observed on 2026-09-30.

GET /api/v1/feed ​

$0.05 per call. Without X-PAYMENT the response is 402 and nothing is settled.

Query parameters:

ParamRule
sinceYYYY-MM-DD. Keeps rows with recall_date on or after this day.
untilYYYY-MM-DD. Keeps rows with recall_date on or before this day.
sourceComma-separated: cpsc, fda-food, fda-drug, fda-device.
severityComma-separated: serious, standard, class-i, class-ii, class-iii, unclassified.
limitInteger 1–200. Default 50.
cursorOpaque next_cursor from the previous page.

A paid 200 body is:

json
{
  "data": [],
  "total": 0,
  "limit": 50,
  "next_cursor": null,
  "dataset_built_at": "2026-09-28T17:26:11Z"
}

Each row uses recall_date, id, source, severity, title, firm, hazard, url, and the other fields in the OpenAPI Recall schema. There is no offset parameter and no pagination object.

POST /api/v1/match ​

$0.10 per call. Body:

json
{
  "items": [
    { "name": "Snuga Swing", "brand": "Fisher-Price" }
  ]
}

1 to 100 items. Each item needs a name or a upc.

A paid 200 body is:

json
{
  "results": [
    {
      "input": { "name": "Snuga Swing", "brand": "Fisher-Price", "upc": null },
      "match_count": 0,
      "matches": []
    }
  ],
  "threshold": 0.62,
  "dataset_built_at": "2026-09-28T17:26:11Z"
}

Each match includes recall_id, score, match_type (upc_exact or token), source, severity, classification, title, firm, recall_date, hazard, and url. At most 5 matches per item. Token matches below 0.62 are omitted.

The 2026-09-29 self-test used UPC 6-87652-16501-3 and the operator reported match_count 0. That recall date is after date_max.

POST /api/v1/webhook ​

This route is not registered. The live server returns 404. There is no subscription id and no per-event price.

Routes that are not on this host ​

This API does not issue trial tokens, does not accept Authorization: Bearer as payment, and does not price calls on Ethereum, Arbitrum, Optimism, Polygon, or Solana.

Docs describe recallguard-api.vercel.app as checked on 2026-09-30.