Download OpenAPI specification:
As a developer, the Open Food Facts API allows you to get information and contribute to the products database. You can create great apps to help people make better food choices and also provide data to enhance the database.
IMPORTANT: Please read the API introduction before using this API.
WARNING v3 is under development and you should expect changes
The current version of API v3 is v3.2 See the change log for the API and product schema
Retrieve information for a product with a specific barcode.
The fields parameter allows to specify what fields to retrieve.
| barcode required | string Example: 3017620422003 The barcode of the product to be fetched |
| product_type | string Enum: "all" "beauty" "food" "petfood" "product" Examples: product_type=all product_type=food Used for READ queries for one product. Expected product type of the requested product. Defaults to the product type of the server the query is sent to (e.g. 'food' for Open Food Facts, 'beauty' for Open Beauty Facts, etc.). 'all' matches all product types. If the product exists on a different server that matches the requested product type, the API will return a 302 redirect to the correct server. Otherwise, the API will return a 404 error. It is possible that new product types will be added in the future. |
| cc | string Example: cc=us 2 letter code of the country of the user. Used for localizing some fields in returned values (e.g. knowledge panels). If not passed, the country may be inferred by the IP address of the request. |
| lc | string Example: lc=fr 2 letter code of the language of the user. Used for localizing some fields in returned values (e.g. knowledge panels). If not passed, the language may be inferred by the Accept-Language header of the request. |
| tags_lc | string 2 letter language code to request names of tags in a specific language. For READ requests: if passed, all taxonomized tags of the response will include a |
| fields | string Comma separated list of fields requested in the response. Special values:
Defaults to "all" for READ requests. The "all" value can also be combined with fields like "attribute_groups" and "knowledge_panels".' |
| knowledge_panels_included | string Example: knowledge_panels_included=health_card, environment_card When knowledge_panels are requested, you can specify which panels should be in the response. All the others will be excluded. |
| knowledge_panels_excluded | string Example: knowledge_panels_excluded=health_card, environment_card When knowledge_panels are requested, you can specify which panels to exclude from the response. All the others will be included. If a panel is both excluded and included (with the knowledge_panels_excluded parameter), it will be excluded. |
{- "status_id": "success_with_errors",
- "result": {
- "id": "product_updated",
- "name": "Product updated",
- "lc_name": "Produit mis à jour"
}, - "errors": [
- {
- "message": {
- "id": "sugars_higher_than_carbohydrates",
- "name": "Sugars higher than carbohydrates",
- "lc_name": "Sucres plus élevés que les glucides",
- "description": "Sugars (40g) are higher than carbohydrates (35g).",
- "lc_description": "Les sucres (40g) sont plus élévés que les glucdes."
}, - "field": {
- "id": "nutriment.sugars",
- "value": "40"
}, - "impact": {
- "id": "nutrients_not_updated",
- "name": "Nutrients not updated",
- "lc_name": "Nutriments non mis à jour",
- "description": "The nutrients were not updated.",
- "lc_description": "Les nutriments n'ont pas été mis à jour."
}
}
], - "abbreviated_product_name": "string",
- "code": "string",
- "codes_tags": [
- "code-13"
], - "generic_name": "string",
- "id": "string",
- "lc": "string",
- "lang": "string",
- "nova_group": 0,
- "nova_groups": "string",
- "obsolete": "string",
- "obsolete_since_date": "string",
- "product_name": "string",
- "product_name_en": "string",
- "product_quantity": "500",
- "product_quantity_unit": "g",
- "quantity": "3 x 150 g",
- "schema_version": 999,
- "additives_n": 0,
- "checked": "string",
- "complete": 0,
- "completeness": 0,
- "ecoscore_grade": "string",
- "ecoscore_score": 0,
- "food_groups": "string",
- "food_groups_tags": [
- "string"
], - "nutrient_levels": {
- "fat": "low",
- "salt": "low",
- "saturated-fat": "low",
- "sugars": "low"
}, - "packaging_text": "packaging_text_en",
- "packagings": [
- {
- "number_of_units": 6,
- "shape": {
- "id": "en:bottle",
- "lc_name": "bouteille"
}, - "material": {
- "id": "en:bottle",
- "lc_name": "bouteille"
}, - "recycling": {
- "id": "en:bottle",
- "lc_name": "bouteille"
}, - "quantity_per_unit": "25 cl",
- "quantity_per_unit_value": 25,
- "quantity_per_unit_unit": "cl",
- "weight_specified": 30,
- "weight_measured": 32,
- "weight_estimated": 26,
- "weight": 30,
- "weight_source_id": "specified"
}
], - "packagings_complete": 1,
- "pnns_groups_1": "string",
- "pnns_groups_1_tags": [
- "string"
], - "pnns_groups_2": "string",
- "pnns_groups_2_tags": [
- "string"
], - "popularity_key": 0,
- "popularity_tags": [
- "bottom-25-percent-scans-2020",
- "top-85-percent-scans-2021",
- "top-90-percent-scans-2022",
- "top-country-it-scans-2019",
- "top-100000-mg-scans-2024"
], - "scans_n": 0,
- "unique_scans_n": 0,
- "serving_quantity": "string",
- "serving_quantity_unit": "g",
- "serving_size": "string",
- "brands": "string",
- "brands_hierarchy": [
- "string"
], - "brands_lc": "string",
- "brands_tags": [
- "string"
], - "categories": "string",
- "categories_hierarchy": [
- "string"
], - "categories_lc": "string",
- "categories_tags": [
- "string"
], - "checkers_tags": [
- "string"
], - "cities": "string",
- "cities_tags": [
- { }
], - "correctors_tags": [
- "string"
], - "countries": "string",
- "countries_hierarchy": [
- "string"
], - "countries_lc": "string",
- "countries_tags": [
- "string"
], - "ecoscore_tags": [
- "string"
], - "emb_codes": "EMB 2013330",
- "emb_codes_orig": "string",
- "emb_codes_tags": [
- { }
], - "labels": "string",
- "labels_hierarchy": [
- "string"
], - "labels_lc": "string",
- "labels_tags": [
- "string"
], - "entry_dates_tags": [
- "2016-03-11",
- "2016-03",
- "2016"
], - "manufacturing_places": "string",
- "manufacturing_places_tags": [
- "string"
], - "nova_groups_tags": [
- "string"
], - "nutrient_levels_tags": [
- "string"
], - "images": {
- "uploaded": { },
- "selected": {
- "front": { },
- "ingredients": { },
- "nutrition": { },
- "packaging": { }
}
}, - "selected_images": { },
- "last_image_dates_tags": [
- "string"
], - "last_image_t": 0,
- "ecoscore_data": {
- "adjustments": {
- "origins_of_ingredients": {
- "aggregated_origins": [
- {
- "epi_score": "string",
- "origin": "string",
- "percent": 0,
- "transportation_score": null
}
], - "epi_score": 0,
- "epi_value": 0,
- "origins_from_categories": [
- "string"
], - "origins_from_origins_field": [
- "string"
], - "transportation_score": 0,
- "transportation_scores": {
- "property1": 0,
- "property2": 0
}, - "transportation_value": 0,
- "transportation_values": {
- "property1": 0,
- "property2": 0
}, - "value": 0,
- "values": {
- "property1": 0,
- "property2": 0
}, - "warning": "string"
}, - "packaging": {
- "non_recyclable_and_non_biodegradable_materials": 0,
- "packagings": [
- {
- "ecoscore_material_score": 0,
- "ecoscore_shape_ratio": 0,
- "material": "string",
- "shape": "string",
- "number_of_units": 1,
- "quantity_per_unit": "33 cL",
- "quantity_per_unit_unit": "cl",
- "quantity_per_unit_value": 33,
- "recycling": "en:recycle-in-sorting-bin",
- "weight_measured": 12.08
}
], - "score": 0,
- "value": 0,
- "warning": "string"
}, - "production_system": {
- "labels": "vegan",
- "value": 0,
- "warning": "string"
}, - "threatened_species": {
- "ingredient": "string",
- "value": 0
}
}, - "agribalyse": {
- "agribalyse_proxy_food_code": "string",
- "agribalyse_food_code": "string",
- "co2_agriculture": 0,
- "co2_consumption": 0,
- "co2_distribution": 0,
- "co2_packaging": 0,
- "co2_processing": 0,
- "co2_total": 0,
- "co2_transportation": 0,
- "code": "string",
- "dqr": "string",
- "ef_agriculture": 0,
- "ef_consumption": 0,
- "ef_distribution": 0,
- "ef_packaging": 0,
- "ef_processing": 0,
- "ef_total": 0,
- "ef_transportation": 0,
- "is_beverage": 0,
- "name_en": "string",
- "score": 0,
- "version": "string"
}, - "grade": "string",
- "grades": { },
- "missing": {
- "labels": 0,
- "origins": 0,
- "packagings": 0
}, - "missing_data_warning": 0,
- "previous_data": {
- "grade": "string",
- "score": 0,
- "agribalyse": {
- "agribalyse_proxy_food_code": "string",
- "agribalyse_food_code": "string",
- "co2_agriculture": 0,
- "co2_consumption": 0,
- "co2_distribution": 0,
- "co2_packaging": 0,
- "co2_processing": 0,
- "co2_total": 0,
- "co2_transportation": 0,
- "code": "string",
- "dqr": "string",
- "ef_agriculture": 0,
- "ef_consumption": 0,
- "ef_distribution": 0,
- "ef_packaging": 0,
- "ef_processing": 0,
- "ef_total": 0,
- "ef_transportation": 0,
- "is_beverage": 0,
- "name_en": "string",
- "score": 0,
- "version": "string"
}
}, - "score": 0,
- "scores": { },
- "status": "string"
}, - "ecoscore_extended_data_version": "string",
- "environment_impact_level": "string",
- "environment_impact_level_tags": [
- { }
], - "additives_tags": [
- "string"
], - "allergens": "string",
- "allergens_lc": "string",
- "allergens_hierarchy": [
- "string"
], - "allergens_tags": [
- "string"
], - "ingredients": [
- {
- "id": "string",
- "ingredients": [ ],
- "percent": 0,
- "percent_estimate": 0,
- "percent_max": "string",
- "percent_min": 0,
- "text": "string",
- "vegan": "string",
- "vegetarian": "string"
}
], - "ingredients_analysis": {
- "en:palm-oil": [
- "string"
], - "en:vegan-status-unknown": [
- "string"
], - "en:vegetarian-status-unknown": [
- "string"
]
}, - "ingredients_analysis_tags": [
- "string"
], - "ingredients_from_or_that_may_be_from_palm_oil_n": 0,
- "ingredients_from_palm_oil_n": 0,
- "ingredients_from_palm_oil_tags": [
- { }
], - "ingredients_hierarchy": [
- "string"
], - "ingredients_n": 0,
- "ingredients_n_tags": [
- "string"
], - "ingredients_original_tags": [
- "string"
], - "ingredients_percent_analysis": 0,
- "ingredients_sweeteners_n": 0,
- "ingredients_non_nutritive_sweeteners_n": 0,
- "ingredients_tags": [
- "string"
], - "ingredients_lc": "string",
- "ingredients_text": "Farine de blé* 67,4%, sucre de canne*, huile de tournesol oléique*, graines de chia* 5,2%, son de blé*, oranges déshydratées * 0,9%, farine de riz*, poudres à lever (acide citrique, carbonates de sodium), arôme naturel d'orange.\n",
- "ingredients_text_with_allergens": "Farine de <span class=\"allergen\">blé*</span> 67,4%, sucre de canne*, huile de tournesol oléique*, graines de chia* 5,2%, <span class=\"allergen\">son de blé*</span>, oranges déshydratées * 0,9%, farine de riz*, poudres à lever (acide citrique, carbonates de sodium), arôme naturel d'orange.\n",
- "ingredients_that_may_be_from_palm_oil_n": 0,
- "ingredients_that_may_be_from_palm_oil_tags": [
- { }
], - "ingredients_with_specified_percent_n": 0,
- "ingredients_with_specified_percent_sum": 0,
- "ingredients_with_unspecified_percent_n": 0,
- "ingredients_with_unspecified_percent_sum": 0,
- "known_ingredients_n": 0,
- "origins": "string",
- "origins_hierarchy": [
- { }
], - "origins_lc": "string",
- "origins_tags": [
- { }
], - "traces": "string",
- "traces_hierarchy": [
- { }
], - "traces_lc": "string",
- "traces_tags": [
- { }
], - "unknown_ingredients_n": 0,
- "no_nutrition_data": "on",
- "nutrition_data_per": "serving",
- "nutrition_data_prepared_per": "serving",
- "nutriments": {
- "alcohol": 0,
- "carbohydrates": 0,
- "carbohydrates-total": 0,
- "energy": 0,
- "energy_value": 0,
- "energy_unit": "kcal",
- "energy-kcal": 0,
- "energy-kj": 0,
- "fat": 0,
- "fruits-vegetables-legumes-estimate-from-ingredients": 0,
- "fruits-vegetables-nuts-estimate-from-ingredients": 0,
- "nova-group": 0,
- "nutrition-score-fr": null,
- "proteins": 0,
- "salt": 0,
- "saturated-fat": 0,
- "sodium": 0,
- "sugars": 0,
- "carbon-footprint-from-known-ingredients_product": 0,
- "carbon-footprint-from-known-ingredients_serving": 0,
- "erythritol": 12.5
}, - "nutriscore_data": {
- "saturated_fat_ratio": 0,
- "saturated_fat_ratio_points": 0,
- "saturated_fat_ratio_value": 0,
- "is_beverage": 0,
- "is_cheese": 0,
- "is_water": 0,
- "is_fat": 0,
- "energy": 1996,
- "energy_points": 5,
- "energy_value": 1996,
- "fiber": 3.8,
- "fiber_points": 4,
- "fiber_value": 3.8,
- "fruits_vegetables_nuts_colza_walnut_olive_oils": 0,
- "fruits_vegetables_nuts_colza_walnut_olive_oils_points": 0,
- "fruits_vegetables_nuts_colza_walnut_olive_oils_value": 0,
- "proteins": 6.6,
- "proteins_points": 4,
- "proteins_value": 6.6,
- "saturated_fat": 6.2,
- "saturated_fat_points": 6,
- "saturated_fat_value": 6.2,
- "sodium": 210,
- "sodium_points": 2,
- "sodium_value": 210,
- "sugars": 21.5,
- "sugars_points": 4,
- "sugars_value": 21.5,
- "negative_points": 17,
- "positive_points": 4,
- "grade": "a",
- "score": 13
}, - "nutrition_grade_fr": "string",
- "nutrition_grades": "string",
- "nutrition_grades_tags": [
- "string"
], - "nutrition_score_beverage": 0,
- "nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients": 0,
- "nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients_value": 0,
- "nutrition_score_warning_no_fiber": 0,
- "other_nutritional_substances_tags": [
- { }
], - "unknown_nutrients_tags": [
- { }
], - "vitamins_tags": [
- { }
], - "nutriscore": {
- "2021": {
- "category_available": 1,
- "grade": "a",
- "nutrients_available": 1,
- "nutriscore_applicable": 1,
- "nutriscore_computed": 1,
- "score": 13,
- "data": {
- "is_beverage": 0,
- "is_cheese": 0,
- "is_water": 0,
- "is_fat": 0,
- "energy": 1996,
- "energy_points": 5,
- "energy_value": 1996,
- "fiber": 3.8,
- "fiber_points": 4,
- "fiber_value": 3.8,
- "fruits_vegetables_nuts_colza_walnut_olive_oils": 0,
- "fruits_vegetables_nuts_colza_walnut_olive_oils_points": 0,
- "fruits_vegetables_nuts_colza_walnut_olive_oils_value": 0,
- "proteins": 6.6,
- "proteins_points": 4,
- "proteins_value": 6.6,
- "saturated_fat": 6.2,
- "saturated_fat_points": 6,
- "saturated_fat_value": 6.2,
- "sodium": 210,
- "sodium_points": 2,
- "sodium_value": 210,
- "sugars": 21.5,
- "sugars_points": 4,
- "sugars_value": 21.5,
- "negative_points": 17,
- "positive_points": 4,
- "grade": "a",
- "score": 13
}
}, - "2023": {
- "category_available": 1,
- "grade": "a",
- "nutrients_available": 1,
- "nutriscore_applicable": 1,
- "nutriscore_computed": 1,
- "score": 13,
- "data": {
- "is_beverage": 0,
- "is_cheese": 0,
- "is_water": 0,
- "is_fat_oil_nuts_seeds": 0,
- "is_red_meat_product": 0,
- "components": {
- "negative": [
- {
- "id": "energy",
- "points": 5,
- "points_max": 10,
- "unit": "kJ",
- "value": 21.5
}
], - "positive": [
- {
- "id": "energy",
- "points": 5,
- "points_max": 10,
- "unit": "kJ",
- "value": 21.5
}
]
}, - "count_proteins": 0,
- "count_proteins_reason": "negative_points_greater_than_or_equal_to_11",
- "negative_points": 19,
- "positive_points": 1,
- "negative_points_max": 55,
- "positive_points_max": 10,
- "positive_nutrients": [
- "fiber",
- "fruits_vegetables_legumes"
]
}
}
}, - "nutriscore_2021_tags": [
- "d"
], - "nutriscore_2023_tags": [
- "d"
], - "nutriscore_grade": "a",
- "nutriscore_score": 13,
- "nutriscore_score_opposite": -13,
- "nutriscore_tags": [
- "d"
], - "nutriscore_version": "string",
- "data_quality_bugs_tags": [
- "string"
], - "data_quality_errors_tags": [
- "string"
], - "data_quality_info_tags": [
- "string"
], - "data_quality_tags": [
- "string"
], - "data_quality_warnings_tags": [
- "string"
], - "data_sources": "string",
- "data_sources_tags": [
- "string"
], - "last_check_dates_tags": [
- "string"
], - "last_checked_t": 0,
- "last_checker": "string",
- "states": "string",
- "states_hierarchy": [
- "string"
], - "states_tags": [
- "string"
], - "misc_tags": [
- "string"
], - "additives_original_tags": [
- "string"
], - "additives_prev_original_tags": [
- "string"
], - "added_countries_tags": [
- { }
], - "allergens_from_ingredients": "string",
- "allergens_from_user": "string",
- "amino_acids_prev_tags": [
- { }
], - "amino_acids_tags": [
- { }
], - "carbon_footprint_percent_of_known_ingredients": 0,
- "categories_properties": {
- "agribalyse_food_code:en": "string",
- "agribalyse_proxy_food_code:en": "string",
- "ciqual_food_code:en": "string"
}, - "categories_properties_tags": [
- "string"
], - "category_properties": {
- "property1": "string",
- "property2": "string"
}, - "ciqual_food_name_tags": [
- "string"
], - "compared_to_category": "string",
- "conservation_conditions": "string",
- "customer_service": "string",
- "expiration_date": "string",
- "link": "string",
- "main_countries_tags": [
- { }
], - "minerals_prev_tags": [
- { }
], - "minerals_tags": [
- { }
], - "owner_fields": {
- "additionalProperties": 0
}, - "nova_groups_markers": {
- "property1": [
- [
- "string"
]
], - "property2": [
- [
- "string"
]
]
}, - "nucleotides_tags": [
- { }
], - "origin": "string",
- "purchase_places": "Paris",
- "purchase_places_tags": [
- "string"
], - "stores": "Walmart",
- "stores_tags": [
- "string"
], - "traces_from_ingredients": "string",
- "traces_from_user": "string",
- "created_t": 1457680652,
- "creator": "string",
- "editors_tags": [
- "string"
], - "informers_tags": [
- "string"
], - "interface_version_created": "string",
- "interface_version_modified": "string",
- "languages": { },
- "languages_codes": { },
- "languages_hierarchy": [
- "string"
], - "languages_tags": [
- "string"
], - "last_edit_dates_tags": [
- "string"
], - "last_editor": "string",
- "last_modified_by": "sebleouf",
- "last_modified_t": 0,
- "last_updated_t": 0,
- "owner": "string",
- "owners_tags": "string",
- "photographers_tags": [
- "string"
], - "rev": 0,
- "sources": [
- {
- "fields": [
- "string"
], - "id": "string",
- "images": [
- { }
], - "import_t": 0,
- "manufacturer": 0,
- "name": "string",
- "source_licence": "string",
- "source_licence_url": "string",
- "url": null
}
], - "sources_fields": {
- "org-gs1": {
- "gln": "string",
- "gpcCategoryCode": "string",
- "gpcCategoryName": "string",
- "isAllergenRelevantDataProvided": "string",
- "lastChangeDateTime": "string",
- "partyName": "string",
- "productionVariantDescription": "string",
- "publicationDateTime": "string"
}
}, - "teams": "string",
- "teams_tags": [
- "string"
], - "update_key": "string",
- "knowledge_panels": {
- "additionalProperties": "string"
}, - "attribute_groups": [
- {
- "id": "string",
- "status": "known",
- "title": "Does not contain: Molluscs",
- "match": 100,
- "grade": "unknown",
- "name": "string",
- "icon_url": "string",
- "description": "string",
- "description_short": "string"
}
]
}Open Food Facts uses multilingual taxonomies to normalize entries for categories, labels, ingredients, packaging shapes / materials / recycling instructions and many more fields.
This API returns taxonomy entries suggestions that can be used in product edit forms, search forms etc. (for instance in autocomplete dropdowns using libraries like Tagify or select2 on the Web).
Suggestions filtering:
The string parameter allows to get only suggestions that contain a specific string (useful for autocomplete suggestions).
Suggestions ordering:
If a string is passed, an additional sort is done to put first suggestions that start with the string, followed by suggestions with a word that start with the string, and then suggestions that contain the string anywhere.
| tagtype | string Example: tagtype=additives |
| cc | string Example: cc=us 2 letter code of the country of the user. Used for localizing some fields in returned values (e.g. knowledge panels). If not passed, the country may be inferred by the IP address of the request. |
| lc | string Example: lc=fr 2 letter code of the language of the user. Used for localizing some fields in returned values (e.g. knowledge panels). If not passed, the language may be inferred by the Accept-Language header of the request. |
| string | string Example: string=pe Optional string used to filter suggestions (useful for autocomplete). If passed, suggestions starting with the string will be returned first, followed by suggestions matching the string at the beginning of a word, and suggestions matching the string inside a word. |
| categories | string Example: categories=yougurts Comma separated list of categories tags (e.g. "en:fats,en:unsalted-butters" or categories names in the language indicated by the "lc" field (e.g. "graisses, beurres salés" in French) |
| shape | string Example: shape=bottle Shape of packaging component (tag identified in the packaging_shapes taxonomy, or plain text tag name in the language indicated by the "lc" field) |
| limit | string Maximum number of suggestions. Default is 25, max is 400. |
| get_synonyms | string Whether or not to include "matched_synonyms" in the response. Set to 1 to include. |
| term | string Alias for the "string" parameter provided for backward compatibility. "string" takes precedence. |
{- "status_id": "success_with_errors",
- "result": {
- "id": "product_updated",
- "name": "Product updated",
- "lc_name": "Produit mis à jour"
}, - "errors": [
- {
- "message": {
- "id": "sugars_higher_than_carbohydrates",
- "name": "Sugars higher than carbohydrates",
- "lc_name": "Sucres plus élevés que les glucides",
- "description": "Sugars (40g) are higher than carbohydrates (35g).",
- "lc_description": "Les sucres (40g) sont plus élévés que les glucdes."
}, - "field": {
- "id": "nutriment.sugars",
- "value": "40"
}, - "impact": {
- "id": "nutrients_not_updated",
- "name": "Nutrients not updated",
- "lc_name": "Nutriments non mis à jour",
- "description": "The nutrients were not updated.",
- "lc_description": "Les nutriments n'ont pas été mis à jour."
}
}
], - "suggestions": [
- "string"
], - "matched_synonyms": {
- "property1": "string",
- "property2": "string"
}
}Return knowledge panels for a tag.
Currently the knowledge panels returned are:
Categories:
| tagtype required | string Example: categories Type of the tag |
| tag_or_tagid required | string Tag name (e.g. yogurts) or tag id (e.g. en:yogurts) |
| cc | string Example: cc=us 2 letter code of the country of the user. Used for localizing some fields in returned values (e.g. knowledge panels). If not passed, the country may be inferred by the IP address of the request. |
| lc | string Example: lc=fr 2 letter code of the language of the user. Used for localizing some fields in returned values (e.g. knowledge panels). If not passed, the language may be inferred by the Accept-Language header of the request. |
{- "status_id": "success_with_errors",
- "result": {
- "id": "product_updated",
- "name": "Product updated",
- "lc_name": "Produit mis à jour"
}, - "errors": [
- {
- "message": {
- "id": "sugars_higher_than_carbohydrates",
- "name": "Sugars higher than carbohydrates",
- "lc_name": "Sucres plus élevés que les glucides",
- "description": "Sugars (40g) are higher than carbohydrates (35g).",
- "lc_description": "Les sucres (40g) sont plus élévés que les glucdes."
}, - "field": {
- "id": "nutriment.sugars",
- "value": "40"
}, - "impact": {
- "id": "nutrients_not_updated",
- "name": "Nutrients not updated",
- "lc_name": "Nutriments non mis à jour",
- "description": "The nutrients were not updated.",
- "lc_description": "Les nutriments n'ont pas été mis à jour."
}
}
], - "tagtype": "string",
- "tagid": "string",
- "tag": {
- "tagid": "string",
- "tagtype": "string",
- "knowledge_panels": {
- "additionalProperties": "string"
}
}
}This API allows to create or update a product (if the product already exists, its data is updated, otherwise it is created), or to analyze a test product (in which case no product is created or updated). To analyze a product, the "barcode" path component needs to contain the value "test" instead of a barcode.
New API to send structured product data in a JSON format instead of in a flattened list of key / value pairs field as-in the current product add / edit API that relies on a multipart/form-data format.
Important: this new Product WRITE API has been deployed in production, but it is still under development, and it may change.
This new API is used in particular to send structured packaging data: https://openfoodfacts.github.io/openfoodfacts-server/dev/explain-packaging-data/
The new API is gradually being extended to support other product fields.
Currently supported fields are:
| barcode required | string Example: 3017620422003 The barcode of the product to to create or update, or "test" to analyze the product data sent without creating or updating a product. |
Structured data for the product is passed in the product field.
For complex structures such as the packagings object, it is possible to replace pre-existing data, or completing it:
| lc | string 2 letter code of the language of the interface. Used for localizing some fields in returned values (e.g. knowledge panels). If not passed, the language may be inferred by the country of the user (passed through the cc field or inferred by the IP address). Full list at https://static.openfoodfacts.org/data/taxonomies/languages.json |
| cc | string 2 letter code of the country of the user. Used for localizing some fields in returned values (e.g. knowledge panels). If not passed, the country may be inferred by the IP address of the request. Full list at https://static.openfoodfacts.org/data/taxonomies/countries.json |
| fields | string Comma separated list of fields requested in the response. Special values: "updated": returns field that were updated by the query (e.g. sending "packagings" or "packagings_add" would return "packagings"), "none": returns no fields, "all": returns all fields except generated fields that need to be explicitly requested such as "knowledge_panels". Defaults to "updated" for WRITE requests, and "all" for READ requests. |
| tags_lc | string 2 letter language code to request names of tags in a specific language. For READ requets: if passed, all taxonomized tags of the response will include a lc_name property with the translation in the requested language, if available. Otherwise, the property value will contain the name in the original language, prefixed by the 2 language code and a colon. For WRITE requests: if passed, taxonomized tags fields with a lc_name property will be considered to be in this language. |
| user_id | string |
| password | string <password> Password for login |
object (product_update_api_v3) Model for creating or updating products using the v3 version of the product update API. |
{- "lc": "fr",
- "cc": "fr",
- "fields": "product_name,packagings",
- "tags_lc": "fr",
- "userid": "string",
- "password": "string",
- "code": "string",
- "product": {
- "packagings": [
- {
- "number_of_units": 6,
- "shape": {
- "id": "en:bottle"
}, - "material": {
- "id": "en:plastic"
}, - "recycling": {
- "id": "en:recycle"
}, - "quantity_per_unit": "25 cl",
- "weight_measured": 10
}
], - "packagings_add": [
- {
- "number_of_units": 6,
- "shape": {
- "id": "en:bottle"
}, - "material": {
- "id": "en:plastic"
}, - "recycling": {
- "id": "en:recycle"
}, - "quantity_per_unit": "25 cl",
- "weight_measured": 10
}
], - "product": {
- "$ref": "./schemas/product_update_api_v3.yaml"
}
}
}{- "status": "success_with_errors",
- "result": {
- "id": "en:product-updated",
- "en_name": "Product updated",
- "lc_name": "Produit mis à jour"
}, - "errors": [
- {
- "message": {
- "id": "en:sugars-higher-than-carbohydrates",
- "name": "Sugars higher than carbohydrates",
- "lc_name": "Sucres plus élevés que les glucides",
- "description": "Sugars (40g) are higher than carbohydrates (35g).",
- "lc_description": "Les sucres (40g) sont plus élévés que les glucdes."
}, - "field": {
- "id": "nutriment.sugars",
- "value": "40"
}, - "impact": {
- "id": "en:nutrients-not-updated",
- "name": "Nutrients not updated",
- "lc_name": "Nutriments non mis à jour",
- "description": "The nutrients were not updated.",
- "lc_description": "Les nutriments n'ont pas été mis à jour."
}
}
], - "product": {
- "packagings": [
- {
- "material": "en:pp-polypropylene",
- "number": "2",
- "recycling": "en:discard",
- "shape": "en:lid"
}, - {
- "material": "en:non-corrugated-cardboard",
- "number": "1",
- "recycling": "en:recycle",
- "shape": "en:box",
- "weight": 120
}, - {
- "material": "en:paper-and-fibreboard-aluminium",
- "number": "2",
- "recycling": "en:recycle",
- "shape": "en:seal"
}, - {
- "material": "en:clear-glass",
- "number": "2",
- "recycling": "en:recycle",
- "shape": "en:jar",
- "quantity": "200 ML",
- "quantity_value": 200,
- "quantity_unit": "ml",
- "weight": 80
}
]
}
}This endpoint allows to upload an image for a product. The image is uploaded in the request body as a base64 encoded string. Optionally, it is possible to select the uploaded image for specific information (e.g. front, ingredients, nutrition, packaging) for specific languages. Each selected image is a cropped version of the uploaded image.
If the product does not exist, it will be created.
| barcode required | string Example: 3017620422003 The barcode of the product corresponding to the image. |
Image data for the product is passed in the image_data_base64 field as a base64 encoded string.
| lc | string 2 letter code of the language of the interface. Used for localizing some fields in returned values (e.g. knowledge panels). If not passed, the language may be inferred by the country of the user (passed through the cc field or inferred by the IP address). Full list at https://static.openfoodfacts.org/data/taxonomies/languages.json |
| cc | string 2 letter code of the country of the user. Used for localizing some fields in returned values (e.g. knowledge panels). If not passed, the country may be inferred by the IP address of the request. Full list at https://static.openfoodfacts.org/data/taxonomies/countries.json |
| user_id | string Username for login Note: you must always use the username (and not the email) as it is far less brittle. |
| password | string <password> Password for login |
| image_data_base64 | string Base64 encoded image data (supported formats: JPEG, PNG, GIF, HEIC) |
object (ImagesSelected) Optional instructions to select (and possibly crop) the uploaded image for specific information (e.g. front, ingredients, nutrition, packaging) for specific languages. |
{- "lc": "fr",
- "cc": "fr",
- "user_id": "string",
- "password": "pa$$word",
- "image_data_base64": "string",
- "selected": {
- "front": { },
- "ingredients": { },
- "nutrition": { },
- "packaging": { }
}
}{- "status_id": "success_with_errors",
- "result": {
- "id": "product_updated",
- "name": "Product updated",
- "lc_name": "Produit mis à jour"
}, - "errors": [
- {
- "message": {
- "id": "sugars_higher_than_carbohydrates",
- "name": "Sugars higher than carbohydrates",
- "lc_name": "Sucres plus élevés que les glucides",
- "description": "Sugars (40g) are higher than carbohydrates (35g).",
- "lc_description": "Les sucres (40g) sont plus élévés que les glucdes."
}, - "field": {
- "id": "nutriment.sugars",
- "value": "40"
}, - "impact": {
- "id": "nutrients_not_updated",
- "name": "Nutrients not updated",
- "lc_name": "Nutriments non mis à jour",
- "description": "The nutrients were not updated.",
- "lc_description": "Les nutriments n'ont pas été mis à jour."
}
}
], - "product": {
- "images": {
- "uploaded": { }
}
}
}This endpoint allows to delete an uploaded image for a product. Selected images that are cropped from it will also be deleted.
Image deletion is allowed only for moderators and admins, so the request must be authenticated with a session cookie or userid and password.
| barcode required | string Example: 3017620422003 The barcode of the product corresponding to the image. |
| imgid required | integer Example: 2 The id of the image to be deleted. |
{- "status_id": "success_with_errors",
- "result": {
- "id": "product_updated",
- "name": "Product updated",
- "lc_name": "Produit mis à jour"
}, - "errors": [
- {
- "message": {
- "id": "sugars_higher_than_carbohydrates",
- "name": "Sugars higher than carbohydrates",
- "lc_name": "Sucres plus élevés que les glucides",
- "description": "Sugars (40g) are higher than carbohydrates (35g).",
- "lc_description": "Les sucres (40g) sont plus élévés que les glucdes."
}, - "field": {
- "id": "nutriment.sugars",
- "value": "40"
}, - "impact": {
- "id": "nutrients_not_updated",
- "name": "Nutrients not updated",
- "lc_name": "Nutriments non mis à jour",
- "description": "The nutrients were not updated.",
- "lc_description": "Les nutriments n'ont pas été mis à jour."
}
}
]
}For moderators only, revert a product to a previous revision.
The code and rev fields are mandatory.
| fields | string Comma separated list of fields requested in the response. Special values: "updated": returns field that were updated by the query (e.g. sending "packagings" or "packagings_add" would return "packagings"), "none": returns no fields, "all": returns all fields except generated fields that need to be explicitly requested such as "knowledge_panels". Defaults to "updated" for WRITE requests, and "all" for READ requests. |
| tags_lc | string 2 letter language code to request names of tags in a specific language. For READ requets: if passed, all taxonomized tags of the response will include a lc_name property with the translation in the requested language, if available. Otherwise, the property value will contain the name in the original language, prefixed by the 2 language code and a colon. For WRITE requests: if passed, taxonomized tags fields with a lc_name property will be considered to be in this language. |
| code | string Barcode of the product |
| rev | integer Revision number to revert to |
{- "fields": "product_name,packagings",
- "tags_lc": "fr",
- "code": "string",
- "rev": 0
}{- "status_id": "success_with_errors",
- "result": {
- "id": "product_updated",
- "name": "Product updated",
- "lc_name": "Produit mis à jour"
}, - "errors": [
- {
- "message": {
- "id": "sugars_higher_than_carbohydrates",
- "name": "Sugars higher than carbohydrates",
- "lc_name": "Sucres plus élevés que les glucides",
- "description": "Sugars (40g) are higher than carbohydrates (35g).",
- "lc_description": "Les sucres (40g) sont plus élévés que les glucdes."
}, - "field": {
- "id": "nutriment.sugars",
- "value": "40"
}, - "impact": {
- "id": "nutrients_not_updated",
- "name": "Nutrients not updated",
- "lc_name": "Nutriments non mis à jour",
- "description": "The nutrients were not updated.",
- "lc_description": "Les nutriments n'ont pas été mis à jour."
}
}
]
}object | |
object Field that triggered the warning or error. | |
object |
{- "message": {
- "id": "sugars_higher_than_carbohydrates",
- "name": "Sugars higher than carbohydrates",
- "lc_name": "Sucres plus élevés que les glucides",
- "description": "Sugars (40g) are higher than carbohydrates (35g).",
- "lc_description": "Les sucres (40g) sont plus élévés que les glucdes."
}, - "field": {
- "id": "nutriment.sugars",
- "value": "40"
}, - "impact": {
- "id": "nutrients_not_updated",
- "name": "Nutrients not updated",
- "lc_name": "Nutriments non mis à jour",
- "description": "The nutrients were not updated.",
- "lc_description": "Les nutriments n'ont pas été mis à jour."
}
}| status_id | string Enum: "success" "success_with_warnings" "success_with_errors" "failure" Overall status of the request: whether it failed or succeeded, with or without warnings or errors. |
object Overall result of the request (e.g. a product has been created) | |
Array of objects (Warning or error message) List of warnings. Warnings are used to alert about something that may be wrong, but is not necessarily wrong (e.g. a nutrient value that is unexpectedly high). | |
Array of objects (Warning or error message) List of errors. Errors are used to alert about something that is definitely wrong (e.g. a nutrient value that is impossibly high). |
{- "status_id": "success_with_errors",
- "result": {
- "id": "product_updated",
- "name": "Product updated",
- "lc_name": "Produit mis à jour"
}, - "errors": [
- {
- "message": {
- "id": "sugars_higher_than_carbohydrates",
- "name": "Sugars higher than carbohydrates",
- "lc_name": "Sucres plus élevés que les glucides",
- "description": "Sugars (40g) are higher than carbohydrates (35g).",
- "lc_description": "Les sucres (40g) sont plus élévés que les glucdes."
}, - "field": {
- "id": "nutriment.sugars",
- "value": "40"
}, - "impact": {
- "id": "nutrients_not_updated",
- "name": "Nutrients not updated",
- "lc_name": "Nutriments non mis à jour",
- "description": "The nutrients were not updated.",
- "lc_description": "Les nutriments n'ont pas été mis à jour."
}
}
]
}| abbreviated_product_name | string Abbreviated name in requested language |
| code | string barcode of the product (can be EAN-13 or internal codes for some food stores), for products without a barcode, Open Food Facts assigns a number starting with the 200 reserved prefix |
| codes_tags | Array of strings |
| generic_name | string Legal name of the product as regulated by the European authorities. |
| id | string internal identifier for the product, usually set to the value of |
| lc | string Main language of the product.
This is a duplicate of |
| lang | string Main language of the product. This should be the main language of product packaging (if one is predominant). Main language is also used to decide which ingredients list to parse. |
| nova_group | integer Nova group as an integer from 1 to 4. See https://world.openfoodfacts.org/nova |
| nova_groups | string |
| obsolete | string |
| obsolete_since_date | string A date at which the product was declared obsolete. This means it's not produced any more. |
| product_name | string The name of the product |
| product_name_en | string The name of the product can also be in many other languages like product_name_fr (for French). |
| product_quantity | string The size in g or ml for the whole product.
It is a normalized version of the |
| product_quantity_unit | string The unit (either g or ml) for the corresponding |
| quantity | string The quantity of the product, with the corresponding number of portions or unit (g, ml, kg, l, cl, oz, lbs...). It should be the value as displayed on the product. The ℮ sign is allowed. When it refers to the number of portions, it can be filled without any units (e.g. "6 eggs"). |
| schema_version | integer Version of the product object schema used in the response. This indicates the structure of the 'product' field itself. For more details, please read: https://openfoodfacts.github.io/openfoodfacts-server/api/ref-api-and-product-schema-change-log |
| abbreviated_product_name_(?<language_code>\w\w) pattern property | string Abbreviated name in language |
| generic_name_(?<language_code>\w\w) pattern property | string This can be returned in many other languages like generic_name_fr (for French). |
{- "abbreviated_product_name": "string",
- "code": "string",
- "codes_tags": [
- "code-13"
], - "generic_name": "string",
- "id": "string",
- "lc": "string",
- "lang": "string",
- "nova_group": 0,
- "nova_groups": "string",
- "obsolete": "string",
- "obsolete_since_date": "string",
- "product_name": "string",
- "product_name_en": "string",
- "product_quantity": "500",
- "product_quantity_unit": "g",
- "quantity": "3 x 150 g",
- "schema_version": 999
}| id | string Canonical id of the entry in the taxonomy. If the value cannot be mapped to a taxonomy entry, the value will be the name of the entry in its original language prefixed by the language 2 letter code and a colon. |
| lc_name | string Name of the entry in the language requested in the tags_lc field of the request. This field is returned only of tags_lc is specified. If the translation is not available, or if the entry does not exist in the taxonomy, the value will be the name of the entry in its original language prefixed by the language 2 letter code and a colon. |
{- "id": "en:bottle",
- "lc_name": "bouteille"
}| id | string Canonical id of the entry in the taxonomy. If the value cannot be mapped to a taxonomy entry, the value will be the name of the entry in its original language prefixed by the language 2 letter code and a colon. |
| lc_name | string Name of the entry in the language requested in the tags_lc field of the request. This field is returned only of tags_lc is specified. If the translation is not available, or if the entry does not exist in the taxonomy, the value will be the name of the entry in its original language prefixed by the language 2 letter code and a colon. |
{- "id": "en:bottle",
- "lc_name": "bouteille"
}| id | string Canonical id of the entry in the taxonomy. If the value cannot be mapped to a taxonomy entry, the value will be the name of the entry in its original language prefixed by the language 2 letter code and a colon. |
| lc_name | string Name of the entry in the language requested in the tags_lc field of the request. This field is returned only of tags_lc is specified. If the translation is not available, or if the entry does not exist in the taxonomy, the value will be the name of the entry in its original language prefixed by the language 2 letter code and a colon. |
{- "id": "en:bottle",
- "lc_name": "bouteille"
}| number_of_units | integer umber of units of this packaging component contained in the product (e.g. 6 for a pack of 6 bottles) |
object (shape) The shape property is canonicalized using the packaging_shapes taxonomy. | |
object (material) The material property is canonicalized using the packaging_materials taxonomy. | |
object (recycling) The recycling property is canonicalized using the packaging_recycling taxonomy. | |
| quantity_per_unit | string Quantity (weight or volume) of food product contained in the packaging component. (e.g. 75cl for a wine bottle) |
| quantity_per_unit_value | number Value parsed from the quantity field. |
| quantity_per_unit_unit | string Unit parsed and normalized from the quantity field. |
| weight_specified | number Weight (as specified by the manufacturer) of one unit of the empty packaging component (in grams). (e.g. for a 6 pack of 1.5l water bottles, it might be 30, the weight in grams of 1 empty water bottle without its cap which is a different packaging component). |
| weight_measured | number Weight (as measured by one or more users) of one unit of the empty packaging component (in grams). (e.g. for a 6 pack of 1.5l water bottles, it might be 30, the weight in grams of 1 empty water bottle without its cap which is a different packaging component). |
| weight_estimated | number Weight (as estimated from similar products) of one unit of the empty packaging component (in grams). (e.g. for a 6 pack of 1.5l water bottles, it might be 30, the weight in grams of 1 empty water bottle without its cap which is a different packaging component). |
| weight | number Weight of one unit of the empty packaging component. |
| weight_source_id | string Indicates which field was used to populate the "weight" field. Either "specified", "measured", or "estimated" |
{- "number_of_units": 6,
- "shape": {
- "id": "en:bottle",
- "lc_name": "bouteille"
}, - "material": {
- "id": "en:bottle",
- "lc_name": "bouteille"
}, - "recycling": {
- "id": "en:bottle",
- "lc_name": "bouteille"
}, - "quantity_per_unit": "25 cl",
- "quantity_per_unit_value": 25,
- "quantity_per_unit_unit": "cl",
- "weight_specified": 30,
- "weight_measured": 32,
- "weight_estimated": 26,
- "weight": 30,
- "weight_source_id": "specified"
}| number_of_units | integer umber of units of this packaging component contained in the product (e.g. 6 for a pack of 6 bottles) |
object (shape) The shape property is canonicalized using the packaging_shapes taxonomy. | |
object (material) The material property is canonicalized using the packaging_materials taxonomy. | |
object (recycling) The recycling property is canonicalized using the packaging_recycling taxonomy. | |
| quantity_per_unit | string Quantity (weight or volume) of food product contained in the packaging component. (e.g. 75cl for a wine bottle) |
| quantity_per_unit_value | number Value parsed from the quantity field. |
| quantity_per_unit_unit | string Unit parsed and normalized from the quantity field. |
| weight_specified | number Weight (as specified by the manufacturer) of one unit of the empty packaging component (in grams). (e.g. for a 6 pack of 1.5l water bottles, it might be 30, the weight in grams of 1 empty water bottle without its cap which is a different packaging component). |
| weight_measured | number Weight (as measured by one or more users) of one unit of the empty packaging component (in grams). (e.g. for a 6 pack of 1.5l water bottles, it might be 30, the weight in grams of 1 empty water bottle without its cap which is a different packaging component). |
| weight_estimated | number Weight (as estimated from similar products) of one unit of the empty packaging component (in grams). (e.g. for a 6 pack of 1.5l water bottles, it might be 30, the weight in grams of 1 empty water bottle without its cap which is a different packaging component). |
| weight | number Weight of one unit of the empty packaging component. |
| weight_source_id | string Indicates which field was used to populate the "weight" field. Either "specified", "measured", or "estimated" |
[- {
- "number_of_units": 6,
- "shape": {
- "id": "en:bottle",
- "lc_name": "bouteille"
}, - "material": {
- "id": "en:bottle",
- "lc_name": "bouteille"
}, - "recycling": {
- "id": "en:bottle",
- "lc_name": "bouteille"
}, - "quantity_per_unit": "25 cl",
- "quantity_per_unit_value": 25,
- "quantity_per_unit_unit": "cl",
- "weight_specified": 30,
- "weight_measured": 32,
- "weight_estimated": 26,
- "weight": 30,
- "weight_source_id": "specified"
}
]Indicate if the packagings array contains all the packaging parts of the product. This field can be set by users when they enter or verify packaging data. Possible values are 0 or 1.
1| additives_n | integer Number of food additives. |
| checked | string |
| complete | integer |
| completeness | number |
| ecoscore_grade | string See also: |
| ecoscore_score | integer See also: |
| food_groups | string |
| food_groups_tags | Array of strings |
object Traffic light indicators on main nutrients levels | |
| packaging_text | string Recycling instructions as raw text, e.g. Plastic bottle to recycle, Plastic cap to recycle. This will get automatically parsed and will be used to compute the Eco-Score. You can either request it (if it exists) or send it in a specific language. |
Array of objects (packagings) The packagings object is an array of individual packaging component objects. The Packaging data document explains how packaging data is structured in Open Food Facts: https://openfoodfacts.github.io/openfoodfacts-server/dev/explain-packaging-data/ The shape, material and recycling properties of each packaging component are linked to entries in the packaging_shapes, packaging_materials and packaging_recycling taxonomies: https://world.openfoodfacts.org/data/taxonomies/packaging_shapes.json https://world.openfoodfacts.org/data/taxonomies/packaging_materials.json https://world.openfoodfacts.org/data/taxonomies/packaging_recycling.json If the tags_lc field is set, the properties will include a lc_name field with the translation in the requested language. | |
| packagings_complete | integer (packagings_complete) [ 0 .. 1 ] Indicate if the packagings array contains all the packaging parts of the product. This field can be set by users when they enter or verify packaging data. Possible values are 0 or 1. |
| pnns_groups_1 | string Category of food according to French Nutrition and Health Program |
| pnns_groups_1_tags | Array of strings |
| pnns_groups_2 | string Sub Category of food according to French Nutrition and Health Program |
| pnns_groups_2_tags | Array of strings |
| popularity_key | integer An imprecise measurement of popularity based on Scan statistics. A higher value means higher popularity. |
| popularity_tags | Array of strings Indicators for the popularity of a product, like the amount of scans in a specific year.
|
| scans_n | integer Number of scans performed with the official Open Food Facts mobile application, the last year
for which the product was scanned (current year excluded). This value is computed once a year by scanbot.pl.
It is possible that a product has never been scanned at all: |
| unique_scans_n | integer Number of unique scans performed with the official Open Food Facts mobile application, the last year
for which the product was scanned (current year excluded).
Unique scans means it is based on different IPs.
This value is computed once a year by scanbot.pl.
See also |
| serving_quantity | string Normalized version of serving_size.
Note that this is NOT the number of servings by product.
(in perl, see |
| serving_quantity_unit | string The unit (either g or ml) for the correponding serving_quantity. |
| serving_size | string Serving size text (generally in g or ml). We expect a quantity + unit but the user is free to input any string. |
| food_groups_(?<language_code>\w\w) pattern property | string see |
| packaging_text_(?<language_code>\w\w) pattern property | string Packaging text in language designated by |
{- "additives_n": 0,
- "checked": "string",
- "complete": 0,
- "completeness": 0,
- "ecoscore_grade": "string",
- "ecoscore_score": 0,
- "food_groups": "string",
- "food_groups_tags": [
- "string"
], - "nutrient_levels": {
- "fat": "low",
- "salt": "low",
- "saturated-fat": "low",
- "sugars": "low"
}, - "packaging_text": "packaging_text_en",
- "packagings": [
- {
- "number_of_units": 6,
- "shape": {
- "id": "en:bottle",
- "lc_name": "bouteille"
}, - "material": {
- "id": "en:bottle",
- "lc_name": "bouteille"
}, - "recycling": {
- "id": "en:bottle",
- "lc_name": "bouteille"
}, - "quantity_per_unit": "25 cl",
- "quantity_per_unit_value": 25,
- "quantity_per_unit_unit": "cl",
- "weight_specified": 30,
- "weight_measured": 32,
- "weight_estimated": 26,
- "weight": 30,
- "weight_source_id": "specified"
}
], - "packagings_complete": 1,
- "pnns_groups_1": "string",
- "pnns_groups_1_tags": [
- "string"
], - "pnns_groups_2": "string",
- "pnns_groups_2_tags": [
- "string"
], - "popularity_key": 0,
- "popularity_tags": [
- "bottom-25-percent-scans-2020",
- "top-85-percent-scans-2021",
- "top-90-percent-scans-2022",
- "top-country-it-scans-2019",
- "top-100000-mg-scans-2024"
], - "scans_n": 0,
- "unique_scans_n": 0,
- "serving_quantity": "string",
- "serving_quantity_unit": "g",
- "serving_size": "string"
}A tag entry, that has been matched against a taxonomy (e.g. a category, a label)
The entry is a string that can contain either:
"string"This field is used for search only. It is a lossy representation of the taxonomy tag entry, that can be used to index the entry in a search engine. A tag entry, that has been matched against a taxonomy (e.g. a category, a label)
The entry is a string that can contain either:
"string"| h | integer The height of the reduced/full image in pixels. |
| w | integer The width of the reduced/full image in pixels. |
| url | string The URL of the image. This property is generated at runtime if the generate_images_urls parameter is set to true. |
{- "h": 400,
- "w": 255,
}object (ImageSize) Contains the information (width, height and URL) about an image in a specific size.
The URL is generated at runtime if the | |
object (ImageSize) Contains the information (width, height and URL) about an image in a specific size.
The URL is generated at runtime if the | |
object (ImageSize) Contains the information (width, height and URL) about an image in a specific size.
The URL is generated at runtime if the | |
object (ImageSize) Contains the information (width, height and URL) about an image in a specific size.
The URL is generated at runtime if the |
{- "100": {
- "h": 400,
- "w": 255,
}, - "200": {
- "h": 400,
- "w": 255,
}, - "400": {
- "h": 400,
- "w": 255,
}, - "full": {
- "h": 400,
- "w": 255,
}
}| uploader | string userid of the user who uploaded the image. |
object (ImageSizes) Contains the information about the images of a product in different sizes.
The reduced images are the ones with numbers as the key(100, 200 and 400)
while the full images have |
{- "uploader": "stephane",
- "sizes": {
- "100": {
- "h": 400,
- "w": 255,
}, - "200": {
- "h": 400,
- "w": 255,
}, - "400": {
- "h": 400,
- "w": 255,
}, - "full": {
- "h": 400,
- "w": 255,
}
}
}| imgid | integer The imgid of the original/source image edited (rotated, cropped, normalized etc) to produce the selected image. When uploading a new image and selecting it, the imgid will be automatically assigned by the server, and this field should not be passed. When selecting a previously uploaded image, the imgid must be passed to identify the source image. |
| rev | integer The revision number of the product when the image was selected. |
object Properties to specify if the image is cropped, rotated, normalized or with the white background removed. | |
object (ImageSizes) Contains the information about the images of a product in different sizes.
The reduced images are the ones with numbers as the key(100, 200 and 400)
while the full images have |
{- "imgid": 12,
- "rev": 65,
- "generation": {
- "angle": 0,
- "coordinates_image_size": "full",
- "normalize": true,
- "white_magic": true,
- "x1": 0,
- "x2": "string",
- "y1": "string",
- "y2": "string"
}, - "sizes": {
- "100": {
- "h": 400,
- "w": 255,
}, - "200": {
- "h": 400,
- "w": 255,
}, - "400": {
- "h": 400,
- "w": 255,
}, - "full": {
- "h": 400,
- "w": 255,
}
}
}object Front images of the full product in languages shown on the packaging. In most cases we have a front image selected for only one language, unless the product has different packagings for different countries with the same barcode, or if the product has two front sides (e.g. in bilingual countries). | |
object Cropped images of the ingredients list in languages shown on the packaging. | |
object Cropped images of the nutrition facts table / list in languages shown on the packaging. | |
object Cropped images of the packaging / recycling information in languages shown on the packaging. |
{- "front": { },
- "ingredients": { },
- "nutrition": { },
- "packaging": { }
}object (images) Uploaded and selected images of the product. | |
object (Selected images URLs) URLs of selected images, generated at runtime. | |
| last_image_dates_tags | Array of strings An array of tags entries to indicated the year, month and day of the last image upload (in formats YYYY, YYYY-MM, YYYY-MM-DD). |
| last_image_t | integer timestamp of last image upload |
{- "images": {
- "uploaded": { },
- "selected": {
- "front": { },
- "ingredients": { },
- "nutrition": { },
- "packaging": { }
}
}, - "selected_images": { },
- "last_image_dates_tags": [
- "string"
], - "last_image_t": 0
}"ad"| property name* additional property | number Default: 0 |
{- "property1": 0,
- "property2": 0
}| agribalyse_proxy_food_code | string |
| agribalyse_food_code | string |
| co2_agriculture | number |
| co2_consumption | integer |
| co2_distribution | number |
| co2_packaging | number |
| co2_processing | number |
| co2_total | number |
| co2_transportation | number |
| code | string |
| dqr | string |
| ef_agriculture | number |
| ef_consumption | integer |
| ef_distribution | number |
| ef_packaging | number |
| ef_processing | number |
| ef_total | number |
| ef_transportation | number |
| is_beverage | integer |
| name_en | string This can be returned in many other languages like name_fr (for french). |
| score | integer |
| version | string |
{- "agribalyse_proxy_food_code": "string",
- "agribalyse_food_code": "string",
- "co2_agriculture": 0,
- "co2_consumption": 0,
- "co2_distribution": 0,
- "co2_packaging": 0,
- "co2_processing": 0,
- "co2_total": 0,
- "co2_transportation": 0,
- "code": "string",
- "dqr": "string",
- "ef_agriculture": 0,
- "ef_consumption": 0,
- "ef_distribution": 0,
- "ef_packaging": 0,
- "ef_processing": 0,
- "ef_total": 0,
- "ef_transportation": 0,
- "is_beverage": 0,
- "name_en": "string",
- "score": 0,
- "version": "string"
}object (product_ecoscore_data) An object about a lot of details about data needed for Eco-Score computation and complementary data of interest. | |
| ecoscore_extended_data_version | string |
| environment_impact_level | string |
| environment_impact_level_tags | Array of objects |
{- "ecoscore_data": {
- "adjustments": {
- "origins_of_ingredients": {
- "aggregated_origins": [
- {
- "epi_score": "string",
- "origin": "string",
- "percent": 0,
- "transportation_score": null
}
], - "epi_score": 0,
- "epi_value": 0,
- "origins_from_categories": [
- "string"
], - "origins_from_origins_field": [
- "string"
], - "transportation_score": 0,
- "transportation_scores": {
- "property1": 0,
- "property2": 0
}, - "transportation_value": 0,
- "transportation_values": {
- "property1": 0,
- "property2": 0
}, - "value": 0,
- "values": {
- "property1": 0,
- "property2": 0
}, - "warning": "string"
}, - "packaging": {
- "non_recyclable_and_non_biodegradable_materials": 0,
- "packagings": [
- {
- "ecoscore_material_score": 0,
- "ecoscore_shape_ratio": 0,
- "material": "string",
- "shape": "string",
- "number_of_units": 1,
- "quantity_per_unit": "33 cL",
- "quantity_per_unit_unit": "cl",
- "quantity_per_unit_value": 33,
- "recycling": "en:recycle-in-sorting-bin",
- "weight_measured": 12.08
}
], - "score": 0,
- "value": 0,
- "warning": "string"
}, - "production_system": {
- "labels": "vegan",
- "value": 0,
- "warning": "string"
}, - "threatened_species": {
- "ingredient": "string",
- "value": 0
}
}, - "agribalyse": {
- "agribalyse_proxy_food_code": "string",
- "agribalyse_food_code": "string",
- "co2_agriculture": 0,
- "co2_consumption": 0,
- "co2_distribution": 0,
- "co2_packaging": 0,
- "co2_processing": 0,
- "co2_total": 0,
- "co2_transportation": 0,
- "code": "string",
- "dqr": "string",
- "ef_agriculture": 0,
- "ef_consumption": 0,
- "ef_distribution": 0,
- "ef_packaging": 0,
- "ef_processing": 0,
- "ef_total": 0,
- "ef_transportation": 0,
- "is_beverage": 0,
- "name_en": "string",
- "score": 0,
- "version": "string"
}, - "grade": "string",
- "grades": { },
- "missing": {
- "labels": 0,
- "origins": 0,
- "packagings": 0
}, - "missing_data_warning": 0,
- "previous_data": {
- "grade": "string",
- "score": 0,
- "agribalyse": {
- "agribalyse_proxy_food_code": "string",
- "agribalyse_food_code": "string",
- "co2_agriculture": 0,
- "co2_consumption": 0,
- "co2_distribution": 0,
- "co2_packaging": 0,
- "co2_processing": 0,
- "co2_total": 0,
- "co2_transportation": 0,
- "code": "string",
- "dqr": "string",
- "ef_agriculture": 0,
- "ef_consumption": 0,
- "ef_distribution": 0,
- "ef_packaging": 0,
- "ef_processing": 0,
- "ef_total": 0,
- "ef_transportation": 0,
- "is_beverage": 0,
- "name_en": "string",
- "score": 0,
- "version": "string"
}
}, - "score": 0,
- "scores": { },
- "status": "string"
}, - "ecoscore_extended_data_version": "string",
- "environment_impact_level": "string",
- "environment_impact_level_tags": [
- { }
]
}| id | string |
| ingredients | array (Ingredients) Recursive This structure gives the different ingredients and some information about them, like estimate on their quantity. |
| percent | integer The percentage of the ingredient. |
| percent_estimate | number Estimated percentage of the ingredient. |
| percent_max | string or number Maximum percentage of the ingredient. |
| percent_min | integer Minimum percentage of the ingredient. |
| text | string Text description of the ingredient. |
| vegan | string Indicates if the ingredient is vegan. |
| vegetarian | string Indicates if the ingredient is vegetarian. |
[- {
- "id": "string",
- "ingredients": [ ],
- "percent": 0,
- "percent_estimate": 0,
- "percent_max": "string",
- "percent_min": 0,
- "text": "string",
- "vegan": "string",
- "vegetarian": "string"
}
]| id | string |
| ingredients | Array of objects (Ingredients) This structure gives the different ingredients and some information about them, like estimate on their quantity. |
| percent | integer The percentage of the ingredient. |
| percent_estimate | number Estimated percentage of the ingredient. |
| percent_max | string or number Maximum percentage of the ingredient. |
| percent_min | integer Minimum percentage of the ingredient. |
| text | string Text description of the ingredient. |
| vegan | string Indicates if the ingredient is vegan. |
| vegetarian | string Indicates if the ingredient is vegetarian. |
{- "id": "string",
- "ingredients": [
- { }
], - "percent": 0,
- "percent_estimate": 0,
- "percent_max": "string",
- "percent_min": 0,
- "text": "string",
- "vegan": "string",
- "vegetarian": "string"
}| additives_tags | Array of strings |
| allergens | string comma separated list of allergens |
| allergens_lc | string language in which |
| allergens_hierarchy | Array of strings |
| allergens_tags | Array of strings |
Array of objects (Ingredients) This structure gives the different ingredients and some information about them, like estimate on their quantity. | |
object | |
| ingredients_analysis_tags | Array of strings |
| ingredients_from_or_that_may_be_from_palm_oil_n | integer |
| ingredients_from_palm_oil_n | integer |
| ingredients_from_palm_oil_tags | Array of objects |
| ingredients_hierarchy | Array of strings |
| ingredients_n | integer |
| ingredients_n_tags | Array of strings |
| ingredients_original_tags | Array of strings |
| ingredients_percent_analysis | integer Indicates the result of ingredients analysis processing
|
| ingredients_sweeteners_n | integer Number of sweeteners additives in the ingredients. Undefined if ingredients are not specified. |
| ingredients_non_nutritive_sweeteners_n | integer Number of non-nutritive sweeteners additives (as specified in the Nutri-Score formula) in the ingredients. Undefined if ingredients are not specified. |
| ingredients_tags | Array of strings |
| ingredients_lc | string Language that was used to parse the ingredient list. If |
| ingredients_text | string Raw list of ingredients. This will get automatically parsed and get used to compute the Eco-Score or find allergens, etc.. It's a copy of ingredients_text in the main language of the product (see |
| ingredients_text_with_allergens | string Same text as |
| ingredients_that_may_be_from_palm_oil_n | integer |
| ingredients_that_may_be_from_palm_oil_tags | Array of objects |
| ingredients_with_specified_percent_n | integer |
| ingredients_with_specified_percent_sum | integer |
| ingredients_with_unspecified_percent_n | integer |
| ingredients_with_unspecified_percent_sum | integer |
| known_ingredients_n | integer |
| origins | string Origins of ingredients |
| origins_hierarchy | Array of objects |
| origins_lc | string |
| origins_tags | Array of objects |
| traces | string List of substances that might cause allergies that are present in trace amounts in the product (this does not include the ingredients, as they are not only present in trace amounts). It is taxonomized with the allergens taxonomy. Refer to the allergens taxonomy |
Array of objects or strings | |
| traces_lc | string |
Array of objects or strings | |
| unknown_ingredients_n | integer |
| ingredients_text_(?<language_code>\w\w) pattern property | string Raw list of ingredients in language given by 'language_code'. See |
| ingredients_text_with_allergens_(?<language_code>\w\w) pattern property | string Like |
{- "additives_tags": [
- "string"
], - "allergens": "string",
- "allergens_lc": "string",
- "allergens_hierarchy": [
- "string"
], - "allergens_tags": [
- "string"
], - "ingredients": [
- {
- "id": "string",
- "ingredients": [ ],
- "percent": 0,
- "percent_estimate": 0,
- "percent_max": "string",
- "percent_min": 0,
- "text": "string",
- "vegan": "string",
- "vegetarian": "string"
}
], - "ingredients_analysis": {
- "en:palm-oil": [
- "string"
], - "en:vegan-status-unknown": [
- "string"
], - "en:vegetarian-status-unknown": [
- "string"
]
}, - "ingredients_analysis_tags": [
- "string"
], - "ingredients_from_or_that_may_be_from_palm_oil_n": 0,
- "ingredients_from_palm_oil_n": 0,
- "ingredients_from_palm_oil_tags": [
- { }
], - "ingredients_hierarchy": [
- "string"
], - "ingredients_n": 0,
- "ingredients_n_tags": [
- "string"
], - "ingredients_original_tags": [
- "string"
], - "ingredients_percent_analysis": 0,
- "ingredients_sweeteners_n": 0,
- "ingredients_non_nutritive_sweeteners_n": 0,
- "ingredients_tags": [
- "string"
], - "ingredients_lc": "string",
- "ingredients_text": "Farine de blé* 67,4%, sucre de canne*, huile de tournesol oléique*, graines de chia* 5,2%, son de blé*, oranges déshydratées * 0,9%, farine de riz*, poudres à lever (acide citrique, carbonates de sodium), arôme naturel d'orange.\n",
- "ingredients_text_with_allergens": "Farine de <span class=\"allergen\">blé*</span> 67,4%, sucre de canne*, huile de tournesol oléique*, graines de chia* 5,2%, <span class=\"allergen\">son de blé*</span>, oranges déshydratées * 0,9%, farine de riz*, poudres à lever (acide citrique, carbonates de sodium), arôme naturel d'orange.\n",
- "ingredients_that_may_be_from_palm_oil_n": 0,
- "ingredients_that_may_be_from_palm_oil_tags": [
- { }
], - "ingredients_with_specified_percent_n": 0,
- "ingredients_with_specified_percent_sum": 0,
- "ingredients_with_unspecified_percent_n": 0,
- "ingredients_with_unspecified_percent_sum": 0,
- "known_ingredients_n": 0,
- "origins": "string",
- "origins_hierarchy": [
- { }
], - "origins_lc": "string",
- "origins_tags": [
- { }
], - "traces": "string",
- "traces_hierarchy": [
- { }
], - "traces_lc": "string",
- "traces_tags": [
- { }
], - "unknown_ingredients_n": 0
}| no_nutrition_data | string When a product does not have nutrition data displayed on the packaging, the user can check the field "Nutrition facts are not specified on the product". By doing so, the no_nutrition_data field takes the value "on". This case is frequent (thousands of products). |
| nutrition_data_per | string Enum: "serving" "100g" The nutrition data on the package can be per serving or per 100g. This is essential to understand if IMPORTANT: When writing products, this setting applies to all existing nutrients values for the product, not only the nutrient values sent in the write request. So it should not be changed unless all nutrients values are provided with values that match the nutrition_data_per field. |
| nutrition_data_prepared_per | string Enum: "serving" "100g" The nutrition data for prepared product on the package (if any) can be per serving or per 100g. This is essential to understand if See also important note on |
object All known nutrients for the product. Note that each nutrients are declined with a variety of suffixes like A specific Beware that some properties are to be interpreted based upon Also for products that have a nutrition table for prepared product
(eg. the nutrition facts for a bowl of milk with cocoa powder),
a You can get all possible nutrients from the nutrients taxonomy FIXME add more nutrients with description. | |
object Detail of data the Nutri-Score was computed upon. Note: this might not be stable, don't rely too much on this, or, at least, tell us ! TODO document each property | |
| nutrition_grade_fr | string Nutrition grade (‘a’ to ‘e’), https://world.openfoodfacts.org/nutriscore. |
| nutrition_grades | string Nutrition grades as a comma separated list. Some products with multiple components might have multiple Nutri-Score |
| nutrition_grades_tags | Array of strings |
| nutrition_score_beverage | integer |
| nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients | integer |
| nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients_value | integer |
| nutrition_score_warning_no_fiber | integer |
| other_nutritional_substances_tags | Array of objects |
| unknown_nutrients_tags | Array of objects |
| vitamins_tags | Array of objects |
{- "no_nutrition_data": "on",
- "nutrition_data_per": "serving",
- "nutrition_data_prepared_per": "serving",
- "nutriments": {
- "alcohol": 0,
- "carbohydrates": 0,
- "carbohydrates-total": 0,
- "energy": 0,
- "energy_value": 0,
- "energy_unit": "kcal",
- "energy-kcal": 0,
- "energy-kj": 0,
- "fat": 0,
- "fruits-vegetables-legumes-estimate-from-ingredients": 0,
- "fruits-vegetables-nuts-estimate-from-ingredients": 0,
- "nova-group": 0,
- "nutrition-score-fr": null,
- "proteins": 0,
- "salt": 0,
- "saturated-fat": 0,
- "sodium": 0,
- "sugars": 0,
- "carbon-footprint-from-known-ingredients_product": 0,
- "carbon-footprint-from-known-ingredients_serving": 0,
- "erythritol": 12.5
}, - "nutriscore_data": {
- "saturated_fat_ratio": 0,
- "saturated_fat_ratio_points": 0,
- "saturated_fat_ratio_value": 0
}, - "nutrition_grade_fr": "string",
- "nutrition_grades": "string",
- "nutrition_grades_tags": [
- "string"
], - "nutrition_score_beverage": 0,
- "nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients": 0,
- "nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients_value": 0,
- "nutrition_score_warning_no_fiber": 0,
- "other_nutritional_substances_tags": [
- { }
], - "unknown_nutrients_tags": [
- { }
], - "vitamins_tags": [
- { }
]
}Nutri-Score for the product as a letter.
"a"| category_available | integer Enum: 0 1 |
| grade | string (NutriscoreGrade) Enum: "a" "b" "c" "d" "e" Nutri-Score for the product as a letter. |
| nutrients_available | integer Enum: 0 1 |
| nutriscore_applicable | integer Enum: 0 1 |
| nutriscore_computed | integer Enum: 0 1 |
| score | integer |
{- "category_available": 1,
- "grade": "a",
- "nutrients_available": 1,
- "nutriscore_applicable": 1,
- "nutriscore_computed": 1,
- "score": 13
}| is_beverage | integer Enum: 0 1 |
| is_cheese | integer Enum: 0 1 |
| is_water | integer Enum: 0 1 |
{- "is_beverage": 0,
- "is_cheese": 0,
- "is_water": 0
}| is_beverage | integer Enum: 0 1 |
| is_cheese | integer Enum: 0 1 |
| is_water | integer Enum: 0 1 |
| is_fat | integer Enum: 0 1 |
| energy | integer |
| energy_points | integer |
| energy_value | integer |
| fiber | number <float> |
| fiber_points | integer |
| fiber_value | number <float> |
| fruits_vegetables_nuts_colza_walnut_olive_oils | number <float> |
| fruits_vegetables_nuts_colza_walnut_olive_oils_points | integer |
| fruits_vegetables_nuts_colza_walnut_olive_oils_value | number <float> |
| proteins | number <float> |
| proteins_points | integer |
| proteins_value | number <float> |
| saturated_fat | number <float> |
| saturated_fat_points | integer |
| saturated_fat_value | number <float> |
| sodium | number <float> |
| sodium_points | integer |
| sodium_value | number <float> |
| sugars | number <float> |
| sugars_points | integer |
| sugars_value | number <float> |
| negative_points | integer |
| positive_points | integer |
{- "is_beverage": 0,
- "is_cheese": 0,
- "is_water": 0,
- "is_fat": 0,
- "energy": 1996,
- "energy_points": 5,
- "energy_value": 1996,
- "fiber": 3.8,
- "fiber_points": 4,
- "fiber_value": 3.8,
- "fruits_vegetables_nuts_colza_walnut_olive_oils": 0,
- "fruits_vegetables_nuts_colza_walnut_olive_oils_points": 0,
- "fruits_vegetables_nuts_colza_walnut_olive_oils_value": 0,
- "proteins": 6.6,
- "proteins_points": 4,
- "proteins_value": 6.6,
- "saturated_fat": 6.2,
- "saturated_fat_points": 6,
- "saturated_fat_value": 6.2,
- "sodium": 210,
- "sodium_points": 2,
- "sodium_value": 210,
- "sugars": 21.5,
- "sugars_points": 4,
- "sugars_value": 21.5,
- "negative_points": 17,
- "positive_points": 4
}| is_beverage | integer Enum: 0 1 |
| is_cheese | integer Enum: 0 1 |
| is_water | integer Enum: 0 1 |
| is_fat | integer Enum: 0 1 |
| energy | integer |
| energy_points | integer |
| energy_value | integer |
| fiber | number <float> |
| fiber_points | integer |
| fiber_value | number <float> |
| fruits_vegetables_nuts_colza_walnut_olive_oils | number <float> |
| fruits_vegetables_nuts_colza_walnut_olive_oils_points | integer |
| fruits_vegetables_nuts_colza_walnut_olive_oils_value | number <float> |
| proteins | number <float> |
| proteins_points | integer |
| proteins_value | number <float> |
| saturated_fat | number <float> |
| saturated_fat_points | integer |
| saturated_fat_value | number <float> |
| sodium | number <float> |
| sodium_points | integer |
| sodium_value | number <float> |
| sugars | number <float> |
| sugars_points | integer |
| sugars_value | number <float> |
| negative_points | integer |
| positive_points | integer |
| grade | string (NutriscoreGrade) Enum: "a" "b" "c" "d" "e" Nutri-Score for the product as a letter. |
| score | integer |
{- "is_beverage": 0,
- "is_cheese": 0,
- "is_water": 0,
- "is_fat": 0,
- "energy": 1996,
- "energy_points": 5,
- "energy_value": 1996,
- "fiber": 3.8,
- "fiber_points": 4,
- "fiber_value": 3.8,
- "fruits_vegetables_nuts_colza_walnut_olive_oils": 0,
- "fruits_vegetables_nuts_colza_walnut_olive_oils_points": 0,
- "fruits_vegetables_nuts_colza_walnut_olive_oils_value": 0,
- "proteins": 6.6,
- "proteins_points": 4,
- "proteins_value": 6.6,
- "saturated_fat": 6.2,
- "saturated_fat_points": 6,
- "saturated_fat_value": 6.2,
- "sodium": 210,
- "sodium_points": 2,
- "sodium_value": 210,
- "sugars": 21.5,
- "sugars_points": 4,
- "sugars_value": 21.5,
- "negative_points": 17,
- "positive_points": 4,
- "grade": "a",
- "score": 13
}| id | string |
| points | integer |
| points_max | integer |
| unit | string |
| value | null or number <float> |
{- "id": "energy",
- "points": 5,
- "points_max": 10,
- "unit": "kJ",
- "value": 21.5
}| is_beverage | integer Enum: 0 1 |
| is_cheese | integer Enum: 0 1 |
| is_water | integer Enum: 0 1 |
| is_fat_oil_nuts_seeds | integer Enum: 0 1 |
| is_red_meat_product | integer Enum: 0 1 |
object (Nutriscore2023DataComponents) | |
| count_proteins | number <float> |
| count_proteins_reason | string |
| negative_points | integer |
| positive_points | integer |
| negative_points_max | integer |
| positive_points_max | integer |
| positive_nutrients | Array of strings |
{- "is_beverage": 0,
- "is_cheese": 0,
- "is_water": 0,
- "is_fat_oil_nuts_seeds": 0,
- "is_red_meat_product": 0,
- "components": {
- "negative": [
- {
- "id": "energy",
- "points": 5,
- "points_max": 10,
- "unit": "kJ",
- "value": 21.5
}
], - "positive": [
- {
- "id": "energy",
- "points": 5,
- "points_max": 10,
- "unit": "kJ",
- "value": 21.5
}
]
}, - "count_proteins": 0,
- "count_proteins_reason": "negative_points_greater_than_or_equal_to_11",
- "negative_points": 19,
- "positive_points": 1,
- "negative_points_max": 55,
- "positive_points_max": 10,
- "positive_nutrients": [
- "fiber",
- "fruits_vegetables_legumes"
]
}object (Nutriscore2021) | |
object (Nutriscore2023) |
{- "2021": {
- "category_available": 1,
- "grade": "a",
- "nutrients_available": 1,
- "nutriscore_applicable": 1,
- "nutriscore_computed": 1,
- "score": 13,
- "data": {
- "is_beverage": 0,
- "is_cheese": 0,
- "is_water": 0,
- "is_fat": 0,
- "energy": 1996,
- "energy_points": 5,
- "energy_value": 1996,
- "fiber": 3.8,
- "fiber_points": 4,
- "fiber_value": 3.8,
- "fruits_vegetables_nuts_colza_walnut_olive_oils": 0,
- "fruits_vegetables_nuts_colza_walnut_olive_oils_points": 0,
- "fruits_vegetables_nuts_colza_walnut_olive_oils_value": 0,
- "proteins": 6.6,
- "proteins_points": 4,
- "proteins_value": 6.6,
- "saturated_fat": 6.2,
- "saturated_fat_points": 6,
- "saturated_fat_value": 6.2,
- "sodium": 210,
- "sodium_points": 2,
- "sodium_value": 210,
- "sugars": 21.5,
- "sugars_points": 4,
- "sugars_value": 21.5,
- "negative_points": 17,
- "positive_points": 4,
- "grade": "a",
- "score": 13
}
}, - "2023": {
- "category_available": 1,
- "grade": "a",
- "nutrients_available": 1,
- "nutriscore_applicable": 1,
- "nutriscore_computed": 1,
- "score": 13,
- "data": {
- "is_beverage": 0,
- "is_cheese": 0,
- "is_water": 0,
- "is_fat_oil_nuts_seeds": 0,
- "is_red_meat_product": 0,
- "components": {
- "negative": [
- {
- "id": "energy",
- "points": 5,
- "points_max": 10,
- "unit": "kJ",
- "value": 21.5
}
], - "positive": [
- {
- "id": "energy",
- "points": 5,
- "points_max": 10,
- "unit": "kJ",
- "value": 21.5
}
]
}, - "count_proteins": 0,
- "count_proteins_reason": "negative_points_greater_than_or_equal_to_11",
- "negative_points": 19,
- "positive_points": 1,
- "negative_points_max": 55,
- "positive_points_max": 10,
- "positive_nutrients": [
- "fiber",
- "fruits_vegetables_legumes"
]
}
}
}Nutri-Score for the product as a letter.
[- "d"
]object (Nutriscores) | |
| nutriscore_2021_tags | Array of strings (NutriscoreGradeTags) Items Enum: "a" "b" "c" "d" "e" |
| nutriscore_2023_tags | Array of strings (NutriscoreGradeTags) Items Enum: "a" "b" "c" "d" "e" |
object (Nutriscore2021Data) | |
| nutriscore_grade | string (NutriscoreGrade) Enum: "a" "b" "c" "d" "e" Nutri-Score for the product as a letter. |
| nutriscore_score | integer Nutri-Score for the product as an integer (see also |
| nutriscore_score_opposite | integer |
| nutriscore_tags | Array of strings (NutriscoreGradeTags) Items Enum: "a" "b" "c" "d" "e" |
| nutriscore_version | string |
{- "nutriscore": {
- "2021": {
- "category_available": 1,
- "grade": "a",
- "nutrients_available": 1,
- "nutriscore_applicable": 1,
- "nutriscore_computed": 1,
- "score": 13,
- "data": {
- "is_beverage": 0,
- "is_cheese": 0,
- "is_water": 0,
- "is_fat": 0,
- "energy": 1996,
- "energy_points": 5,
- "energy_value": 1996,
- "fiber": 3.8,
- "fiber_points": 4,
- "fiber_value": 3.8,
- "fruits_vegetables_nuts_colza_walnut_olive_oils": 0,
- "fruits_vegetables_nuts_colza_walnut_olive_oils_points": 0,
- "fruits_vegetables_nuts_colza_walnut_olive_oils_value": 0,
- "proteins": 6.6,
- "proteins_points": 4,
- "proteins_value": 6.6,
- "saturated_fat": 6.2,
- "saturated_fat_points": 6,
- "saturated_fat_value": 6.2,
- "sodium": 210,
- "sodium_points": 2,
- "sodium_value": 210,
- "sugars": 21.5,
- "sugars_points": 4,
- "sugars_value": 21.5,
- "negative_points": 17,
- "positive_points": 4,
- "grade": "a",
- "score": 13
}
}, - "2023": {
- "category_available": 1,
- "grade": "a",
- "nutrients_available": 1,
- "nutriscore_applicable": 1,
- "nutriscore_computed": 1,
- "score": 13,
- "data": {
- "is_beverage": 0,
- "is_cheese": 0,
- "is_water": 0,
- "is_fat_oil_nuts_seeds": 0,
- "is_red_meat_product": 0,
- "components": {
- "negative": [
- {
- "id": "energy",
- "points": 5,
- "points_max": 10,
- "unit": "kJ",
- "value": 21.5
}
], - "positive": [
- {
- "id": "energy",
- "points": 5,
- "points_max": 10,
- "unit": "kJ",
- "value": 21.5
}
]
}, - "count_proteins": 0,
- "count_proteins_reason": "negative_points_greater_than_or_equal_to_11",
- "negative_points": 19,
- "positive_points": 1,
- "negative_points_max": 55,
- "positive_points_max": 10,
- "positive_nutrients": [
- "fiber",
- "fruits_vegetables_legumes"
]
}
}
}, - "nutriscore_2021_tags": [
- "d"
], - "nutriscore_2023_tags": [
- "d"
], - "nutriscore_data": {
- "is_beverage": 0,
- "is_cheese": 0,
- "is_water": 0,
- "is_fat": 0,
- "energy": 1996,
- "energy_points": 5,
- "energy_value": 1996,
- "fiber": 3.8,
- "fiber_points": 4,
- "fiber_value": 3.8,
- "fruits_vegetables_nuts_colza_walnut_olive_oils": 0,
- "fruits_vegetables_nuts_colza_walnut_olive_oils_points": 0,
- "fruits_vegetables_nuts_colza_walnut_olive_oils_value": 0,
- "proteins": 6.6,
- "proteins_points": 4,
- "proteins_value": 6.6,
- "saturated_fat": 6.2,
- "saturated_fat_points": 6,
- "saturated_fat_value": 6.2,
- "sodium": 210,
- "sodium_points": 2,
- "sodium_value": 210,
- "sugars": 21.5,
- "sugars_points": 4,
- "sugars_value": 21.5,
- "negative_points": 17,
- "positive_points": 4,
- "grade": "a",
- "score": 13
}, - "nutriscore_grade": "a",
- "nutriscore_score": 13,
- "nutriscore_score_opposite": -13,
- "nutriscore_tags": [
- "d"
], - "nutriscore_version": "string"
}| data_quality_bugs_tags | Array of strings |
| data_quality_errors_tags | Array of strings |
| data_quality_info_tags | Array of strings |
| data_quality_tags | Array of strings |
| data_quality_warnings_tags | Array of strings |
| data_sources | string Source of data imported from producers. |
| data_sources_tags | Array of strings |
| last_check_dates_tags | Array of strings |
| last_checked_t | integer |
| last_checker | string |
| states | string comma separated list of values indicating some states of the product, like things to be done, or to be completed. See states taxonomy |
| states_hierarchy | Array of strings |
| states_tags | Array of strings |
| misc_tags | Array of strings Information about different aspect of the product Refer to misc taxonomy |
{- "data_quality_bugs_tags": [
- "string"
], - "data_quality_errors_tags": [
- "string"
], - "data_quality_info_tags": [
- "string"
], - "data_quality_tags": [
- "string"
], - "data_quality_warnings_tags": [
- "string"
], - "data_sources": "string",
- "data_sources_tags": [
- "string"
], - "last_check_dates_tags": [
- "string"
], - "last_checked_t": 0,
- "last_checker": "string",
- "states": "string",
- "states_hierarchy": [
- "string"
], - "states_tags": [
- "string"
], - "misc_tags": [
- "string"
]
}| additives_original_tags | Array of strings |
| additives_prev_original_tags | Array of strings |
| added_countries_tags | Array of objects |
| allergens_from_ingredients | string |
| allergens_from_user | string |
| amino_acids_prev_tags | Array of objects |
| amino_acids_tags | Array of objects |
| carbon_footprint_percent_of_known_ingredients | integer |
object | |
| categories_properties_tags | Array of strings |
object | |
| ciqual_food_name_tags | Array of strings |
| compared_to_category | string the category to use for comparison. TODO explain how it is chosen. |
| conservation_conditions | string |
| customer_service | string Contact info of customer service. |
| expiration_date | string |
| link | string link to the product on the website of the producer |
| main_countries_tags | Array of objects |
| minerals_prev_tags | Array of objects |
| minerals_tags | Array of objects |
object Those are fields provided by the producer (through producers platform), and the value he provided. | |
object Detail of ingredients or processing that makes the products having Nova 3 or 4 | |
| nucleotides_tags | Array of objects |
| origin | string |
| purchase_places | string Country, state, or city where the product can be purchased. |
| purchase_places_tags | Array of strings |
| stores | string Distributor name. |
| stores_tags | Array of strings |
| traces_from_ingredients | string |
| traces_from_user | string |
| conservation_conditions_(?<language_code>\w\w) pattern property | string |
| customer_service_(?<language_code>\w\w) pattern property | string |
| origin_(?<language_code>\w\w) pattern property | string
|
{- "additives_original_tags": [
- "string"
], - "additives_prev_original_tags": [
- "string"
], - "added_countries_tags": [
- { }
], - "allergens_from_ingredients": "string",
- "allergens_from_user": "string",
- "amino_acids_prev_tags": [
- { }
], - "amino_acids_tags": [
- { }
], - "carbon_footprint_percent_of_known_ingredients": 0,
- "categories_properties": {
- "agribalyse_food_code:en": "string",
- "agribalyse_proxy_food_code:en": "string",
- "ciqual_food_code:en": "string"
}, - "categories_properties_tags": [
- "string"
], - "category_properties": {
- "property1": "string",
- "property2": "string"
}, - "ciqual_food_name_tags": [
- "string"
], - "compared_to_category": "string",
- "conservation_conditions": "string",
- "customer_service": "string",
- "expiration_date": "string",
- "link": "string",
- "main_countries_tags": [
- { }
], - "minerals_prev_tags": [
- { }
], - "minerals_tags": [
- { }
], - "owner_fields": {
- "additionalProperties": 0
}, - "nova_groups_markers": {
- "property1": [
- [
- "string"
]
], - "property2": [
- [
- "string"
]
]
}, - "nucleotides_tags": [
- { }
], - "origin": "string",
- "purchase_places": "Paris",
- "purchase_places_tags": [
- "string"
], - "stores": "Walmart",
- "stores_tags": [
- "string"
], - "traces_from_ingredients": "string",
- "traces_from_user": "string"
}| created_t | integer Date when the product was added (UNIX timestamp format).
See also |
| creator | string The contributor who added the product first. |
| editors_tags | Array of strings List of editors who edited the product. |
| informers_tags | Array of strings |
| interface_version_created | string |
| interface_version_modified | string |
object | |
object Same as | |
| languages_hierarchy | Array of strings |
| languages_tags | Array of strings |
| last_edit_dates_tags | Array of strings |
| last_editor | string |
| last_modified_by | string The username of the user who last modified the product. |
| last_modified_t | integer Date when the product page was last modified. This date is updated only when primary data is modified (data entered by the user or updated by an interface) |
| last_updated_t | integer Date when the product page was last modified. This date is updated when primary data or secondary data is modified (primary: data entered by a user or read from an interface, secondary: data computed by a utility such as update_all_products.pl) |
| owner | string Id of the producer in case he provides his own data about a product (producer platform). |
| owners_tags | string Tagyfied version of owner |
| photographers_tags | Array of strings |
| rev | integer revision number of this product version (each edit adds a revision) |
Array of objects (product_meta_source) | |
object (product_meta_source_fields) | |
| teams | string |
| teams_tags | Array of strings |
| update_key | string |
{- "created_t": 1457680652,
- "creator": "string",
- "editors_tags": [
- "string"
], - "informers_tags": [
- "string"
], - "interface_version_created": "string",
- "interface_version_modified": "string",
- "languages": { },
- "languages_codes": { },
- "languages_hierarchy": [
- "string"
], - "languages_tags": [
- "string"
], - "last_edit_dates_tags": [
- "string"
], - "last_editor": "string",
- "last_modified_by": "sebleouf",
- "last_modified_t": 0,
- "last_updated_t": 0,
- "owner": "string",
- "owners_tags": "string",
- "photographers_tags": [
- "string"
], - "rev": 0,
- "sources": [
- {
- "fields": [
- "string"
], - "id": "string",
- "images": [
- { }
], - "import_t": 0,
- "manufacturer": 0,
- "name": "string",
- "source_licence": "string",
- "source_licence_url": "string",
- "url": null
}
], - "sources_fields": {
- "org-gs1": {
- "gln": "string",
- "gpcCategoryCode": "string",
- "gpcCategoryName": "string",
- "isAllergenRelevantDataProvided": "string",
- "lastChangeDateTime": "string",
- "partyName": "string",
- "productionVariantDescription": "string",
- "publicationDateTime": "string"
}
}, - "teams": "string",
- "teams_tags": [
- "string"
], - "update_key": "string"
}| name | string A short name of this panel, not including any actual values |
| title | string |
| type | string Enum: "grade" "percentage" Used to indicate how the value of this item is measured, such as "grade" for Nutri-Score and Green-Score or "percentage" for Salt |
| grade | string Enum: "a+" "a" "b" "c" "d" "e" "f" "unknown" The value for this panel where it corresponds to a A to E grade such as the Nutri-Score or the Green-Score. |
| value | number The numeric value of the panel, where the type is "percentage" |
| icon_url | string |
| icon_color_from_evaluation | string |
| icon_size | string If set to "small", the icon should be displayed at a small size. |
{- "name": "string",
- "title": "string",
- "type": "grade",
- "grade": "a+",
- "value": 0,
- "icon_url": "string",
- "icon_color_from_evaluation": "string",
- "icon_size": "string"
}| type | string Enum: "summary" "warning" "notes" the type of text, might influence the way you display it. |
| html | string Text to display in HTML format. |
| language | string Language of the text. The name of the language is returned in the language requested when making the API call. e.g. if the text is in Polish, and the requested language is French, the language field will contain "Polonais" (French for "Polish"). Only set for specific fields such as the list of ingredients of a product. |
| lc | string 2 letter language code for the text. Only set for specific fields such as the list of ingredients of a product. |
| edit_field_id | string id of the field used to edit this text in the product edit API. |
| edit_field_type | string Type of the product field. |
| edit_field_value | string Current value of the product field. This may differ from the html field which can contain extra formating. |
| source_url | string Link to the source |
| source_text | string name of the source |
| source_lc | string Source locale name |
| source_language | string Human readable source locale name |
{- "type": "summary",
- "html": "string",
- "language": "string",
- "lc": "string",
- "edit_field_id": "string",
- "edit_field_type": "string",
- "edit_field_value": "string",
- "source_url": "https://en.wikipedia.org/wiki/Sodium acetate",
- "source_text": "Wikipedia",
- "source_lc": "en",
- "source_language": "English"
}| url | string full URL of the image |
| width | integer Width of the image. This is just a suggestion coming from the server, the client may choose to use its own dimensions for the image. |
| height | integer Height of the image. This is just a suggestion coming from the server, the client may choose to use its own dimensions for the image. |
| alt_text | string Alt Text of the image. |
{- "url": "string",
- "width": 0,
- "height": 0,
- "alt_text": "string"
}| panel_id | string The id of the panel to include. The id is the key of the panel in the panels object returned in the knowledge_panels field. |
{- "panel_id": "string"
}| title | string |
| panel_ids | Array of strings The ids of the panels to include. The ids are the keys of the panels in the panels object returned in the knowledge_panels field. |
| image | object An image related to the panel group (e.g. the ingredients or nutrition facts image for the ingredients and nutrition panel groups). |
{- "title": "string",
- "panel_ids": [
- "string"
], - "image": { }
}| id | string An id for the table. |
| title | string Title of the column. |
| rows | string |
Array of objects (table_column) |
{- "id": "string",
- "title": "string",
- "rows": "string",
- "columns": [
- {
- "type": "string",
- "text": "string",
- "text_for_small_screens": "string",
- "style": "string",
- "column_group_id": "string",
- "shown_by_default": true
}
]
}| type required | string Enum: "text" "image" "action" "panel" "panel_group" "table" The type of the included element object. The type also indicates which field contains the included element object. e.g. if the type is "text", the included element object will be in the "text_element" field. Note that in the future, new type of element may be added, so your code should ignore unrecognized types, and unknown properties. TODO: add Map type |
object (text_element) A text in simple HTML format to display. For some specific texts that correspond to a product field (e.g. a product name, the ingredients list of a product),the edit_field_* fields are used to indicate how to edit the field value. | |
object (image_element) | |
| action_element | string |
object (panel_element) Panels can include other panels as sub-panels using the panel_element. | |
object (panel_group_element) The panel group element is used to display an optional title followed by a number of sub-panels. | |
object (table_element) Element to display a table. |
{- "type": "text",
- "text_element": {
- "type": "summary",
- "html": "string",
- "language": "string",
- "lc": "string",
- "edit_field_id": "string",
- "edit_field_type": "string",
- "edit_field_value": "string",
- "source_url": "https://en.wikipedia.org/wiki/Sodium acetate",
- "source_text": "Wikipedia",
- "source_lc": "en",
- "source_language": "English"
}, - "image_element": {
- "url": "string",
- "width": 0,
- "height": 0,
- "alt_text": "string"
}, - "action_element": "string",
- "panel_element": {
- "panel_id": "string"
}, - "panel_group_element": {
- "title": "string",
- "panel_ids": [
- "string"
], - "image": { }
}, - "table_element": {
- "id": "string",
- "title": "string",
- "rows": "string",
- "columns": [
- {
- "type": "string",
- "text": "string",
- "text_for_small_screens": "string",
- "style": "string",
- "column_group_id": "string",
- "shown_by_default": true
}
]
}
}| type | string Type of the panel. If set to "card", the panel and its sub-panels should be displayed in a card. If set to "inline", the panel should have its content always displayed. |
| expanded | boolean If true, the panel is to be displayed already expanded. If false, only the title should be displayed, and the user should be able to click or tap it to open the panel and display the elements. |
| expand_for | string If set to "large", the content of the panel should be expanded on large screens, but it should still be possible to unexpand it. |
| evaluation | string Enum: "good" "average" "neutral" "bad" "unknown" An evaluation status specifically for this title element. This can be used to directly color the icon if 'icon_color_from_evaluation' is true and this field is present, or it might provide context for the title itself. e.g. bad is red. Please be careful in choosing colors, to avoid 50 shades of red. |
| half_width_on_mobile | boolean If true, suggests that this panel could be rendered as half-width on mobile devices, allowing for side-by-side display with another half-width panel if applicable. |
object (title_element) The title of a panel. | |
Array of objects (element) An ordered list of elements to display in the content of the panel. | |
| level | string a message level, as levels we use in log. It might help theming the panel visually. Some possible values: info, recommendation |
| size | string Value: "small" size is either empty (normal display) or small to indicate a panel that should have a smaller font size |
| topics | Array of strings topics currently include health, environment, problem |
{- "type": "string",
- "expanded": true,
- "expand_for": "string",
- "evaluation": "bad",
- "half_width_on_mobile": true,
- "title_element": {
- "name": "string",
- "title": "string",
- "type": "grade",
- "grade": "a+",
- "value": 0,
- "icon_url": "string",
- "icon_color_from_evaluation": "string",
- "icon_size": "string"
}, - "elements": [
- {
- "type": "text",
- "text_element": {
- "type": "summary",
- "html": "string",
- "language": "string",
- "lc": "string",
- "edit_field_id": "string",
- "edit_field_type": "string",
- "edit_field_value": "string",
- "source_url": "https://en.wikipedia.org/wiki/Sodium acetate",
- "source_text": "Wikipedia",
- "source_lc": "en",
- "source_language": "English"
}, - "image_element": {
- "url": "string",
- "width": 0,
- "height": 0,
- "alt_text": "string"
}, - "action_element": "string",
- "panel_element": {
- "panel_id": "string"
}, - "panel_group_element": {
- "title": "string",
- "panel_ids": [
- "string"
], - "image": { }
}, - "table_element": {
- "id": "string",
- "title": "string",
- "rows": "string",
- "columns": [
- {
- "type": "string",
- "text": "string",
- "text_for_small_screens": "string",
- "style": "string",
- "column_group_id": "string",
- "shown_by_default": true
}
]
}
}
], - "level": "info",
- "size": "small",
- "topics": [
- "health"
]
}object (panel) Each panel contains an optional title and an optional array of elements. |
{- "additionalProperties": "string"
}object (panels) The panels object is a dictionary of individual panel objects. Each key of the dictionary is the id of the panel, and the value is the panel object. Apps typically display a number of root panels with known panel ids (e.g. health_card and environment_card). Panels can reference other panels and display them as sub-panels. |
{- "knowledge_panels": {
- "additionalProperties": "string"
}
}Array of objects (product_attribute_group) Each element is an attribute that can help compute a personal ranking for the product |
{- "attribute_groups": [
- {
- "id": "string",
- "status": "known",
- "title": "Does not contain: Molluscs",
- "match": 100,
- "grade": "unknown",
- "name": "string",
- "icon_url": "string",
- "description": "string",
- "description_short": "string"
}
]
}| abbreviated_product_name | string Abbreviated name in requested language |
| code | string barcode of the product (can be EAN-13 or internal codes for some food stores), for products without a barcode, Open Food Facts assigns a number starting with the 200 reserved prefix |
| codes_tags | Array of strings |
| generic_name | string Legal name of the product as regulated by the European authorities. |
| id | string internal identifier for the product, usually set to the value of |
| lc | string Main language of the product.
This is a duplicate of |
| lang | string Main language of the product. This should be the main language of product packaging (if one is predominant). Main language is also used to decide which ingredients list to parse. |
| nova_group | integer Nova group as an integer from 1 to 4. See https://world.openfoodfacts.org/nova |
| nova_groups | string |
| obsolete | string |
| obsolete_since_date | string A date at which the product was declared obsolete. This means it's not produced any more. |
| product_name | string The name of the product |
| product_name_en | string The name of the product can also be in many other languages like product_name_fr (for French). |
| product_quantity | string The size in g or ml for the whole product.
It is a normalized version of the |
| product_quantity_unit | string The unit (either g or ml) for the corresponding |
| quantity | string The quantity of the product, with the corresponding number of portions or unit (g, ml, kg, l, cl, oz, lbs...). It should be the value as displayed on the product. The ℮ sign is allowed. When it refers to the number of portions, it can be filled without any units (e.g. "6 eggs"). |
| schema_version | integer Version of the product object schema used in the response. This indicates the structure of the 'product' field itself. For more details, please read: https://openfoodfacts.github.io/openfoodfacts-server/api/ref-api-and-product-schema-change-log |
| additives_n | integer Number of food additives. |
| checked | string |
| complete | integer |
| completeness | number |
| ecoscore_grade | string See also: |
| ecoscore_score | integer See also: |
| food_groups | string |
| food_groups_tags | Array of strings |
object Traffic light indicators on main nutrients levels | |
| packaging_text | string Recycling instructions as raw text, e.g. Plastic bottle to recycle, Plastic cap to recycle. This will get automatically parsed and will be used to compute the Eco-Score. You can either request it (if it exists) or send it in a specific language. |
Array of objects (packagings) The packagings object is an array of individual packaging component objects. The Packaging data document explains how packaging data is structured in Open Food Facts: https://openfoodfacts.github.io/openfoodfacts-server/dev/explain-packaging-data/ The shape, material and recycling properties of each packaging component are linked to entries in the packaging_shapes, packaging_materials and packaging_recycling taxonomies: https://world.openfoodfacts.org/data/taxonomies/packaging_shapes.json https://world.openfoodfacts.org/data/taxonomies/packaging_materials.json https://world.openfoodfacts.org/data/taxonomies/packaging_recycling.json If the tags_lc field is set, the properties will include a lc_name field with the translation in the requested language. | |
| packagings_complete | integer (packagings_complete) [ 0 .. 1 ] Indicate if the packagings array contains all the packaging parts of the product. This field can be set by users when they enter or verify packaging data. Possible values are 0 or 1. |
| pnns_groups_1 | string Category of food according to French Nutrition and Health Program |
| pnns_groups_1_tags | Array of strings |
| pnns_groups_2 | string Sub Category of food according to French Nutrition and Health Program |
| pnns_groups_2_tags | Array of strings |
| popularity_key | integer An imprecise measurement of popularity based on Scan statistics. A higher value means higher popularity. |
| popularity_tags | Array of strings Indicators for the popularity of a product, like the amount of scans in a specific year.
|
| scans_n | integer Number of scans performed with the official Open Food Facts mobile application, the last year
for which the product was scanned (current year excluded). This value is computed once a year by scanbot.pl.
It is possible that a product has never been scanned at all: |
| unique_scans_n | integer Number of unique scans performed with the official Open Food Facts mobile application, the last year
for which the product was scanned (current year excluded).
Unique scans means it is based on different IPs.
This value is computed once a year by scanbot.pl.
See also |
| serving_quantity | string Normalized version of serving_size.
Note that this is NOT the number of servings by product.
(in perl, see |
| serving_quantity_unit | string The unit (either g or ml) for the correponding serving_quantity. |
| serving_size | string Serving size text (generally in g or ml). We expect a quantity + unit but the user is free to input any string. |
| brands | string Comma separated list of brands (not taxonomized), in the last language used to edit it (recorded in brands_lc) This field is mostly used for debugging and testing purposes. Do not use it for display purposes. |
| brands_hierarchy | Array of strings (Canonicalized taxonomy tag entry) An array of brands tag entries (for display and editing). That is the id of brands found in taxonomy + brands not found in taxonomy (as-is, with no normalization). This is the field that should be used for display purposes, as it is not lossy. |
| brands_lc | string Language code of the last edit for brands |
| brands_tags | Array of strings (Indexed taxonomy tag entry (lossy, for search only)) An array of indexed brands tag entries (for search). That is the id of brands found in taxonomy + brands not found in taxonomy (with case / accents / spaces normalized). This is mostly used for search as the normalization of entries not in the taxonomy is lossy. |
| categories | string Comma separated list of categories (not taxonomized), in the last language used to edit it (recorded in categories_lc) This field is mostly used for debugging and testing purposes. Do not use it for display purposes. |
| categories_hierarchy | Array of strings (Canonicalized taxonomy tag entry) An array of categories tag entries (for display and editing). That is the id of categories found in taxonomy + categories not found in taxonomy (as-is, with no normalization). This is the field that should be used for display purposes, as it is not lossy. |
| categories_lc | string Language code of the last edit for categories |
| categories_tags | Array of strings (Indexed taxonomy tag entry (lossy, for search only)) An array of indexed categories tag entries (for search). That is the id of categories found in taxonomy + categories not found in taxonomy (with case / accents / spaces normalized). This is mostly used for search as the normalization of entries not in the taxonomy is lossy. |
| checkers_tags | Array of strings |
| cities | string |
| cities_tags | Array of objects |
| correctors_tags | Array of strings |
| countries | string List of countries where the product is sold. |
| countries_hierarchy | Array of strings |
| countries_lc | string Countries language code |
| countries_tags | Array of strings |
| ecoscore_tags | Array of strings All ecoscore of a product.
Most of the time it's only one value,
but it might eventually be more for products composed of sub-products.
See also: |
| emb_codes | string Packager code. EMB is the French system of traceability codes for packager. |
| emb_codes_orig | string |
| emb_codes_tags | Array of objects |
| labels | string |
| labels_hierarchy | Array of strings |
| labels_lc | string |
| labels_tags | Array of strings |
| entry_dates_tags | Array of strings The data as a series of tag: |
| manufacturing_places | string Places where the product was manufactured or transformed. |
| manufacturing_places_tags | Array of strings |
| nova_groups_tags | Array of strings |
| nutrient_levels_tags | Array of strings |
object (images) Uploaded and selected images of the product. | |
object (Selected images URLs) URLs of selected images, generated at runtime. | |
| last_image_dates_tags | Array of strings An array of tags entries to indicated the year, month and day of the last image upload (in formats YYYY, YYYY-MM, YYYY-MM-DD). |
| last_image_t | integer timestamp of last image upload |
object (product_ecoscore_data) An object about a lot of details about data needed for Eco-Score computation and complementary data of interest. | |
| ecoscore_extended_data_version | string |
| environment_impact_level | string |
| environment_impact_level_tags | Array of objects |
| additives_tags | Array of strings |
| allergens | string comma separated list of allergens |
| allergens_lc | string language in which |
| allergens_hierarchy | Array of strings |
| allergens_tags | Array of strings |
Array of objects (Ingredients) This structure gives the different ingredients and some information about them, like estimate on their quantity. | |
object | |
| ingredients_analysis_tags | Array of strings |
| ingredients_from_or_that_may_be_from_palm_oil_n | integer |
| ingredients_from_palm_oil_n | integer |
| ingredients_from_palm_oil_tags | Array of objects |
| ingredients_hierarchy | Array of strings |
| ingredients_n | integer |
| ingredients_n_tags | Array of strings |
| ingredients_original_tags | Array of strings |
| ingredients_percent_analysis | integer Indicates the result of ingredients analysis processing
|
| ingredients_sweeteners_n | integer Number of sweeteners additives in the ingredients. Undefined if ingredients are not specified. |
| ingredients_non_nutritive_sweeteners_n | integer Number of non-nutritive sweeteners additives (as specified in the Nutri-Score formula) in the ingredients. Undefined if ingredients are not specified. |
| ingredients_tags | Array of strings |
| ingredients_lc | string Language that was used to parse the ingredient list. If |
| ingredients_text | string Raw list of ingredients. This will get automatically parsed and get used to compute the Eco-Score or find allergens, etc.. It's a copy of ingredients_text in the main language of the product (see |
| ingredients_text_with_allergens | string Same text as |
| ingredients_that_may_be_from_palm_oil_n | integer |
| ingredients_that_may_be_from_palm_oil_tags | Array of objects |
| ingredients_with_specified_percent_n | integer |
| ingredients_with_specified_percent_sum | integer |
| ingredients_with_unspecified_percent_n | integer |
| ingredients_with_unspecified_percent_sum | integer |
| known_ingredients_n | integer |
| origins | string Origins of ingredients |
| origins_hierarchy | Array of objects |
| origins_lc | string |
| origins_tags | Array of objects |
| traces | string List of substances that might cause allergies that are present in trace amounts in the product (this does not include the ingredients, as they are not only present in trace amounts). It is taxonomized with the allergens taxonomy. Refer to the allergens taxonomy |
Array of objects or strings | |
| traces_lc | string |
Array of objects or strings | |
| unknown_ingredients_n | integer |
| no_nutrition_data | string When a product does not have nutrition data displayed on the packaging, the user can check the field "Nutrition facts are not specified on the product". By doing so, the no_nutrition_data field takes the value "on". This case is frequent (thousands of products). |
| nutrition_data_per | string Enum: "serving" "100g" The nutrition data on the package can be per serving or per 100g. This is essential to understand if IMPORTANT: When writing products, this setting applies to all existing nutrients values for the product, not only the nutrient values sent in the write request. So it should not be changed unless all nutrients values are provided with values that match the nutrition_data_per field. |
| nutrition_data_prepared_per | string Enum: "serving" "100g" The nutrition data for prepared product on the package (if any) can be per serving or per 100g. This is essential to understand if See also important note on |
object All known nutrients for the product. Note that each nutrients are declined with a variety of suffixes like A specific Beware that some properties are to be interpreted based upon Also for products that have a nutrition table for prepared product
(eg. the nutrition facts for a bowl of milk with cocoa powder),
a You can get all possible nutrients from the nutrients taxonomy FIXME add more nutrients with description. | |
object (Nutriscore2021Data) Detail of data the Nutri-Score was computed upon. Note: this might not be stable, don't rely too much on this, or, at least, tell us ! TODO document each property | |
| nutrition_grade_fr | string Nutrition grade (‘a’ to ‘e’), https://world.openfoodfacts.org/nutriscore. |
| nutrition_grades | string Nutrition grades as a comma separated list. Some products with multiple components might have multiple Nutri-Score |
| nutrition_grades_tags | Array of strings |
| nutrition_score_beverage | integer |
| nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients | integer |
| nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients_value | integer |
| nutrition_score_warning_no_fiber | integer |
| other_nutritional_substances_tags | Array of objects |
| unknown_nutrients_tags | Array of objects |
| vitamins_tags | Array of objects |
object (Nutriscores) | |
| nutriscore_2021_tags | Array of strings (NutriscoreGradeTags) Items Enum: "a" "b" "c" "d" "e" |
| nutriscore_2023_tags | Array of strings (NutriscoreGradeTags) Items Enum: "a" "b" "c" "d" "e" |
| nutriscore_grade | string (NutriscoreGrade) Enum: "a" "b" "c" "d" "e" Nutri-Score for the product as a letter. |
| nutriscore_score | integer Nutri-Score for the product as an integer (see also |
| nutriscore_score_opposite | integer |
| nutriscore_tags | Array of strings (NutriscoreGradeTags) Items Enum: "a" "b" "c" "d" "e" |
| nutriscore_version | string |
| data_quality_bugs_tags | Array of strings |
| data_quality_errors_tags | Array of strings |
| data_quality_info_tags | Array of strings |
| data_quality_tags | Array of strings |
| data_quality_warnings_tags | Array of strings |
| data_sources | string Source of data imported from producers. |
| data_sources_tags | Array of strings |
| last_check_dates_tags | Array of strings |
| last_checked_t | integer |
| last_checker | string |
| states | string comma separated list of values indicating some states of the product, like things to be done, or to be completed. See states taxonomy |
| states_hierarchy | Array of strings |
| states_tags | Array of strings |
| misc_tags | Array of strings Information about different aspect of the product Refer to misc taxonomy |
| additives_original_tags | Array of strings |
| additives_prev_original_tags | Array of strings |
| added_countries_tags | Array of objects |
| allergens_from_ingredients | string |
| allergens_from_user | string |
| amino_acids_prev_tags | Array of objects |
| amino_acids_tags | Array of objects |
| carbon_footprint_percent_of_known_ingredients | integer |
object | |
| categories_properties_tags | Array of strings |
object | |
| ciqual_food_name_tags | Array of strings |
| compared_to_category | string the category to use for comparison. TODO explain how it is chosen. |
| conservation_conditions | string |
| customer_service | string Contact info of customer service. |
| expiration_date | string |
| link | string link to the product on the website of the producer |
| main_countries_tags | Array of objects |
| minerals_prev_tags | Array of objects |
| minerals_tags | Array of objects |
object Those are fields provided by the producer (through producers platform), and the value he provided. | |
object Detail of ingredients or processing that makes the products having Nova 3 or 4 | |
| nucleotides_tags | Array of objects |
| origin | string |
| purchase_places | string Country, state, or city where the product can be purchased. |
| purchase_places_tags | Array of strings |
| stores | string Distributor name. |
| stores_tags | Array of strings |
| traces_from_ingredients | string |
| traces_from_user | string |
| created_t | integer Date when the product was added (UNIX timestamp format).
See also |
| creator | string The contributor who added the product first. |
| editors_tags | Array of strings List of editors who edited the product. |
| informers_tags | Array of strings |
| interface_version_created | string |
| interface_version_modified | string |
object | |
object Same as | |
| languages_hierarchy | Array of strings |
| languages_tags | Array of strings |
| last_edit_dates_tags | Array of strings |
| last_editor | string |
| last_modified_by | string The username of the user who last modified the product. |
| last_modified_t | integer Date when the product page was last modified. This date is updated only when primary data is modified (data entered by the user or updated by an interface) |
| last_updated_t | integer Date when the product page was last modified. This date is updated when primary data or secondary data is modified (primary: data entered by a user or read from an interface, secondary: data computed by a utility such as update_all_products.pl) |
| owner | string Id of the producer in case he provides his own data about a product (producer platform). |
| owners_tags | string Tagyfied version of owner |
| photographers_tags | Array of strings |
| rev | integer revision number of this product version (each edit adds a revision) |
Array of objects (product_meta_source) | |
object (product_meta_source_fields) | |
| teams | string |
| teams_tags | Array of strings |
| update_key | string |
object (panels) The panels object is a dictionary of individual panel objects. Each key of the dictionary is the id of the panel, and the value is the panel object. Apps typically display a number of root panels with known panel ids (e.g. health_card and environment_card). Panels can reference other panels and display them as sub-panels. | |
Array of objects (product_attribute_group) Each element is an attribute that can help compute a personal ranking for the product | |
| conservation_conditions_(?<language_code>\w\w) pattern property | string |
| customer_service_(?<language_code>\w\w) pattern property | string |
| origin_(?<language_code>\w\w) pattern property | string
|
{- "abbreviated_product_name": "string",
- "code": "string",
- "codes_tags": [
- "code-13"
], - "generic_name": "string",
- "id": "string",
- "lc": "string",
- "lang": "string",
- "nova_group": 0,
- "nova_groups": "string",
- "obsolete": "string",
- "obsolete_since_date": "string",
- "product_name": "string",
- "product_name_en": "string",
- "product_quantity": "500",
- "product_quantity_unit": "g",
- "quantity": "3 x 150 g",
- "schema_version": 999,
- "additives_n": 0,
- "checked": "string",
- "complete": 0,
- "completeness": 0,
- "ecoscore_grade": "string",
- "ecoscore_score": 0,
- "food_groups": "string",
- "food_groups_tags": [
- "string"
], - "nutrient_levels": {
- "fat": "low",
- "salt": "low",
- "saturated-fat": "low",
- "sugars": "low"
}, - "packaging_text": "packaging_text_en",
- "packagings": [
- {
- "number_of_units": 6,
- "shape": {
- "id": "en:bottle",
- "lc_name": "bouteille"
}, - "material": {
- "id": "en:bottle",
- "lc_name": "bouteille"
}, - "recycling": {
- "id": "en:bottle",
- "lc_name": "bouteille"
}, - "quantity_per_unit": "25 cl",
- "quantity_per_unit_value": 25,
- "quantity_per_unit_unit": "cl",
- "weight_specified": 30,
- "weight_measured": 32,
- "weight_estimated": 26,
- "weight": 30,
- "weight_source_id": "specified"
}
], - "packagings_complete": 1,
- "pnns_groups_1": "string",
- "pnns_groups_1_tags": [
- "string"
], - "pnns_groups_2": "string",
- "pnns_groups_2_tags": [
- "string"
], - "popularity_key": 0,
- "popularity_tags": [
- "bottom-25-percent-scans-2020",
- "top-85-percent-scans-2021",
- "top-90-percent-scans-2022",
- "top-country-it-scans-2019",
- "top-100000-mg-scans-2024"
], - "scans_n": 0,
- "unique_scans_n": 0,
- "serving_quantity": "string",
- "serving_quantity_unit": "g",
- "serving_size": "string",
- "brands": "string",
- "brands_hierarchy": [
- "string"
], - "brands_lc": "string",
- "brands_tags": [
- "string"
], - "categories": "string",
- "categories_hierarchy": [
- "string"
], - "categories_lc": "string",
- "categories_tags": [
- "string"
], - "checkers_tags": [
- "string"
], - "cities": "string",
- "cities_tags": [
- { }
], - "correctors_tags": [
- "string"
], - "countries": "string",
- "countries_hierarchy": [
- "string"
], - "countries_lc": "string",
- "countries_tags": [
- "string"
], - "ecoscore_tags": [
- "string"
], - "emb_codes": "EMB 2013330",
- "emb_codes_orig": "string",
- "emb_codes_tags": [
- { }
], - "labels": "string",
- "labels_hierarchy": [
- "string"
], - "labels_lc": "string",
- "labels_tags": [
- "string"
], - "entry_dates_tags": [
- "2016-03-11",
- "2016-03",
- "2016"
], - "manufacturing_places": "string",
- "manufacturing_places_tags": [
- "string"
], - "nova_groups_tags": [
- "string"
], - "nutrient_levels_tags": [
- "string"
], - "images": {
- "uploaded": { },
- "selected": {
- "front": { },
- "ingredients": { },
- "nutrition": { },
- "packaging": { }
}
}, - "selected_images": { },
- "last_image_dates_tags": [
- "string"
], - "last_image_t": 0,
- "ecoscore_data": {
- "adjustments": {
- "origins_of_ingredients": {
- "aggregated_origins": [
- {
- "epi_score": "string",
- "origin": "string",
- "percent": 0,
- "transportation_score": null
}
], - "epi_score": 0,
- "epi_value": 0,
- "origins_from_categories": [
- "string"
], - "origins_from_origins_field": [
- "string"
], - "transportation_score": 0,
- "transportation_scores": {
- "property1": 0,
- "property2": 0
}, - "transportation_value": 0,
- "transportation_values": {
- "property1": 0,
- "property2": 0
}, - "value": 0,
- "values": {
- "property1": 0,
- "property2": 0
}, - "warning": "string"
}, - "packaging": {
- "non_recyclable_and_non_biodegradable_materials": 0,
- "packagings": [
- {
- "ecoscore_material_score": 0,
- "ecoscore_shape_ratio": 0,
- "material": "string",
- "shape": "string",
- "number_of_units": 1,
- "quantity_per_unit": "33 cL",
- "quantity_per_unit_unit": "cl",
- "quantity_per_unit_value": 33,
- "recycling": "en:recycle-in-sorting-bin",
- "weight_measured": 12.08
}
], - "score": 0,
- "value": 0,
- "warning": "string"
}, - "production_system": {
- "labels": "vegan",
- "value": 0,
- "warning": "string"
}, - "threatened_species": {
- "ingredient": "string",
- "value": 0
}
}, - "agribalyse": {
- "agribalyse_proxy_food_code": "string",
- "agribalyse_food_code": "string",
- "co2_agriculture": 0,
- "co2_consumption": 0,
- "co2_distribution": 0,
- "co2_packaging": 0,
- "co2_processing": 0,
- "co2_total": 0,
- "co2_transportation": 0,
- "code": "string",
- "dqr": "string",
- "ef_agriculture": 0,
- "ef_consumption": 0,
- "ef_distribution": 0,
- "ef_packaging": 0,
- "ef_processing": 0,
- "ef_total": 0,
- "ef_transportation": 0,
- "is_beverage": 0,
- "name_en": "string",
- "score": 0,
- "version": "string"
}, - "grade": "string",
- "grades": { },
- "missing": {
- "labels": 0,
- "origins": 0,
- "packagings": 0
}, - "missing_data_warning": 0,
- "previous_data": {
- "grade": "string",
- "score": 0,
- "agribalyse": {
- "agribalyse_proxy_food_code": "string",
- "agribalyse_food_code": "string",
- "co2_agriculture": 0,
- "co2_consumption": 0,
- "co2_distribution": 0,
- "co2_packaging": 0,
- "co2_processing": 0,
- "co2_total": 0,
- "co2_transportation": 0,
- "code": "string",
- "dqr": "string",
- "ef_agriculture": 0,
- "ef_consumption": 0,
- "ef_distribution": 0,
- "ef_packaging": 0,
- "ef_processing": 0,
- "ef_total": 0,
- "ef_transportation": 0,
- "is_beverage": 0,
- "name_en": "string",
- "score": 0,
- "version": "string"
}
}, - "score": 0,
- "scores": { },
- "status": "string"
}, - "ecoscore_extended_data_version": "string",
- "environment_impact_level": "string",
- "environment_impact_level_tags": [
- { }
], - "additives_tags": [
- "string"
], - "allergens": "string",
- "allergens_lc": "string",
- "allergens_hierarchy": [
- "string"
], - "allergens_tags": [
- "string"
], - "ingredients": [
- {
- "id": "string",
- "ingredients": [ ],
- "percent": 0,
- "percent_estimate": 0,
- "percent_max": "string",
- "percent_min": 0,
- "text": "string",
- "vegan": "string",
- "vegetarian": "string"
}
], - "ingredients_analysis": {
- "en:palm-oil": [
- "string"
], - "en:vegan-status-unknown": [
- "string"
], - "en:vegetarian-status-unknown": [
- "string"
]
}, - "ingredients_analysis_tags": [
- "string"
], - "ingredients_from_or_that_may_be_from_palm_oil_n": 0,
- "ingredients_from_palm_oil_n": 0,
- "ingredients_from_palm_oil_tags": [
- { }
], - "ingredients_hierarchy": [
- "string"
], - "ingredients_n": 0,
- "ingredients_n_tags": [
- "string"
], - "ingredients_original_tags": [
- "string"
], - "ingredients_percent_analysis": 0,
- "ingredients_sweeteners_n": 0,
- "ingredients_non_nutritive_sweeteners_n": 0,
- "ingredients_tags": [
- "string"
], - "ingredients_lc": "string",
- "ingredients_text": "Farine de blé* 67,4%, sucre de canne*, huile de tournesol oléique*, graines de chia* 5,2%, son de blé*, oranges déshydratées * 0,9%, farine de riz*, poudres à lever (acide citrique, carbonates de sodium), arôme naturel d'orange.\n",
- "ingredients_text_with_allergens": "Farine de <span class=\"allergen\">blé*</span> 67,4%, sucre de canne*, huile de tournesol oléique*, graines de chia* 5,2%, <span class=\"allergen\">son de blé*</span>, oranges déshydratées * 0,9%, farine de riz*, poudres à lever (acide citrique, carbonates de sodium), arôme naturel d'orange.\n",
- "ingredients_that_may_be_from_palm_oil_n": 0,
- "ingredients_that_may_be_from_palm_oil_tags": [
- { }
], - "ingredients_with_specified_percent_n": 0,
- "ingredients_with_specified_percent_sum": 0,
- "ingredients_with_unspecified_percent_n": 0,
- "ingredients_with_unspecified_percent_sum": 0,
- "known_ingredients_n": 0,
- "origins": "string",
- "origins_hierarchy": [
- { }
], - "origins_lc": "string",
- "origins_tags": [
- { }
], - "traces": "string",
- "traces_hierarchy": [
- { }
], - "traces_lc": "string",
- "traces_tags": [
- { }
], - "unknown_ingredients_n": 0,
- "no_nutrition_data": "on",
- "nutrition_data_per": "serving",
- "nutrition_data_prepared_per": "serving",
- "nutriments": {
- "alcohol": 0,
- "carbohydrates": 0,
- "carbohydrates-total": 0,
- "energy": 0,
- "energy_value": 0,
- "energy_unit": "kcal",
- "energy-kcal": 0,
- "energy-kj": 0,
- "fat": 0,
- "fruits-vegetables-legumes-estimate-from-ingredients": 0,
- "fruits-vegetables-nuts-estimate-from-ingredients": 0,
- "nova-group": 0,
- "nutrition-score-fr": null,
- "proteins": 0,
- "salt": 0,
- "saturated-fat": 0,
- "sodium": 0,
- "sugars": 0,
- "carbon-footprint-from-known-ingredients_product": 0,
- "carbon-footprint-from-known-ingredients_serving": 0,
- "erythritol": 12.5
}, - "nutriscore_data": {
- "saturated_fat_ratio": 0,
- "saturated_fat_ratio_points": 0,
- "saturated_fat_ratio_value": 0,
- "is_beverage": 0,
- "is_cheese": 0,
- "is_water": 0,
- "is_fat": 0,
- "energy": 1996,
- "energy_points": 5,
- "energy_value": 1996,
- "fiber": 3.8,
- "fiber_points": 4,
- "fiber_value": 3.8,
- "fruits_vegetables_nuts_colza_walnut_olive_oils": 0,
- "fruits_vegetables_nuts_colza_walnut_olive_oils_points": 0,
- "fruits_vegetables_nuts_colza_walnut_olive_oils_value": 0,
- "proteins": 6.6,
- "proteins_points": 4,
- "proteins_value": 6.6,
- "saturated_fat": 6.2,
- "saturated_fat_points": 6,
- "saturated_fat_value": 6.2,
- "sodium": 210,
- "sodium_points": 2,
- "sodium_value": 210,
- "sugars": 21.5,
- "sugars_points": 4,
- "sugars_value": 21.5,
- "negative_points": 17,
- "positive_points": 4,
- "grade": "a",
- "score": 13
}, - "nutrition_grade_fr": "string",
- "nutrition_grades": "string",
- "nutrition_grades_tags": [
- "string"
], - "nutrition_score_beverage": 0,
- "nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients": 0,
- "nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients_value": 0,
- "nutrition_score_warning_no_fiber": 0,
- "other_nutritional_substances_tags": [
- { }
], - "unknown_nutrients_tags": [
- { }
], - "vitamins_tags": [
- { }
], - "nutriscore": {
- "2021": {
- "category_available": 1,
- "grade": "a",
- "nutrients_available": 1,
- "nutriscore_applicable": 1,
- "nutriscore_computed": 1,
- "score": 13,
- "data": {
- "is_beverage": 0,
- "is_cheese": 0,
- "is_water": 0,
- "is_fat": 0,
- "energy": 1996,
- "energy_points": 5,
- "energy_value": 1996,
- "fiber": 3.8,
- "fiber_points": 4,
- "fiber_value": 3.8,
- "fruits_vegetables_nuts_colza_walnut_olive_oils": 0,
- "fruits_vegetables_nuts_colza_walnut_olive_oils_points": 0,
- "fruits_vegetables_nuts_colza_walnut_olive_oils_value": 0,
- "proteins": 6.6,
- "proteins_points": 4,
- "proteins_value": 6.6,
- "saturated_fat": 6.2,
- "saturated_fat_points": 6,
- "saturated_fat_value": 6.2,
- "sodium": 210,
- "sodium_points": 2,
- "sodium_value": 210,
- "sugars": 21.5,
- "sugars_points": 4,
- "sugars_value": 21.5,
- "negative_points": 17,
- "positive_points": 4,
- "grade": "a",
- "score": 13
}
}, - "2023": {
- "category_available": 1,
- "grade": "a",
- "nutrients_available": 1,
- "nutriscore_applicable": 1,
- "nutriscore_computed": 1,
- "score": 13,
- "data": {
- "is_beverage": 0,
- "is_cheese": 0,
- "is_water": 0,
- "is_fat_oil_nuts_seeds": 0,
- "is_red_meat_product": 0,
- "components": {
- "negative": [
- {
- "id": "energy",
- "points": 5,
- "points_max": 10,
- "unit": "kJ",
- "value": 21.5
}
], - "positive": [
- {
- "id": "energy",
- "points": 5,
- "points_max": 10,
- "unit": "kJ",
- "value": 21.5
}
]
}, - "count_proteins": 0,
- "count_proteins_reason": "negative_points_greater_than_or_equal_to_11",
- "negative_points": 19,
- "positive_points": 1,
- "negative_points_max": 55,
- "positive_points_max": 10,
- "positive_nutrients": [
- "fiber",
- "fruits_vegetables_legumes"
]
}
}
}, - "nutriscore_2021_tags": [
- "d"
], - "nutriscore_2023_tags": [
- "d"
], - "nutriscore_grade": "a",
- "nutriscore_score": 13,
- "nutriscore_score_opposite": -13,
- "nutriscore_tags": [
- "d"
], - "nutriscore_version": "string",
- "data_quality_bugs_tags": [
- "string"
], - "data_quality_errors_tags": [
- "string"
], - "data_quality_info_tags": [
- "string"
], - "data_quality_tags": [
- "string"
], - "data_quality_warnings_tags": [
- "string"
], - "data_sources": "string",
- "data_sources_tags": [
- "string"
], - "last_check_dates_tags": [
- "string"
], - "last_checked_t": 0,
- "last_checker": "string",
- "states": "string",
- "states_hierarchy": [
- "string"
], - "states_tags": [
- "string"
], - "misc_tags": [
- "string"
], - "additives_original_tags": [
- "string"
], - "additives_prev_original_tags": [
- "string"
], - "added_countries_tags": [
- { }
], - "allergens_from_ingredients": "string",
- "allergens_from_user": "string",
- "amino_acids_prev_tags": [
- { }
], - "amino_acids_tags": [
- { }
], - "carbon_footprint_percent_of_known_ingredients": 0,
- "categories_properties": {
- "agribalyse_food_code:en": "string",
- "agribalyse_proxy_food_code:en": "string",
- "ciqual_food_code:en": "string"
}, - "categories_properties_tags": [
- "string"
], - "category_properties": {
- "property1": "string",
- "property2": "string"
}, - "ciqual_food_name_tags": [
- "string"
], - "compared_to_category": "string",
- "conservation_conditions": "string",
- "customer_service": "string",
- "expiration_date": "string",
- "link": "string",
- "main_countries_tags": [
- { }
], - "minerals_prev_tags": [
- { }
], - "minerals_tags": [
- { }
], - "owner_fields": {
- "additionalProperties": 0
}, - "nova_groups_markers": {
- "property1": [
- [
- "string"
]
], - "property2": [
- [
- "string"
]
]
}, - "nucleotides_tags": [
- { }
], - "origin": "string",
- "purchase_places": "Paris",
- "purchase_places_tags": [
- "string"
], - "stores": "Walmart",
- "stores_tags": [
- "string"
], - "traces_from_ingredients": "string",
- "traces_from_user": "string",
- "created_t": 1457680652,
- "creator": "string",
- "editors_tags": [
- "string"
], - "informers_tags": [
- "string"
], - "interface_version_created": "string",
- "interface_version_modified": "string",
- "languages": { },
- "languages_codes": { },
- "languages_hierarchy": [
- "string"
], - "languages_tags": [
- "string"
], - "last_edit_dates_tags": [
- "string"
], - "last_editor": "string",
- "last_modified_by": "sebleouf",
- "last_modified_t": 0,
- "last_updated_t": 0,
- "owner": "string",
- "owners_tags": "string",
- "photographers_tags": [
- "string"
], - "rev": 0,
- "sources": [
- {
- "fields": [
- "string"
], - "id": "string",
- "images": [
- { }
], - "import_t": 0,
- "manufacturer": 0,
- "name": "string",
- "source_licence": "string",
- "source_licence_url": "string",
- "url": null
}
], - "sources_fields": {
- "org-gs1": {
- "gln": "string",
- "gpcCategoryCode": "string",
- "gpcCategoryName": "string",
- "isAllergenRelevantDataProvided": "string",
- "lastChangeDateTime": "string",
- "partyName": "string",
- "productionVariantDescription": "string",
- "publicationDateTime": "string"
}
}, - "teams": "string",
- "teams_tags": [
- "string"
], - "update_key": "string",
- "knowledge_panels": {
- "additionalProperties": "string"
}, - "attribute_groups": [
- {
- "id": "string",
- "status": "known",
- "title": "Does not contain: Molluscs",
- "match": 100,
- "grade": "unknown",
- "name": "string",
- "icon_url": "string",
- "description": "string",
- "description_short": "string"
}
]
}| lc | string 2 letter code of the language of the interface. Used for localizing some fields in returned values (e.g. knowledge panels). If not passed, the language may be inferred by the country of the user (passed through the cc field or inferred by the IP address). Full list at https://static.openfoodfacts.org/data/taxonomies/languages.json |
| cc | string 2 letter code of the country of the user. Used for localizing some fields in returned values (e.g. knowledge panels). If not passed, the country may be inferred by the IP address of the request. Full list at https://static.openfoodfacts.org/data/taxonomies/countries.json |
{- "lc": "fr",
- "cc": "fr"
}A tag entry, that will be matched against a taxonomy (e.g. a category, a label)
The entry is a string that can contain either:
All entries will be matched to the corresponding taxonomy. It is possible to specify values that do not exist yet in the taxonomy. They may later be added as new taxonomy entries, or as new translations or synonyms of an existing entry.
"string"| id | string Canonical id of the entry in the taxonomy. If the value cannot be mapped to a taxonomy entry, the value must be the name of the entry in its original language prefixed by the language 2 letter code and a colon. |
{- "lc_name": "string",
- "id": "string"
}| id | string Canonical id of the entry in the taxonomy. If the value cannot be mapped to a taxonomy entry, the value must be the name of the entry in its original language prefixed by the language 2 letter code and a colon. |
{- "lc_name": "string",
- "id": "string"
}| id | string Canonical id of the entry in the taxonomy. If the value cannot be mapped to a taxonomy entry, the value must be the name of the entry in its original language prefixed by the language 2 letter code and a colon. |
{- "lc_name": "string",
- "id": "string"
}| number_of_units | integer Number of units of this packaging component contained in the product (e.g. 6 for a pack of 6 bottles) |
shape-write (object) or shape-write (object) (shape-write) The shape property is canonicalized using the packaging_shapes taxonomy. | |
material-write (object) or material-write (object) (material-write) The material property is canonicalized using the packaging_materials taxonomy. | |
recycling-write (object) or recycling-write (object) (recycling-write) The recycling property is canonicalized using the packaging_recycling taxonomy. | |
| quantity_per_unit | string Quantity (weight or volume) of food product contained in the packaging component. (e.g. 75cl for a wine bottle) |
| weight_specified | number or string Weight (as specified by the manufacturer) of one unit of the empty packaging component (in grams). (e.g. for a 6 pack of 1.5l water bottles, it might be 30, the weight in grams of 1 empty water bottle without its cap which is a different packaging component). If passed a string - possibly with an unit - it will be converted to a number. |
| weight_measured | number or string Weight (as measured by one or more users) of one unit of the empty packaging component (in grams). (e.g. for a 6 pack of 1.5l water bottles, it might be 30, the weight in grams of 1 empty water bottle without its cap which is a different packaging component). If passed a string - possibly with an unit - it will be converted to a number. |
| brands | string A comma separated list of brands / product names for the packaging component (e.g. "Tetra Pak", Tetra Brik" |
| labels | string A comma separated list of labels, canonicalized with the packaging_labels taxonomy (e.g. "en:FSC, fr:Encre végétale") |
{- "number_of_units": 6,
- "shape": {
- "id": "en:bottle"
}, - "material": {
- "id": "en:plastic"
}, - "recycling": {
- "id": "en:recycle"
}, - "quantity_per_unit": "25 cl",
- "weight_measured": 10
}| number_of_units | integer Number of units of this packaging component contained in the product (e.g. 6 for a pack of 6 bottles) |
shape-write (object) or shape-write (object) (shape-write) The shape property is canonicalized using the packaging_shapes taxonomy. | |
material-write (object) or material-write (object) (material-write) The material property is canonicalized using the packaging_materials taxonomy. | |
recycling-write (object) or recycling-write (object) (recycling-write) The recycling property is canonicalized using the packaging_recycling taxonomy. | |
| quantity_per_unit | string Quantity (weight or volume) of food product contained in the packaging component. (e.g. 75cl for a wine bottle) |
| weight_specified | number or string Weight (as specified by the manufacturer) of one unit of the empty packaging component (in grams). (e.g. for a 6 pack of 1.5l water bottles, it might be 30, the weight in grams of 1 empty water bottle without its cap which is a different packaging component). If passed a string - possibly with an unit - it will be converted to a number. |
| weight_measured | number or string Weight (as measured by one or more users) of one unit of the empty packaging component (in grams). (e.g. for a 6 pack of 1.5l water bottles, it might be 30, the weight in grams of 1 empty water bottle without its cap which is a different packaging component). If passed a string - possibly with an unit - it will be converted to a number. |
| brands | string A comma separated list of brands / product names for the packaging component (e.g. "Tetra Pak", Tetra Brik" |
| labels | string A comma separated list of labels, canonicalized with the packaging_labels taxonomy (e.g. "en:FSC, fr:Encre végétale") |
[- {
- "number_of_units": 6,
- "shape": {
- "id": "en:bottle"
}, - "material": {
- "id": "en:plastic"
}, - "recycling": {
- "id": "en:recycle"
}, - "quantity_per_unit": "25 cl",
- "weight_measured": 10
}
]| categories_tags | Array of strings (Input taxonomy tag) An array of categories tag entries that will replace existing categories |
| categories_tags_add | Array of strings (Input taxonomy tag) An array of categories tag entries that will be added to existing categories |
Array of objects (packagings-write) The packagings object is an array of individual packaging component objects. The Packaging data document explains how packaging data is structured in Open Food Facts: https://openfoodfacts.github.io/openfoodfacts-server/dev/explain-packaging-data/ | |
Array of objects (packagings-write) The packagings object is an array of individual packaging component objects. The Packaging data document explains how packaging data is structured in Open Food Facts: https://openfoodfacts.github.io/openfoodfacts-server/dev/explain-packaging-data/ | |
| packagings_complete | integer (packagings_complete) [ 0 .. 1 ] Indicate if the packagings array contains all the packaging parts of the product. This field can be set by users when they enter or verify packaging data. Possible values are 0 or 1. |
| lang | string = 2 characters 2 letter language code of the main language of the product (the most prominent on the packaging) |
| quantity | string |
| serving_size | string |
object | |
| categories_tags_(?<language_code>\w\w) pattern property | Array of strings (Input taxonomy tag) An array of categories tag entries that will replace existing categories, with a default language code |
| categories_tags_(?<language_code>\w\w)_add pattern property | Array of strings (Input taxonomy tag) An array of categories tag entries that will be added to existing categories, with a default language code |
{- "categories_tags": [
- "string"
], - "categories_tags_add": [
- "string"
], - "packagings": [
- {
- "number_of_units": 6,
- "shape": {
- "id": "en:bottle"
}, - "material": {
- "id": "en:plastic"
}, - "recycling": {
- "id": "en:recycle"
}, - "quantity_per_unit": "25 cl",
- "weight_measured": 10
}
], - "packagings_add": [
- {
- "number_of_units": 6,
- "shape": {
- "id": "en:bottle"
}, - "material": {
- "id": "en:plastic"
}, - "recycling": {
- "id": "en:recycle"
}, - "quantity_per_unit": "25 cl",
- "weight_measured": 10
}
], - "packagings_complete": 1,
- "lang": "fr",
- "quantity": "string",
- "serving_size": "string",
- "images": {
- "selected": {
- "front": { },
- "ingredients": { },
- "nutrition": { },
- "packaging": { }
}
}
}