Toxicity API for Barcode Workflows
Send one barcode and receive one matching product with minimal identity details, ingredients, toxic-ingredient findings, baby-food warnings, and matched recalls.
POST /api/v1/toxicityIngestible for developers
Use a barcode to retrieve product toxicity findings, or access a normalized FDA + CDC recall feed in English or Spanish.
Send one barcode and receive one matching product with minimal identity details, ingredients, toxic-ingredient findings, baby-food warnings, and matched recalls.
POST /api/v1/toxicityRetrieve one unified, normalized feed combining current FDA and CDC recalls in English or Spanish, with original-source links.
GET /api/v1/recalls?language=esTell us what data or workflow would be useful to your product.
Request another API$19/month
10,000 requests / monthUp to 5 active API keys
✓ Toxicity API for Barcode Workflows
✓ Recalls API
Subscribe, click Create key, then replace $INGESTIBLE_API_KEY below with the secret shown once.
export INGESTIBLE_API_KEY="ing_live_…"$env:INGESTIBLE_API_KEY = "ing_live_…"barcode — Required barcode containing 8 to 14 digits. Spaces and hyphens are ignored.language — Optional response language: en or es. The default is en. Ingestible explanations and available recall translations use this language; source-label product text is preserved.Returns one exact USDA FoodData Central barcode match with its barcode, name, brand, category, package weight, ingredients, toxic-ingredient findings, baby-food warnings and notices, and matched recalls. Nutrition and personalized allergen matching are not included.
curl -X POST https://ingestible.org/api/v1/toxicity \
-H "Authorization: Bearer $INGESTIBLE_API_KEY" \
-H "Content-Type: application/json" \
--data-raw '{"barcode":"012345678905","language":"en"}'$headers = @{ Authorization = "Bearer $env:INGESTIBLE_API_KEY" }
$body = @{ barcode = "012345678905"; language = "en" } | ConvertTo-Json -Compress
Invoke-RestMethod -Method Post -Uri "https://ingestible.org/api/v1/toxicity" -Headers $headers -ContentType "application/json" -Body $body{
"data": {
"product": {
"barcode": "012345678905",
"name": "Oat Bites",
"brand": "Example Foods",
"category": "Snacks",
"packageWeight": "6 oz",
"ingredients": "Oats, sugar, titanium dioxide"
},
"toxicity": {
"warningCount": 3,
"toxicIngredients": [
{
"chemical": "Titanium dioxide",
"matchedIngredient": "titanium dioxide",
"reason": "cancer, restricted in EU",
"dateListed": "2022"
}
],
"babyFood": {
"ageRange": "6-36-months",
"findings": [
{
"id": "added_sugar",
"severity": "warning",
"message": "Contains added sugar. Detected ingredients: sugar.",
"matches": [
"sugar"
],
"evidence": {
"title": "WHO Europe — Nutrient and promotion profile model for ages 6–36 months",
"url": "https://www.who.int/europe/publications/i/item/WHO-EURO-2022-6681-46447-67287"
}
}
]
},
"recalls": {
"matchType": "barcode",
"items": [
{
"id": "R-123",
"title": "Oat Bites recall",
"description": "Oat Bites, 6 oz",
"reason": "Possible contamination",
"classification": "Class II",
"status": "Ongoing",
"date": "20260801",
"link": "https://example.test/recall"
}
]
}
}
}
}language — Optional response language: en or es. The default is en.source — Optional source filter: all, fda, or cdc. The default is all.limit — Optional integer from 1 to 100. The default is 50.cursor — Optional nextCursor value returned by the previous response. It is opaque: pass it unchanged; do not construct or edit it.curl "https://ingestible.org/api/v1/recalls?language=es&source=all&limit=50" \
-H "Authorization: Bearer $INGESTIBLE_API_KEY"$headers = @{ Authorization = "Bearer $env:INGESTIBLE_API_KEY" }
Invoke-RestMethod -Uri "https://ingestible.org/api/v1/recalls?language=es&source=all&limit=50" -Headers $headers{
"data": [
{
"id": "recall-1",
"source": "fda",
"title": "Retiro de Oat Bites",
"description": "Retiro debido a posible contaminación",
"link": "",
"pubDate": "2026-08-01",
"classification": "Class II",
"status": "Ongoing",
"distributionPattern": "Distribución nacional",
"recallingFirm": "Example Foods",
"reasonForRecall": "Retiro debido a posible contaminación",
"reportDate": "2026-08-05",
"recallInitiationDate": "2026-08-01",
"voluntaryMandated": "Voluntary: Firm initiated",
"products": [
{
"productDescription": "Oat Bites, paquete de 6 oz",
"codeInfo": "UPC 012345678905",
"productQuantity": "1,000 packages",
"recallNumber": "R-123"
}
],
"productCount": 1
}
],
"meta": {
"language": "es",
"source": "fda",
"limit": 50,
"nextCursor": null
}
}Every accepted request includes X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Used headers. Recall pages contain at most 100 records and return an opaque nextCursor. API keys are shown once, stored only as keyed cryptographic digests, and can be revoked here.
Paid subscribers may download, cache, and store API responses inside their own applications. Reselling or repackaging Ingestible’s translated, normalized output as a standalone competing dataset is not permitted.
The consumer app’s internal endpoints remain limited, unsupported demo surfaces. Paid access covers this authenticated, versioned contract for commercial integrations; it does not make public FDA or CDC source data proprietary.
Toxicity matches and recall translations are informational, not medical, legal, or regulatory advice. Always preserve and link to the original source.