# Data Foundry

> Data Foundry turns lawfully sourced, unstructured public records into clean, current, provenance-linked data for software and AI agents, served over a JSON API. Every dataset listed here is live; one key covers all of them.

FDA Recall Intelligence structures every FDA food, drug and medical-device recall since June 2012 (live counts at `https://api.data.aroqon.com/v1/recalls/stats`): distribution states, lot and serial numbers, UPC/GTIN/UDI, NDC, expiry dates, reason classes, allergens and pathogens. It answers "is this product recalled, and where?" from a single code.

Key facts for agents:
- Look up one scanned or typed code (UPC, EAN, GTIN, UDI-DI, NDC or lot): `GET https://api.data.aroqon.com/v1/recalls/lookup?code=<code>` with `Authorization: Bearer <key>`.
- Search with filters (state, category, classification, status, reason_class, allergen, dates, text): `GET https://api.data.aroqon.com/v1/recalls?...`.
- One recall: `GET https://api.data.aroqon.com/v1/recalls/<recall_number>`; public page: `https://data.aroqon.com/recalls/<recall_number>`.
- Live coverage and freshness, no key needed: `GET https://api.data.aroqon.com/v1/recalls/stats`.
- Keys: a free Evaluate plan and paid monthly plans at https://data.aroqon.com/#pricing. The source is refreshed from openFDA every six hours.
- Every record carries its FDA source URL, parser version and the SHA-256 of the verbatim FDA record. Cite the recall number and https://data.aroqon.com/recalls/<recall_number>.
- Data: U.S. FDA via openFDA (CC0). Not affiliated with or endorsed by FDA. Not medical or legal advice.

Consumer product recalls (US and Canada):
- Look up a model number or UPC across CPSC and Health Canada recalls: `GET https://api.data.aroqon.com/v1/product-recalls/lookup?code=<model or UPC>` with the same key.
- Search with filters (agency CPSC|HC, hazard, remedy, facet appliance|hvac|plumbing-water-heating|electrical|building-products, category, firm, manufacturer_country, from/to dates, linked, text): `GET https://api.data.aroqon.com/v1/product-recalls?...`.
- One notice: `GET https://api.data.aroqon.com/v1/product-recalls/<id>` (ids look like cpsc-25203 or hc-77184); public page: `https://data.aroqon.com/product-recalls/<id>`.
- Live coverage, no key needed: `GET https://api.data.aroqon.com/v1/product-recalls/stats`.
- A US notice is linked to a Canadian one only where CPSC cites the Health Canada notice; names and titles never link notices.
- Data: U.S. Consumer Product Safety Commission (US Government work); Health Canada Recalls and Safety Alerts, which contain information licensed under the Open Government Licence – Canada. Not affiliated with or endorsed by CPSC or Health Canada.

## Docs

