Public API
Business and Enterprise accounts can read RejectRadar from their own systems. Every route is read-only and answers with the same JSON as the web app.
Keys
An owner or admin with a verified email creates keys under Settings, API keys. A key is shown once, when it is created, so store it then. An account holds at most 5 live keys, and a key can be revoked there at any time. A key opens only /v1/public, and a signed-in session does not open it.
Requests
Send the key as a bearer token:
curl -H "Authorization: Bearer rr_live_…" \
"https://rejectradar-staging-api.umarnazaket.com/v1/public/notices?origin=PK&commodity=100"Routes
All under https://rejectradar-staging-api.umarnazaket.com/v1/public. The OpenAPI document describes them for code generators and API tools; it needs no key.
| Route | What it does | Query parameters |
|---|---|---|
GET /notices | Search notices, newest first, within the account’s history window. The answer’s next field is the cursor of the next page. | destination (US, EU, UK, AU; comma-separated), origin (ISO country code), commodity, hazard, hazardCategory, source (fda_refusal, import_alert, rasff, uk_bn, au_ifis), from and to (YYYY-MM-DD), q (3 to 100 characters of product text), cursor |
GET /notices/:id | One notice. | — |
GET /dashboards/topic | Monthly counts, top hazards and the latest notices for a topic. | origin (required), commodity, destination |
GET /firms/search | Find firms by name or FDA FEI number, best match first. | name (2 to 200 characters) or fei, country, city |
GET /firms/:id | A firm’s profile with its records. It uses one firm lookup of the plan, as in the app. | — |
GET /import-alerts/:number | An FDA Import Alert’s text and its approved summary, for example 99-08. | locale (en, ur, hi, bn) |
GET /mrl | The EU maximum residue level of one pesticide in one commodity, optionally compared with a lab result. | commodity (required, a commodity id), residue (required, a residue id), lab (mg/kg) |
GET /mrl/residues | Find pesticide residues by name, for the residue id GET /mrl takes. | q (2 to 100 characters, required) |
GET /taxonomy | The commodities, hazards, destinations and countries the other routes take, with their labels. | locale (en, ur, hi, bn) |
GET /usage | This month’s API calls and the plan’s limit. It does not use a call. | — |
Quota and rate limit
- Every call except
/usageuses one of the plan’s monthly API calls: 10,000 on Business. A call with a bad query still counts. - Each answer carries
X-Quota-UsedandX-Quota-Limit. - Each key may make 60 calls a minute; past that, calls answer
429 RATE_LIMITEDwithRetry-Afterin seconds.
Errors
An error answers with its HTTP status and a JSON body:
{
"code": "PLAN_LIMIT_REACHED",
"message": "…",
"details": { "action": "api_calls" },
"requestId": "…"
}401 API_KEY_MISSING: no key, or a malformed one.401 API_KEY_INVALID: an unknown or revoked key.403 PLAN_UPGRADE_REQUIRED: the plan has no API access; keys stop working after a downgrade but are kept.403 PLAN_LIMIT_REACHED: the month’s calls are used up.400 BAD_REQUEST: a query parameter is not valid;detailssays which.404 NOT_FOUND: no such notice, firm or alert.- Quote the
requestIdwhen you write to us about an error.