The catalog

<!-- order: 2 | Listed products, brands, categories and the verify lookup: what's in them and how to search. -->

The catalog is every product the listing rule lists: verified, or recently withdrawn or terminated within their grace periods, and never a product marked Do Not Publish. Anyone can read it without a key, at 60 requests a minute; a key or your token raises that and, with catalog.read.extended, adds package details and other certifications.

Find a product

# By words in the product or brand name
curl "https://api.foodintegrityproject.org/v2/catalog/products?q=oat+milk"
# By barcode
curl "https://api.foodintegrityproject.org/v2/catalog/products?gtin=00850019428060"
# By certificate number
curl "https://api.foodintegrityproject.org/v2/catalog/products?certificate=C-670849-2026"

Filter by program (non_gmo or non_upf), brand_number and category (codes from /v2/catalog/categories). Combine filters freely.

Verify a product

/v2/catalog/lookup answers what a QR code or a scanner asks: is this product verified and listed?

curl "https://api.foodintegrityproject.org/v2/catalog/lookup?gtin=00850019428060"
{ "found": true, "listed": true, "product": { "name": "…", "verifications": [ { "program": "non_gmo", "status": "verified", "certificate_number": "C-670849-2026", "valid_to": "2027-04-13" } ] } }

A product that isn't listed comes back as { "found": false, "listed": false }, never with its details.

What a product has

  • verifications: one per program, with status, certificate number, dates, scope, the technical administrator, and listed
  • brand (number and name), participant, categories, gtins
  • with catalog.read.extended: packages (size, unit, type, channel) and other_certifications

The whole catalog

/v2/catalog/export?format=ndjson (or csv) streams everything listed. For a copy you keep up to date, export once, then follow the change feed.