Access and keys
Every store gets its own key: ma- followed by 32 characters. Send it in the X-Worker-Key header (or Authorization: Bearer). A key only works for the store domains that belong to it; send the domain in X-Shop-Domain.
POST /lookup HTTP/1.1
Host: api.data-enricher.com
X-Worker-Key: ma-…
X-Shop-Domain: yourstore.com
Content-Type: application/json
Every key has a monthly request limit. Answers from the cache don't count. Request a key through the contact page.
POST /lookup
Looks a product up by its EAN and returns the facts and checked photos. EAN-8, UPC-A, EAN-13 and GTIN-14 are validated including the check digit; UPC-A becomes EAN-13.
{"ean": "7333377653917", "name": "Husqvarna 550i XP", "refresh": false}
| Field | Meaning |
|---|---|
ean | Required. The product's barcode. |
name | Optional. The name in your store; helps with EANs that are unclear online. At most 128 characters. |
refresh | Optional. true searches again instead of using the cache. |
{"result": {
"ean": "7333377653917", "identified": true, "name": "Husqvarna 550i XP",
"description": "…", "specs": {"Battery voltage": "36 V"},
"images": {"in_use": ["https://…"], "product": ["https://…"]},
"sources": ["https://…"], "cached": false, "credits_used": 0, "search": "free"
}}
At most eight photos come back, "in use" first, always keeping room for at least three product photos when they exist. An error is in result.error; nothing is stored then, so you can try again later.
POST /text
Writes the product texts in a language: title, short and long description, meta title and meta description.
{"ean": "7333377653917", "name": "Husqvarna 550i XP", "language": "en", "format": "html"}
language is an ISO code: nl, en, de, fr, es, it, pt, pl, da, sv, no, fi, cs, ro, zh, ja, ru or ko. Another code falls back to English, with a warning. format is html or text.
Next to the ready-made description you get the description in parts: intro_html and sections (features, why choose it, pros, cons, what's in the box, frequently asked questions, about the brand), each with a heading in the text's language. Build your own description with the sections and order you want. details has everything as data too: specifications, properties, keywords, colors, materials and sizes.
POST /page-text
Texts for a category or brand page: a short description for the top, a long description in sections, a meta title and a meta description, with internal links to pages of your own store.
{"type": "category", "entity_id": 12, "name": "Chainsaws", "language": "en",
"path": "Garden > Chainsaws", "subcategories": ["Cordless chainsaws"],
"brands": ["Husqvarna"], "products": ["Husqvarna 550i XP"],
"links": [{"type": "subcategory", "title": "Cordless chainsaws", "url": "https://yourstore.com/cordless-chainsaws"}],
"shop_name": "Your Store"}
Links only go to the urls you send, every url at most once and at most six per text. For a brand ("type": "brand") send categories instead of subcategories and brands; the API then also searches the web for the brand.
POST /jobs
Up to twenty EANs at once, five looked up at the same time. You get a job_id back right away.
{"items": [{"ean": "7333377653917", "name": "Husqvarna 550i XP"}, {"ean": "8716637053167"}]}
Follow the progress with GET /jobs/{job_id}: status is queued, running or done, and results keeps the order of your request.
GET /usage
Your usage and limits in the current period: requests, credits and AI tokens.
Errors
| Status | Meaning |
|---|---|
| 400 | Not valid JSON. |
| 403 | Wrong key, or the store domain doesn't belong to the key. |
| 413 | The request is too large. |
| 422 | No valid EANs in a batch. |
| 429 | Too many requests, or your package limit is reached. |
Content errors, such as a product that can't be found, come back with status 200 and an error in the result.