Ingestible for developers

Product toxicity and localized recalls

Use a barcode to retrieve product toxicity findings, or access a normalized FDA + CDC recall feed in English or Spanish.

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/toxicity

Recalls API

Retrieve one unified, normalized feed combining current FDA and CDC recalls in English or Spanish, with original-source links.

GET /api/v1/recalls?language=es

Need another API?

Tell us what data or workflow would be useful to your product.

Request another API

Pro

$19/month

10,000 requests / month

Up to 5 active API keys

Toxicity API for Barcode Workflows

Recalls API

Quick start

Authenticate with a bearer token

Subscribe, click Create key, then replace $INGESTIBLE_API_KEY below with the secret shown once.

macOS or Linux (Bash)

export INGESTIBLE_API_KEY="ing_live_…"

Windows PowerShell

$env:INGESTIBLE_API_KEY = "ing_live_…"

Look up product safety by barcode

Request body fields

  • barcodeRequired barcode containing 8 to 14 digits. Spaces and hyphens are ignored.
  • languageOptional 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.

macOS or Linux (Bash)

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"}'

Windows PowerShell

$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

Example response

{
  "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"
          }
        ]
      }
    }
  }
}

Get recalls

Query parameters

  • languageOptional response language: en or es. The default is en.
  • sourceOptional source filter: all, fda, or cdc. The default is all.
  • limitOptional integer from 1 to 100. The default is 50.
  • cursorOptional nextCursor value returned by the previous response. It is opaque: pass it unchanged; do not construct or edit it.

macOS or Linux (Bash)

curl "https://ingestible.org/api/v1/recalls?language=es&source=all&limit=50" \
  -H "Authorization: Bearer $INGESTIBLE_API_KEY"

Windows PowerShell

$headers = @{ Authorization = "Bearer $env:INGESTIBLE_API_KEY" }
Invoke-RestMethod   -Uri "https://ingestible.org/api/v1/recalls?language=es&source=all&limit=50"   -Headers $headers

Example response

{
  "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.