e-label information
Introduction
Electronic labeling, or e-labels, for wine and spirits is governed by EU Regulation 2019/787, which is also known as the "Wine Act". This regulation sets the rules for the production, presentation, and labeling of wine, including the use of e-labels. In addition, the EU Regulation 1169/2011 (Food Information to Consumers Regulation or FIC Regulation) also sets the requirements for labeling.
e-labels appear on product packaging or on digital marketing materials and must contain all of the legally required information about a product, including, the product name or brand, volume, alcohol content, ingredients, and allergen information. The e-label format must comply with the EU regulations for food and beverage labeling, including the requirements for font size, language, and legibility.
There are 2 ways e-labels can be managed in Scantrust
- Edit e-label data in the scantrust portal under the products > e-label page
- Upload the e-label data for each product with the Scantrust e-label JSON API
The below process describes how to upload and download e-label data using the Scantrust REST Api. Because e-label data is set on the product, you will need a UAT token with the same minimum permissions as for managing products:
product_create
product_delete
product_edit
product_view
The UAT token must be set in the header fields of all requests as described in Authentication & Tokens.
API Design
POST: /api/v2/products/{product_id}/elabel/
Sets all e-label JSON data for a product
Response (201): Status CREATED
{
"name": "black-deer-cb-2018", // product name
"data": {
"editor": { ... },
"published": { ... }
}
}
Note that a complete JSON object needs to be posted each time an e-label is updated. This endpoint does not support partial updates of the JSON.
For an example of a full set of data to POST for the editor section, see JSON example here
GET: /api/v2/products/{product_id}/elabel/
Returns all e-label JSON data for a product
Response (200): Status OK
Example JSON:
{
"id": 1272,
"company": 7583,
"name": "black-deer-cb-2018",
"data": {
"editor": {
"type": "wine",
"theme": { "primary": "#F01515", "background": "#D8D790", "alcoholColor": "#890022" },
"footer": { "first_line": "", "second_line": "" },
"header": { "logo": "", "title": "E-Label" },
"default_country": "",
"default_language": "en",
"reviewed_languages": ["en"],
"available_languages": ["en"],
"enforce_language_per_country": false,
"sections": [
{ "key": "product-infos" },
{ "key": "geographical-indications" },
{ "key": "serving-infos" },
{ "key": "ingredients" },
{ "key": "allergens" },
{ "key": "nutrition" },
{ "key": "responsible-consumption" },
{ "key": "sustainability" },
{ "key": "business-operator" },
{ "key": "brand-infos" }
],
... (JSON objects for each of the above sections)
An e-label JSON contains 2 set of the e-label data at all time.
editor
: draft version of the data, the data that you see in when using the e-label management tool.published
: Live data. What consumer see when they open an e-label landing page.
The elabel JSON consists of a set of generic fields and 10 sections each with its own JSON object:
Generic Fields
type
: wine or spirittheme
: sets theprimary
,background
andalcoholColor
of the landing pagefooter
: sets the text for thefirst_line
andsecond_line
of the e-label footerheader
: sets thelogo
andtitle
(default: "E-Label")default_country
: sets the data for the country to be shown when an e-label is scanned in a non-EU countrydefault_language
: sets the default language (default: English)reviewed_languages
: array of reviewed language (not necessary when uploading through the API)available_languages
: array of available languages to choose from as a userenforce_language_per_country
: forces a fixe language for each country (default: false)
Section Objects
- Product Information
product-infos
- Geographic Indications
geographical-indications
- Serving Information
serving-infos
- Ingredients
ingredients
- Allergens
allergens
- Nutrition Table
nutrition
- Responsible Consumption Message
responsible-consumption
- Sustainability Certifications
sustainability
- Business Operators (country specific)
business-operator
- Branding Info
brand-info
Each section contains variable information inluding country-specific data and translations. These translations each have a two-character ISO country code as a key.
product-infos
wine type
and sales_description
fields can contain translations
"product-infos": {
"type": {
"bg": "Трапезно вино",
"cs": "Stolní víno",
"da": "Bordvin",
"de": "Tafelwein",
"el": "Επιτραπέζιο κρασί",
"en": "Table wine",
...
},
"origin": ["ZA"],
"volumes": ["750"],
"vine_variety": "Pinotage",
"vintage_year": "2020",
"wine_variety": "White Blend",
"alcohol_volume": "13",
"producing_year": "",
"wine_sweetness": "wine_sweetness_extra_dry",
"sales_description": {
"bg": "Ние сме много устойчиви",
"cs": "Jsme velmi udržitelní",
"da": "Vi er meget bæredygtige",
"de": "Wir sind sehr nachhaltig",
"el": "Είμαστε πολύ βιώσιμοι",
...
}
geographical-indications
mutiple geographical indications can apply.
"geographical-indications":
{ "list": [
{ "icon": "0", "description": "Appelation 1" }
]
},
serving-infos
unit
and serving
can be set specifically for each country
"serving-infos": {
"unit": { "FR": "CL", "default": "ML" },
"serving": { "default": 100 },
"glass_icon": "default_wine",
"bottle_icon": "default_wine"
},
ingredients
ingredients can be nested in categories and description
can have translations.
set the is_allergen
field to true
to mark an ingrdient as an allergen.
"ingredients": {
"list": [
{
"children": [],
"description": {
"bg": "Съставка 1",
"cs": "Složka 1",
"da": "Ingrediens 1",
"de": "Zutat 1",
"el": "Συστατικό 1",
"en": "Ingredient 1 ",
...
}
},
{
"description": {
"bg": "Съставка 2",
"cs": "Složka 2",
"da": "Ingrediens 2",
"de": "Zutat 2",
"el": "Συστατικό 2",
"en": "Ingredient 2",
...
}
},
{
"description": {
"bg": "Съставка 3",
"cs": "Složka 3",
"da": "Ingrediens 3",
"de": "Zutat 3",
"el": "Συστατικό 3",
"en": "Ingredient 3",
...
}
},
{
"description": {
"bg": "Съставка 4",
"cs": "Složka 4",
"da": "Ingrediens 4",
"de": "Zutat 4",
"el": "Συστατικό 4",
"en": "Ingredient 4",
...
}
},
{ "description": { "en": "Ingredient 5 only English" } },
{ "description": {
"en": "Ingredient 6 is an allergen" },
"is_allergen": true
}
]
}
allergens
description
and no_allergens_description
can have translations.
"allergens": {
"icon": 1,
"list": [],
"description": {},
"has_allergens": true,
"no_allergens_description": {}
},
nutrition
nutrition can be nested but we highly recommend just using the default structure as shown below
"nutrition": {
"table": [
{
"key": "energy",
"unit": "kJ",
"children": [{ "key": null, "unit": "kcal", "per_100ml": 72 }],
"per_100ml": 299
},
{
"key": "fat",
"unit": "g",
"children": [{ "key": "saturated_fat", "unit": "g", "per_100ml": 0 }],
"per_100ml": "1"
},
{
"key": "carbohydrate",
"unit": "g",
"children": [{ "key": "sugar", "unit": "g", "per_100ml": "1" }],
"per_100ml": "1"
},
{ "key": "protein", "unit": "g", "per_100ml": "1" },
{ "key": "salt", "unit": "g", "per_100ml": 0 }
]
},
responsible-consumption
description
can have translations.
"responsible-consumption": {
"icons": [],
"description": { "en": "Please consume alcohol responsibly" },
"custom_icons": [],
"responsible_drinking_logo": true
},
sustainability
organic_description
, recyclability_description
and certifications_description
can have translations
"sustainability": {
"custom_icons": [],
"organic_icons": [],
"organic_description": { "en": "Organic Wine" },
"recyclability_icons": [{ "key": "3" }],
"certifications_icons": [],
"recyclability_description": {},
"certifications_description": { "en": "Test Sustainability Certification" }
},
business-operator
bottled_by
, imported_by
and imported_by
can all be set specific to a country
"business-operator": {
"bottled_by": { "AT": "", "BE": "", "BG": "", "default": "Company B" },
"imported_by": { "AT": "Company D", "default": "Company C" },
"imported_by": { "default": "Company A" }
},
brand-info
description
can have translations.
"brand-infos": {
"link": "https://www.scantrust.com",
"image": "",
"text_color": "#FFFFFF",
"description": { "en": "Here is a Brand text" }
}