---
type: "firecrawl-provider"
description: "Open Food Facts, the open database of packaged foods (world.openfoodfacts.org): product facts by barcode (name, brand, quantity, countries, ingredients, allergens, additives, Nutri-Score, NOVA, per-100g and per-serving nutrition, images), full-text and filtered product search over the Search-a-licious service, and taxonomy autocomplete for categories, brands, labels and countries. Anonymous read API; data under ODbL, images CC BY-SA."
use_when: "Open Food Facts, the open database of packaged foods (world.openfoodfacts.org): product facts by barcode (name, brand, quantity, countries, ingredients, allergens, additives, Nutri-Score, NOVA, per-100g and per-serving nutrition, images), full-text and filtered product search over the Search-a-licious service, and taxonomy autocomplete for categories, brands, labels and countries. Anonymous read API; data under ODbL, images CC BY-SA."
categories: "Health"
capabilities: 3
credits_per_call: 5
---
# Open Food Facts on Firecrawl Alexandria

Open Food Facts, the open database of packaged foods (world.openfoodfacts.org): product facts by barcode (name, brand, quantity, countries, ingredients, allergens, additives, Nutri-Score, NOVA, per-100g and per-serving nutrition, images), full-text and filtered product search over the Search-a-licious service, and taxonomy autocomplete for categories, brands, labels and countries. Anonymous read API; data under ODbL, images CC BY-SA.