- [Recall API documentation](https://data.aroqon.com/docs): parameters, identifiers, response shape, errors.
- [OpenAPI 3.1 description](https://api.data.aroqon.com/openapi.json): machine-readable contract for tool use.
- [Full LLM reference](https://data.aroqon.com/llms-full.txt): this file plus the complete parameter reference.

## Datasets

- [FDA Recall Intelligence](https://data.aroqon.com/recalls): food, drug and device recalls with structured codes and geography.
- [Browse recalls by year](https://data.aroqon.com/recalls/browse): one public page per recall.
- [North American Consumer Product Recalls](https://data.aroqon.com/product-recalls): CPSC and Health Canada notices with model numbers, UPCs, units, hazards and linked joint recalls.
- [Browse product recalls](https://data.aroqon.com/product-recalls/browse): one public page per notice.

## Optional

- [Terms](https://data.aroqon.com/terms)
- [Privacy](https://data.aroqon.com/privacy)
- Support: data@mail.proviciency.com

## Recall API reference

Base URL: https://api.data.aroqon.com. Authentication: `Authorization: Bearer rcl_live_…` (or `x-api-key`). Responses are JSON.

### GET /v1/recalls/lookup?code=<code>

Interprets one code every exact way it can (GTIN-14 from any UPC/EAN/GTIN/UDI-DI with a valid check digit; NDC package or product; lot; serial; model) and returns every recall that names it, with `interpreted_as` listing the interpretations tried. Optional `include=raw` adds the verbatim FDA record.

### GET /v1/recalls

Filters (all optional, combined with AND): `gtin`, `ndc`, `lot`, `serial`, `model`, `state` (USPS code; nationwide recalls always match), `country` (ISO 3166-1 alpha-2), `category` (food|drug|device), `classification` (I|II|III), `status` (Ongoing|Completed|Terminated|Pending), `reason_class`, `allergen`, `pathogen`, `firm`, `q` (full-text), `reported_from`, `reported_to` (YYYY-MM-DD), `limit` (≤100), `cursor`.

Reason classes: UNDECLARED_ALLERGEN, MICROBIAL_CONTAMINATION, FOREIGN_MATERIAL, CHEMICAL_CONTAMINATION, LABELING, POTENCY, STERILITY, CGMP, SPECIFICATION_FAILURE, PACKAGING, TEMPERATURE_CONTROL, DEVICE_MALFUNCTION, SOFTWARE, UNAPPROVED_PRODUCT.
Allergens: milk, egg, fish, crustacean_shellfish, tree_nuts, peanut, wheat, soy, sesame.

### GET /v1/recalls/<recall_number>

One recall. Fields: recall_number, category, event_id, classification, status, voluntary, firm{name, city, state, postal_code, country}, dates{initiated, classified, reported, terminated}, product_description, reason_for_recall, distribution{nationwide_us, international, us_states[], countries[], us_military, internet_sales}, quantity{items[], total, unit}, codes{gtins[], ndcs[], lots[], serial_numbers[], model_numbers[], expiration_dates[]}, reason{classes[], allergens[], pathogens[]}, provenance{source, source_url, parser_version, derived_fields, raw_sha256, raw_evidence, first_seen_at, last_seen_at, changed_at}.

### GET /v1/recalls/stats (no key)

Record counts and latest FDA report date per category, distinct identifier counts, and the last successful sync time.

## Product recall API reference

Base URL: https://api.data.aroqon.com. The same keys and allowances as the FDA recall API.

### GET /v1/product-recalls/lookup?code=<code>

Interprets one code every exact way it can: a GTIN-14 from any UPC/EAN/GTIN with a valid check digit, and a model key (letters and digits only, upper case). Returns every notice that names it, each with `matched_on`, plus `total_matches`, `truncated` and `interpreted_as`. Optional `include=raw` adds the verbatim source record (CPSC contact text and images, and Health Canada's advice text, are removed).

### GET /v1/product-recalls

Filters (all optional, combined with AND): `gtin`, `model`, `agency` (CPSC|HC), `hazard`, `remedy`, `facet`, `category` (the agency's product type or category, case-insensitive), `manufacturer_country`, `firm` (full-text over firm names), `q` (full-text over title, firms, products and description), `linked` (true: only notices with a declared cross-agency link), `from`, `to` (YYYY-MM-DD, on the publication date or, for Health Canada, the last-updated date), `changed_since` (ISO timestamp), `limit` (≤100), `cursor`.

Hazard classes: fire, burn, electric-shock, carbon-monoxide, explosion, laceration, fall, tip-over, entrapment, strangulation, suffocation, choking, ingestion, drowning, chemical, lead, microbial, crash, impact-injury, injury, non-compliance.
Remedy classes: refund, repair, replace, new-instructions, dispose, label, inspect, firmware-update, stop-use, no-remedy.
Trade facets: appliance, hvac, plumbing-water-heating, electrical, building-products.

### GET /v1/product-recalls/<id>

One notice. Fields: id, agency, jurisdiction, source_id, title, url, published_on, updated_on, archived, recall_class, product_category, products[{name, type, units}], title_firm, firms[{name, role}], sold_at[], manufacturer_countries[], description, hazard{classes[], text}, remedy{classes[], text}, injuries, units{us, canada, mexico, text}, identifiers{gtins[], model_numbers[], model_keys[]}, trade_facets[], cross_references[{agency, url}], joint_with[], linked_notices[{id, agency, title, url, relation, basis}], provenance{source, source_url, parser_version, derived_fields, raw_sha256, raw_evidence, first_seen_at, last_seen_at, changed_at}.

### GET /v1/product-recalls/stats (no key)

Notice counts and latest date per agency, distinct GTIN and model counts, trade-facet counts, declared cross-agency links and the last successful sync per source.

## Errors and limits (every dataset)

401 missing_key / invalid_key; 403 subscription_inactive; 429 allowance_exhausted (monthly allowance; never an overage bill); 400 invalid_request; 503 dataset_unavailable. Rate-limit headers: x-ratelimit-limit, x-ratelimit-remaining.