- Categories: Health
- Category index: [Health category](https://firecrawl.dev/alexandria/agents/categories/health)
- Provider key: `world-openfoodfacts-org`
- Access: Firecrawl credits
- Cost: 5 credits per call

## More

- [Human guide](https://firecrawl.dev/app/alexandria/world-openfoodfacts-org)
- [OpenAPI spec](https://firecrawl.dev/alexandria/agents/providers/world-openfoodfacts-org/openapi.json)

## Capabilities

- [Product](https://firecrawl.dev/alexandria/agents/providers/world-openfoodfacts-org/foods/product): One packaged food product by barcode (GTIN/EAN/UPC) from Open Food Facts: names, brand, quantity and serving, selling countries, categories, labels, stores, ingredients (text and parsed list with percent estimates and vegan/vegetarian flags), allergens, traces, additives, ingredient analysis, Nutri-Score (grade, score, version), NOVA group, Eco-Score, nutrient levels, the raw nutriments table (per 100 g and per serving, site keys), a fixed per-100g summary, image URLs, edit timestamps, the canonical product URL and the ODbL attribution.
- [Search](https://firecrawl.dev/alexandria/agents/providers/world-openfoodfacts-org/foods/search): Search Open Food Facts products through the Search-a-licious service: free text (matched on product name, generic name, categories, labels and brands in `lang`) and/or structured filters (selling country, category, brand, Nutri-Score grade, NOVA group), sorted by relevance, popularity or last edit, paginated. Each hit carries barcode, product URL, name, brands, quantity, categories, countries, Nutri-Score, NOVA, Eco-Score, allergens, a per-100g nutrient summary, image URLs and the edit timestamp. Optional facet counts for brands, Nutri-Score grades and countries.
- [Suggest](https://firecrawl.dev/alexandria/agents/providers/world-openfoodfacts-org/foods/suggest): Autocomplete Open Food Facts taxonomy entries (categories, brands, labels, countries) from a typed prefix, returning the canonical ids (`en:oat-milks`, `en:france`) that `search` filters accept together with their display names.

## 1. Choose this provider when

Open Food Facts, the open database of packaged foods (world.openfoodfacts.org): product facts by barcode (name, brand, quantity, countries, ingredients, allergens, additives, Nutri-Score, NOVA, per-100g and per-serving nutrition, images), full-text and filtered product search over the Search-a-licious service, and taxonomy autocomplete for categories, brands, labels and countries. Anonymous read API; data under ODbL, images CC BY-SA.

## 2. Minimal request

Call `POST https://api.firecrawl.dev/v2/scrape` with `{ alexandria: { provider, capability, options } }`. For a batch, send `{ alexandria: [...] }` with up to 10 calls.

```json
{
  "provider": "world-openfoodfacts-org",
  "capability": "foods/product",
  "options": {
    "barcode": "5449000000996"
  }
}
```

## 3. Add provider options

Use only the options needed for the task:

- `barcode` (string): Product barcode: GTIN-8/12/13/14 (EAN, UPC) as digits, leading zeros kept. Open Food Facts normalises codes, so the returned `barcode` may carry extra leading zeros. Exactly one of `barcode` or `url`. Pattern: ^[0-9]{8,14}$. Example: `<barcode>`
- `country` (string): Two-letter country code (`cc`) the site uses for country-dependent computations such as the Nutri-Score comparison country; default `us`. Pattern: ^[a-z]{2}$. Example: `<country>`
- `lang` (string): Two-letter language code (`lc`) for localised names; default `en`. Pattern: ^[a-z]{2}$. Example: `<lang>`
- `url` (string): A product page URL on any Open Food Facts country site, e.g. https://world.openfoodfacts.org/product/5449000000996/coca-cola or https://fr.openfoodfacts.org/produit/5449000000996. The barcode is taken from the path. Example: `<url>`

## 4. Request through your preferred interface

### JavaScript

```javascript
const result = await firecrawl.scrape({
  alexandria: {
    provider: "world-openfoodfacts-org",
    capability: "foods/product",
    options: {
      barcode: "5449000000996",
    },
  },
});
```

### Python

```python
result = firecrawl.scrape_alexandria({
  "provider": "world-openfoodfacts-org",
  "capability": "foods/product",
  "options": {
    "barcode": "5449000000996"
  }
})
```

### cURL

```sh
curl https://api.firecrawl.dev/v2/scrape \
  -H "Authorization: Bearer $FIRECRAWL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "alexandria": {
    "provider": "world-openfoodfacts-org",
    "capability": "foods/product",
    "options": {
      "barcode": "5449000000996"
    }
  }
}'
```

### CLI

```sh
firecrawl scrape 'world-openfoodfacts-org/foods/product' \
  --options '{"barcode":"5449000000996"}'
```


### MCP

Call the FCX MCP retrieve tool with this object:

```json
{
  "provider": "world-openfoodfacts-org",
  "capability": "foods/product",
  "options": {
    "barcode": "5449000000996"
  }
}
```

Ask for only the returned fields needed by the task.

## 5. Full request shape

```json
{
  "provider": "world-openfoodfacts-org",
  "capability": "foods/product",
  "options": {
    "barcode": "5449000000996"
  }
}
```

## 6. Response data

The response includes `success`, `provider`, `capability`, `creditsCost` and `data`. This example shows the provider payload in `data`:

```json
{
  "additives_tags": [
    "en:e150d",
    "en:e338"
  ],
  "allergens_tags": [],
  "attribution": {
    "data_license": "ODbL 1.0",
    "images_license": "CC BY-SA 3.0",
    "source_url": "https://world.openfoodfacts.org/product/5449000000996",
    "text": "Data from Open Food Facts (https://world.openfoodfacts.org), licensed under the Open Database License (ODbL) with contents under the Database Contents License (DbCL); product images are CC BY-SA 3.0."
  },
  "barcode": "5449000000996",
  "brands": "COCA-COLA SERVICES SA/NV",
  "brands_tags": [
    "COCA-COLA SERVICES SA/NV"
  ],
  "categories_tags": [
    "en:beverages-and-beverages-preparations",
    "en:beverages",
    "en:non-alcoholic-beverages",
    "en:carbonated-drinks",
    "en:soft-drinks",
    "en:sodas",
    "en:colas",
    "pt:bebidas cafeína"
  ],
  "completeness": 0.8875,
  "countries_tags": [
    "en:albania",
    "en:austria",
    "en:belgium",
    "en:bulgaria",
    "en:canada",
    "en:czech-republic",
    "en:france",
    "en:georgia",
    "en:germany",
    "en:ghana",
    "en:iceland",
    "en:india",
    "en:italy",
    "en:latvia",
    "en:lithuania",
    "en:mexico",
    "en:morocco",
    "en:poland",
    "en:romania",
    "en:senegal",
    "en:spain",
    "en:switzerland",
    "en:turkey",
    "en:ukraine",
    "en:united-kingdom",
    "en:united-states"
  ],
  "created_t": 1339313745,
  "ecoscore_grade": "not-applicable",
  "generic_name": "Bebida refrescante aromatizada",
  "images": {
    "front": "https://images.openfoodfacts.org/images/products/544/900/000/0996/front_en.1129.400.jpg",
    "front_small": "https://images.openfoodfacts.org/images/products/544/900/000/0996/front_en.1129.200.jpg",
    "ingredients": "https://images.openfoodfacts.org/images/products/544/900/000/0996/ingredients_en.1172.400.jpg",
    "nutrition": "https://images.openfoodfacts.org/images/products/544/900/000/0996/nutrition_en.1173.400.jpg"
  },
  "ingredients": [
    {
      "id": "en:carbonated-water",
      "percent": null,
      "percent_estimate": 83.4,
      "sub_ingredient_count": 0,
      "text": "Agua carbonatada",
      "vegan": "yes",
      "vegetarian": "yes"
    },
    {
      "id": "en:sugar",
      "percent": null,
      "percent_estimate": 10.6,
      "sub_ingredient_count": 0,
      "text": "azúcar",
      "vegan": "maybe",
      "vegetarian": "yes"
    },
    {
      "id": "en:e150d",
      "percent": null,
      "percent_estimate": 2,
      "sub_ingredient_count": 0,
      "text": "e150d",
      "vegan": "yes",
      "vegetarian": "yes"
    },
    {
      "id": "en:e338",
      "percent": null,
      "percent_estimate": 2,
      "sub_ingredient_count": 0,
      "text": "ácido fosfórico",
      "vegan": "yes",
      "vegetarian": "yes"
    },
    {
      "id": "en:natural-flavouring",
      "percent": null,
      "percent_estimate": 2,
      "sub_ingredient_count": 1,
      "text": "aromas naturales",
      "vegan": "maybe",
      "vegetarian": "maybe"
    }
  ],
  "ingredients_analysis_tags": [
    "en:palm-oil-free",
    "en:maybe-vegan",
    "en:vegetarian"
  ],
  "ingredients_text": "Agua carbonatada, azúcar, colorante (E-150d), acidulante (ácido fosfórico), aromas naturales (contiene cafeína).",
  "labels_tags": [
    "en:made-in-the-eu",
    "fr:triman"
  ],
  "language": "es",
  "last_modified_t": 1791648906,
  "name": "Coca-Cola Original",
  "nova_group": 4,
  "nutrient_levels": {
    "fat": "low",
    "salt": "low",
    "saturated-fat": "low",
    "sugars": "high"
  },
  "nutriments": {
    "added-sugars": 10.6,
    "added-sugars_100g": 10.6,
    "added-sugars_modifier": "~",
    "added-sugars_serving": 35,
    "added-sugars_unit": "g",
    "added-sugars_value": 10.6,
    "carbohydrates": 10.6,
    "carbohydrates_100g": 10.6,
    "carbohydrates_serving": 35,
    "carbohydrates_unit": "g",
    "carbohydrates_value": 10.6,
    "energy": 180,
    "energy-kcal": 42.4,
    "energy-kcal_100g": 42.4,
    "energy-kcal_modifier": "~",
    "energy-kcal_serving": 140,
    "energy-kcal_unit": "kcal",
    "energy-kcal_value": 42.4,
    "energy-kj": 180,
    "energy-kj_100g": 180,
    "energy-kj_serving": 594,
    "energy-kj_unit": "kJ",
    "energy-kj_value": 180,
    "energy_100g": 180,
    "energy_serving": 594,
    "energy_unit": "kJ",
    "energy_value": 180,
    "fat": 0,
    "fat_100g": 0,
    "fat_serving": 0,
    "fat_unit": "g",
    "fat_value": 0,
    "fruits-vegetables-legumes-estimate-from-ingredients_100g": 0,
    "fruits-vegetables-nuts-estimate-from-ingredients_100g": 0,
    "nova-group": 4,
    "nova-group_100g": 4,
    "nova-group_serving": 4,
    "nova-group_unit": "",
    "nova-group_value": 4,
    "proteins": 0,
    "proteins_100g": 0,
    "proteins_serving": 0,
    "proteins_unit": "g",
    "proteins_value": 0,
    "salt": 0,
    "salt_100g": 0,
    "salt_serving": 0,
    "salt_unit": "g",
    "salt_value": 0,
    "saturated-fat": 0,
    "saturated-fat_100g": 0,
    "saturated-fat_serving": 0,
    "saturated-fat_unit": "g",
    "saturated-fat_value": 0,
    "sodium": 0,
    "sodium_100g": 0,
    "sodium_modifier": "~",
    "sodium_serving": 0,
    "sodium_unit": "g",
    "sodium_value": 0,
    "sugars": 10.6,
    "sugars_100g": 10.6,
    "sugars_serving": 35,
    "sugars_unit": "g",
    "sugars_value": 10.6
  },
  "nutriments_100g": {
    "carbohydrates": 10.6,
    "energy_kcal": 42.4,
    "energy_kj": 180,
    "fat": 0,
    "fiber": null,
    "proteins": 0,
    "salt": 0,
    "saturated_fat": 0,
    "sodium": 0,
    "sugars": 10.6
  },
  "nutriscore": {
    "grade": "e",
    "score": 12,
    "version": "2023"
  },
  "nutrition_data_per": "100g",
  "observed_at_ms": 1791942128594,
  "obsolete": false,
  "product_quantity": 330,
  "product_quantity_unit": "ml",
  "quantity": "330 ml",
  "serving_quantity": 330,
  "serving_quantity_unit": "ml",
  "serving_size": "1 portion (330 ml)",
  "stores_tags": [
    "Michus Supermercados",
    "ahorramas",
    "carrefour",
    "greggs",
    "maxima",
    "mercadona"
  ],
  "traces_tags": [],
  "unique_scans_n": 671,
  "url": "https://world.openfoodfacts.org/product/5449000000996"
}
```

## API reference-derived contract

The following capability contract is generated from the same normalized Alexandria API reference exposed in the API spec.

### Product

- Capability: `foods/product`
- Description: One packaged food product by barcode (GTIN/EAN/UPC) from Open Food Facts: names, brand, quantity and serving, selling countries, categories, labels, stores, ingredients (text and parsed list with percent estimates and vegan/vegetarian flags), allergens, traces, additives, ingredient analysis, Nutri-Score (grade, score, version), NOVA group, Eco-Score, nutrient levels, the raw nutriments table (per 100 g and per serving, site keys), a fixed per-100g summary, image URLs, edit timestamps, the canonical product URL and the ODbL attribution.
- Instructions: You have a barcode (or a world.openfoodfacts.org product URL) and want its nutrition facts, ingredients, allergens or scores. Use `search` first when you only know a name or brand.
- Cost: 5 credits per call
- Capability file: [Product](https://firecrawl.dev/alexandria/agents/providers/world-openfoodfacts-org/foods/product)

Accepted options:
- `barcode` (string): Product barcode: GTIN-8/12/13/14 (EAN, UPC) as digits, leading zeros kept. Open Food Facts normalises codes, so the returned `barcode` may carry extra leading zeros. Exactly one of `barcode` or `url`. Pattern: ^[0-9]{8,14}$. Example: `<barcode>`
- `country` (string): Two-letter country code (`cc`) the site uses for country-dependent computations such as the Nutri-Score comparison country; default `us`. Pattern: ^[a-z]{2}$. Example: `<country>`
- `lang` (string): Two-letter language code (`lc`) for localised names; default `en`. Pattern: ^[a-z]{2}$. Example: `<lang>`
- `url` (string): A product page URL on any Open Food Facts country site, e.g. https://world.openfoodfacts.org/product/5449000000996/coca-cola or https://fr.openfoodfacts.org/produit/5449000000996. The barcode is taken from the path. Example: `<url>`

Response schema example:
```json
{
  "additives_tags": [
    "en:e150d",
    "en:e338"
  ],
  "allergens_tags": [],
  "attribution": {
    "data_license": "ODbL 1.0",
    "images_license": "CC BY-SA 3.0",
    "source_url": "https://world.openfoodfacts.org/product/5449000000996",
    "text": "Data from Open Food Facts (https://world.openfoodfacts.org), licensed under the Open Database License (ODbL) with contents under the Database Contents License (DbCL); product images are CC BY-SA 3.0."
  },
  "barcode": "5449000000996",
  "brands": "COCA-COLA SERVICES SA/NV",
  "brands_tags": [
    "COCA-COLA SERVICES SA/NV"
  ],
  "categories_tags": [
    "en:beverages-and-beverages-preparations",
    "en:beverages",
    "en:non-alcoholic-beverages",
    "en:carbonated-drinks",
    "en:soft-drinks",
    "en:sodas",
    "en:colas",
    "pt:bebidas cafeína"
  ],
  "completeness": 0.8875,
  "countries_tags": [
    "en:albania",
    "en:austria",
    "en:belgium",
    "en:bulgaria",
    "en:canada",
    "en:czech-republic",
    "en:france",
    "en:georgia",
    "en:germany",
    "en:ghana",
    "en:iceland",
    "en:india",
    "en:italy",
    "en:latvia",
    "en:lithuania",
    "en:mexico",
    "en:morocco",
    "en:poland",
    "en:romania",
    "en:senegal",
    "en:spain",
    "en:switzerland",
    "en:turkey",
    "en:ukraine",
    "en:united-kingdom",
    "en:united-states"
  ],
  "created_t": 1339313745,
  "ecoscore_grade": "not-applicable",
  "generic_name": "Bebida refrescante aromatizada",
  "images": {
    "front": "https://images.openfoodfacts.org/images/products/544/900/000/0996/front_en.1129.400.jpg",
    "front_small": "https://images.openfoodfacts.org/images/products/544/900/000/0996/front_en.1129.200.jpg",
    "ingredients": "https://images.openfoodfacts.org/images/products/544/900/000/0996/ingredients_en.1172.400.jpg",
    "nutrition": "https://images.openfoodfacts.org/images/products/544/900/000/0996/nutrition_en.1173.400.jpg"
  },
  "ingredients": [
    {
      "id": "en:carbonated-water",
      "percent": null,
      "percent_estimate": 83.4,
      "sub_ingredient_count": 0,
      "text": "Agua carbonatada",
      "vegan": "yes",
      "vegetarian": "yes"
    },
    {
      "id": "en:sugar",
      "percent": null,
      "percent_estimate": 10.6,
      "sub_ingredient_count": 0,
      "text": "azúcar",
      "vegan": "maybe",
      "vegetarian": "yes"
    },
    {
      "id": "en:e150d",
      "percent": null,
      "percent_estimate": 2,
      "sub_ingredient_count": 0,
      "text": "e150d",
      "vegan": "yes",
      "vegetarian": "yes"
    },
    {
      "id": "en:e338",
      "percent": null,
      "percent_estimate": 2,
      "sub_ingredient_count": 0,
      "text": "ácido fosfórico",
      "vegan": "yes",
      "vegetarian": "yes"
    },
    {
      "id": "en:natural-flavouring",
      "percent": null,
      "percent_estimate": 2,
      "sub_ingredient_count": 1,
      "text": "aromas naturales",
      "vegan": "maybe",
      "vegetarian": "maybe"
    }
  ],
  "ingredients_analysis_tags": [
    "en:palm-oil-free",
    "en:maybe-vegan",
    "en:vegetarian"
  ],
  "ingredients_text": "Agua carbonatada, azúcar, colorante (E-150d), acidulante (ácido fosfórico), aromas naturales (contiene cafeína).",
  "labels_tags": [
    "en:made-in-the-eu",
    "fr:triman"
  ],
  "language": "es",
  "last_modified_t": 1791648906,
  "name": "Coca-Cola Original",
  "nova_group": 4,
  "nutrient_levels": {
    "fat": "low",
    "salt": "low",
    "saturated-fat": "low",
    "sugars": "high"
  },
  "nutriments": {
    "added-sugars": 10.6,
    "added-sugars_100g": 10.6,
    "added-sugars_modifier": "~",
    "added-sugars_serving": 35,
    "added-sugars_unit": "g",
    "added-sugars_value": 10.6,
    "carbohydrates": 10.6,
    "carbohydrates_100g": 10.6,
    "carbohydrates_serving": 35,
    "carbohydrates_unit": "g",
    "carbohydrates_value": 10.6,
    "energy": 180,
    "energy-kcal": 42.4,
    "energy-kcal_100g": 42.4,
    "energy-kcal_modifier": "~",
    "energy-kcal_serving": 140,
    "energy-kcal_unit": "kcal",
    "energy-kcal_value": 42.4,
    "energy-kj": 180,
    "energy-kj_100g": 180,
    "energy-kj_serving": 594,
    "energy-kj_unit": "kJ",
    "energy-kj_value": 180,
    "energy_100g": 180,
    "energy_serving": 594,
    "energy_unit": "kJ",
    "energy_value": 180,
    "fat": 0,
    "fat_100g": 0,
    "fat_serving": 0,
    "fat_unit": "g",
    "fat_value": 0,
    "fruits-vegetables-legumes-estimate-from-ingredients_100g": 0,
    "fruits-vegetables-nuts-estimate-from-ingredients_100g": 0,
    "nova-group": 4,
    "nova-group_100g": 4,
    "nova-group_serving": 4,
    "nova-group_unit": "",
    "nova-group_value": 4,
    "proteins": 0,
    "proteins_100g": 0,
    "proteins_serving": 0,
    "proteins_unit": "g",
    "proteins_value": 0,
    "salt": 0,
    "salt_100g": 0,
    "salt_serving": 0,
    "salt_unit": "g",
    "salt_value": 0,
    "saturated-fat": 0,
    "saturated-fat_100g": 0,
    "saturated-fat_serving": 0,
    "saturated-fat_unit": "g",
    "saturated-fat_value": 0,
    "sodium": 0,
    "sodium_100g": 0,
    "sodium_modifier": "~",
    "sodium_serving": 0,
    "sodium_unit": "g",
    "sodium_value": 0,
    "sugars": 10.6,
    "sugars_100g": 10.6,
    "sugars_serving": 35,
    "sugars_unit": "g",
    "sugars_value": 10.6
  },
  "nutriments_100g": {
    "carbohydrates": 10.6,
    "energy_kcal": 42.4,
    "energy_kj": 180,
    "fat": 0,
    "fiber": null,
    "proteins": 0,
    "salt": 0,
    "saturated_fat": 0,
    "sodium": 0,
    "sugars": 10.6
  },
  "nutriscore": {
    "grade": "e",
    "score": 12,
    "version": "2023"
  },
  "nutrition_data_per": "100g",
  "observed_at_ms": 1791942128594,
  "obsolete": false,
  "product_quantity": 330,
  "product_quantity_unit": "ml",
  "quantity": "330 ml",
  "serving_quantity": 330,
  "serving_quantity_unit": "ml",
  "serving_size": "1 portion (330 ml)",
  "stores_tags": [
    "Michus Supermercados",
    "ahorramas",
    "carrefour",
    "greggs",
    "maxima",
    "mercadona"
  ],
  "traces_tags": [],
  "unique_scans_n": 671,
  "url": "https://world.openfoodfacts.org/product/5449000000996"
}
```

### Search

- Capability: `foods/search`
- Description: Search Open Food Facts products through the Search-a-licious service: free text (matched on product name, generic name, categories, labels and brands in `lang`) and/or structured filters (selling country, category, brand, Nutri-Score grade, NOVA group), sorted by relevance, popularity or last edit, paginated. Each hit carries barcode, product URL, name, brands, quantity, categories, countries, Nutri-Score, NOVA, Eco-Score, allergens, a per-100g nutrient summary, image URLs and the edit timestamp. Optional facet counts for brands, Nutri-Score grades and countries.
- Instructions: Find products by name, brand or category, e.g. 'oat milk' sold in France, then call `product` with a hit's barcode for the full record. Use `suggest` to turn a typed category or brand into the taxonomy id the filters expect.
- Cost: 5 credits per call
- Capability file: [Search](https://firecrawl.dev/alexandria/agents/providers/world-openfoodfacts-org/foods/search)

Accepted options:
- `brand` (string): Brand tag (`coca-cola`, `oatly`); lower-case slug, `en:` prefix accepted and stripped. Example: `coca-cola`
- `category` (string): Category taxonomy id (`en:oat-milks`) or bare slug (`oat-milks`); `suggest` returns these ids. Example: `en:oat-milks`
- `country` (string): Selling country as a taxonomy id (`en:france`) or bare slug (`france`, `united-states`). Matched against `countries_tags`. Example: `en:france`
- `facets` (boolean): When true, return facet counts for `brands_tags`, `nutrition_grades` and `countries_tags` (default false). Example: `false`
- `lang` (string): Language the text is matched in and names are returned in; default `en`. Pattern: ^[a-z]{2}$. Example: `<lang>`
- `nova_group` (number): nova_group Example: `4`
- `nutriscore_grade` (string): nutriscore_grade Example: `a`
- `page` (number): 1-based page; the service refuses to page past 10000 hits, so page * page_size must stay within 10000. Example: `10`
- `page_size` (number): Hits per page, default 24. Example: `10`
- `query` (string): Free text, e.g. `oat milk`. At least one of `query`, `country`, `category`, `brand`, `nutriscore_grade`, `nova_group` is required. Example: `oat milk`
- `sort` (string): `relevance` (default; score order), `popularity` (unique scans, descending) or `recent` (last edit, descending). Example: `relevance`

Response schema example:
```json
{
  "attribution": {
    "data_license": "ODbL 1.0",
    "images_license": "CC BY-SA 3.0",
    "source_url": "https://world.openfoodfacts.org/",
    "text": "Data from Open Food Facts (https://world.openfoodfacts.org), licensed under the Open Database License (ODbL) with contents under the Database Contents License (DbCL); product images are CC BY-SA 3.0."
  },
  "count": 10000,
  "count_is_exact": false,
  "facets": [],
  "filters": {
    "brand": null,
    "category": null,
    "country": "en:france",
    "nova_group": null,
    "nutriscore_grade": null
  },
  "hits": [
    {
      "allergens_tags": [
        "en:gluten"
      ],
      "barcode": "00972321",
      "brands": [
        "M&S"
      ],
      "brands_tags": [
        "m-s"
      ],
      "categories_tags": [
        "en:beverages-and-beverages-preparations",
        "en:plant-based-foods-and-beverages",
        "en:beverages",
        "en:plant-based-foods",
        "en:cereals-and-potatoes",
        "en:dairy-substitutes",
        "en:cereals-and-their-products",
        "en:milk-substitutes",
        "en:plant-based-beverages",
        "en:plant-based-milk-alternatives",
        "en:cereal-based-drinks",
        "en:oat-based-drinks",
        "en:plant-based-milk"
      ],
      "countries_tags": [
        "en:france",
        "en:united-kingdom"
      ],
      "ecoscore_grade": "b",
      "generic_name": null,
      "image_small_url": "https://images.openfoodfacts.org/images/products/00972321/front_en.76.200.jpg",
      "image_url": "https://images.openfoodfacts.org/images/products/00972321/front_en.76.400.jpg",
      "last_modified_t": 1727277643,
      "name": "M&S Semi Oat milk",
      "nova_group": 4,
      "nutriments_100g": {
        "carbohydrates": 57.1,
        "energy_kcal": 357,
        "energy_kj": null,
        "fat": 14.3,
        "fiber": 3.57,
        "proteins": 7.14,
        "salt": 0.892,
        "saturated_fat": 5.36,
        "sodium": 0.357,
        "sugars": 28.6
      },
      "nutriscore_grade": "e",
      "quantity": "1 l",
      "unique_scans_n": 9,
      "url": "https://world.openfoodfacts.org/product/00972321"
    },
    {
      "allergens_tags": [],
      "barcode": "0371195005331",
      "brands": [
        "Superfood Overnight Oat Milk"
      ],
      "brands_tags": [
        "superfood-overnight-oat-milk"
      ],
      "categories_tags": [],
      "countries_tags": [
        "en:france"
      ],
      "ecoscore_grade": "unknown",
      "generic_name": null,
      "image_small_url": "https://images.openfoodfacts.org/images/products/037/119/500/5331/front_en.3.200.jpg",
      "image_url": "https://images.openfoodfacts.org/images/products/037/119/500/5331/front_en.3.400.jpg",
      "last_modified_t": 1724246483,
      "name": "Superfood oat mix",
      "nova_group": null,
      "nutriments_100g": {
        "carbohydrates": 57.1,
        "energy_kcal": 371,
        "energy_kj": null,
        "fat": 12.9,
        "fiber": 8.57,
        "proteins": 17.1,
        "salt": 0.286,
        "saturated_fat": 1.43,
        "sodium": 0.114,
        "sugars": 10
      },
      "nutriscore_grade": "unknown",
      "quantity": null,
      "unique_scans_n": null,
      "url": "https://world.openfoodfacts.org/product/0371195005331"
    },
    {
      "allergens_tags": [],
      "barcode": "0316027871401",
      "brands": [],
      "brands_tags": [],
      "categories_tags": [],
      "countries_tags": [
        "en:france"
      ],
      "ecoscore_grade": "unknown",
      "generic_name": null,
      "image_small_url": null,
      "image_url": null,
      "last_modified_t": 1734002826,
      "name": "Oat milk",
      "nova_group": null,
      "nutriments_100g": {
        "carbohydrates": 8,
        "energy_kcal": 44,
        "energy_kj": null,
        "fat": 0.6,
        "fiber": 0.8,
        "proteins": 1.6,
        "salt": 0.125,
        "saturated_fat": 0.12,
        "sodium": 0.05,
        "sugars": 2.8
      },
      "nutriscore_grade": "unknown",
      "quantity": null,
      "unique_scans_n": null,
      "url": "https://world.openfoodfacts.org/product/0316027871401"
    },
    {
      "allergens_tags": [],
      "barcode": "8801155722661",
      "brands": [
        "Denmark"
      ],
      "brands_tags": [
        "denmark"
      ],
      "categories_tags": [],
      "countries_tags": [
        "en:france"
      ],
      "ecoscore_grade": "unknown",
      "generic_name": null,
      "image_small_url": null,
      "image_url": null,
      "last_modified_t": 1734247603,
      "name": "Green Denmark Oat",
      "nova_group": null,
      "nutriments_100g": {
        "carbohydrates": 5,
        "energy_kcal": 25,
        "energy_kj": null,
        "fat": 0.6,
        "fiber": null,
        "proteins": 0.1,
        "salt": null,
        "saturated_fat": 0.1,
        "sodium": null,
        "sugars": 3
      },
      "nutriscore_grade": "unknown",
      "quantity": null,
      "unique_scans_n": null,
      "url": "https://world.openfoodfacts.org/product/8801155722661"
    },
    {
      "allergens_tags": [
        "en:gluten",
        "en:organic-whole-oats"
      ],
      "barcode": "9312231222023",
      "brands": [
        "pure-harvest",
        " pureharvest"
      ],
      "brands_tags": [
        "pure-harvest",
        "pureharvest"
      ],
      "categories_tags": [
        "en:plant-based-foods-and-beverages",
        "en:beverages",
        "en:dairies",
        "en:plant-based-foods",
        "en:cereals-and-potatoes",
        "en:dairy-substitutes",
        "en:cereals-and-their-products",
        "en:milk-substitutes",
        "en:plant-based-beverages",
        "en:milks",
        "en:plant-based-milk-alternatives",
        "en:cereal-based-drinks",
        "en:unsweetened-beverages",
        "en:oat-based-drinks"
      ],
      "countries_tags": [
        "en:australia",
        "en:france",
        "en:mauritius",
        "en:sri-lanka"
      ],
      "ecoscore_grade": "c",
      "generic_name": null,
      "image_small_url": "https://images.openfoodfacts.org/images/products/931/223/122/2023/front.3.200.jpg",
      "image_url": "https://images.openfoodfacts.org/images/products/931/223/122/2023/front.3.400.jpg",
      "last_modified_t": 1732014415,
      "name": "Oat Milk it's Organic Unsweetened Original imp",
      "nova_group": 3,
      "nutriments_100g": {
        "carbohydrates": 7.7,
        "energy_kcal": null,
        "energy_kj": 237,
        "fat": 1.8,
        "fiber": null,
        "proteins": 2.1,
        "salt": 0.0379999999999999,
        "saturated_fat": 0.3,
        "sodium": 0.0152,
        "sugars": 3.7
      },
      "nutriscore_grade": "c",
      "quantity": "1 L",
      "unique_scans_n": 6,
      "url": "https://world.openfoodfacts.org/product/9312231222023"
    }
  ],
  "lang": "en",
  "observed_at_ms": 1791942135434,
  "page": 1,
  "page_count": 2000,
  "page_size": 5,
  "query": "oat milk",
  "sort": "relevance"
}
```

### Suggest

- Capability: `foods/suggest`
- Description: Autocomplete Open Food Facts taxonomy entries (categories, brands, labels, countries) from a typed prefix, returning the canonical ids (`en:oat-milks`, `en:france`) that `search` filters accept together with their display names.
- Instructions: Resolve a category, brand, label or country name the user typed into the taxonomy id before filtering with `search`.
- Cost: 5 credits per call
- Capability file: [Suggest](https://firecrawl.dev/alexandria/agents/providers/world-openfoodfacts-org/foods/suggest)

Accepted options:
- `lang` (string): Language of the names to match and return; default `en`. Pattern: ^[a-z]{2}$. Example: `<lang>`
- `prefix` (string, required): Typed text to complete, e.g. `oat`. Example: `<prefix>`
- `size` (number): Maximum number of options; default 10. Example: `10`
- `taxonomies` (string[]): Taxonomies to complete in; default `category` and `brand`. Example: `[]`

Response schema example:
```json
{
  "count": 8,
  "lang": "en",
  "observed_at_ms": 1791942140987,
  "options": [
    {
      "id": "en:oat",
      "taxonomy": "category",
      "text": "Oat"
    },
    {
      "id": "en:oat-blenders",
      "taxonomy": "brand",
      "text": "Oat Blenders"
    },
    {
      "id": "en:oat-brans",
      "taxonomy": "category",
      "text": "Oat bran"
    },
    {
      "id": "en:oat-flakes",
      "taxonomy": "category",
      "text": "Oat flakes"
    },
    {
      "id": "en:cooked-oat-flakes",
      "taxonomy": "category",
      "text": "Oat flakes cooked in water"
    },
    {
      "id": "en:oat-flours",
      "taxonomy": "category",
      "text": "Oat flours"
    },
    {
      "id": "en:oat-groats",
      "taxonomy": "category",
      "text": "Oat groats"
    },
    {
      "id": "en:oat-milk-yogurts",
      "taxonomy": "category",
      "text": "Oat milk yogurts"
    }
  ],
  "prefix": "oat",
  "taxonomies": [
    "category",
    "brand"
  ]
}
```
