Programmatic access to product passports — for webshop/ERP sync and bulk automation.
From the Pro plan
Every request authenticates with an API key, in the Authorization header:
Authorization: Bearer vk_<your key>
You create a key under Settings → Developer API. The plaintext key is shown only once, at creation — store it safely. The key grants read/write access to all products in your account, so keep it confidential.
For GET requests you can try it directly in the browser, without a header — pass the key as the ?api_key= parameter:
https://veridyn.eu/api/v1/categories?api_key=vk_<your key>
⚠️ For testing only. A key placed in the URL ends up in browser history and server logs, so in production always use the Authorization: Bearer header. POST/PATCH can only be called with a header (curl/Postman).
https://veridyn.eu/api/v1
Responses are application/json, UTF-8 encoded.
| Method | Path | Description |
|---|---|---|
| GET | /categories | Available product categories. |
| GET | /schema/{category} | The category's full field list — required + optional, type, enum, localized fields. |
| GET | /products | List of products (summary). Parameters: q, status, page, limit. |
| POST | /products | New product passport. Body: { category, data }. |
| GET | /products/{id} | A product's full data + passport URL. |
| PATCH | /products/{id} | Update (partial) — creates a new version. Body: { data }. |
| GET | /products/{id}/qr | QR code (SVG) for the public passport. |
Every category has a required core — without it, schema validation rejects the request (422). All other fields are optional, but you can send them in the same data object anytime (more data = a better passport and more future-proof compliance). The exact, machine-readable field list is returned by /schema/{category} — with required: true/false, type, enum and localized markers.
curl https://veridyn.eu/api/v1/schema/textile \
-H "Authorization: Bearer vk_<key>"
✓ = required · — = optional · ↳ nested sub-field · 🌐 per-language (localized) · 🔒 visible only at authority level. This list is generated from the schema — always up to date.
| Field | Type | Req. | Description |
|---|---|---|---|
productName | string | ✓ | Product name — A termék neve, ahogy a vásárló a passporton látni fogja. |
sku | string | ✓ | SKU — Belső cikkszám / azonosító — a te rendszeredből. |
brandName | string | ✓ | Brand |
gtin | string | — | GTIN (optional) — A vonalkód száma (GTIN-8/12/13/14). Az ellenőrzőszámot a rendszer validálja. Ha nincs, hagyd üresen. |
economicOperator | object | ✓ | Economic operator |
↳ role | string (enum) | ✓ | Role — Ki teszi a terméket az EU-piacra és felel érte. A legtöbb gyártónál: Gyártó. (manufacturer · importer · authorized_representative · distributor · dealer · fulfilment_service_provider) |
↳ legalName | string | ✓ | Legal name |
↳ address | string | ✓ | Address |
↳ country | string | ✓ | Country (ISO 3166-1 alpha-2) — Kétbetűs ISO országkód, nagybetűvel — pl. HU, DE, IT |
↳ contactEmail | string | ✓ | Contact email — Ide fordulhat a vásárló vagy a hatóság. |
↳ operatorId | string | — | Unique operator ID (GS1 GLN) — 13 jegyű GS1 GLN — EU DPP egyedi gazdasági szereplő-azonosító. Ha nincs, hagyd üresen. |
↳ eori 🔒 | string | — | EORI number — A gazdasági szereplő EORI-száma (vám / EU DPP-nyilvántartási azonosító) — a registry ez alapján azonosít. Csak hatósági hozzáférési szinten látszik. Ha nincs, hagyd üresen. |
languages | array[string] | ✓ | Languages (BCP-47) — Mely nyelveken jelenjen meg a passport. A lokalizált mezőket (ápolás, életciklus) minden itt felsorolt nyelven ki kell tölteni. pl. hu, en |
fiberComposition | array[object] | ✓ | Fibre composition — Miből készült a termék. A százalékok összege pontosan 100 legyen. pl. pamut 95 + elasztán 5 |
↳ fiber | string | ✓ | Fibre |
↳ percentage | number | ✓ | Percentage |
recycledContentPercentage | number | — | Recycled content (%) — Az újrahasznosított anyag aránya a termékben. Ha nem releváns, hagyd üresen. |
countryOfManufacture | string | ✓ | Country of manufacture (ISO) — Ahol a végtermék készült. Kétbetűs ISO kód, pl. PT, TR, HU |
supplyChainStages | array[object] | — | Supply chain stages — Hol készült melyik munkafázis (fonás, szövés, festés, összeszerelés…). Opcionális, de növeli a bizalmat. |
↳ stage | string (enum) | ✓ | Stage (spinning · weaving · knitting · dyeing · finishing · assembly) |
↳ country | string | ✓ | Country (ISO) |
↳ facilityName | string | — | Facility name |
↳ facilityId | string | — | Unique facility ID (GS1 GLN) |
careInstructions 🌐 | object | ✓ | Care instructions — Mosás, szárítás, vasalás — nyelvenként egy-egy szöveg. |
repair | object | ✓ | Repairability — Javítható-e, és hogyan. A „javítható” és „alkatrész elérhető” mezők kötelezőek. |
↳ repairable | boolean | ✓ | Repairable |
↳ instructions 🌐 | object | — | Repair instructions — Hogyan javítható — nyelvenként (opcionális). |
↳ sparePartsAvailable | boolean | ✓ | Spare parts available (e.g. button, zip) |
substancesOfConcern | array[object] | — | Substances of concern — Aggályos anyagok (pl. REACH SVHC), ha a termékben jelen vannak. A legtöbb terméknél üresen hagyható. |
↳ name | string | ✓ | Name |
↳ casNumber | string | — | CAS number |
↳ concentrationRange | string | — | Concentration range |
durability | object | — | Durability — Tartóssági adatok, ha van mérésed (opcionális). |
↳ testResults | string | — | Test results |
↳ pefScore | number | — | PEF score — Product Environmental Footprint pontszám, ha van. (opcionális) |
carbonFootprint | number | — | Carbon footprint (kg CO₂e) — A termék teljes szénlábnyoma kg CO₂-egyenértékben. Az „Impact” témában „≈ km autóval” összevetéssel jelenik meg. |
waterFootprint | number | — | Water footprint (litres) — A gyártáshoz felhasznált víz mennyisége literben. Opcionális. |
weightGrams | number | — | Weight (grams) — A termék tömege grammban. Opcionális. |
endOfLife | object | ✓ | End of life — Mi legyen a termékkel a használat után — nyelvenként kitöltve. |
↳ recyclingInstructions 🌐 | object | ✓ | Recycling instructions — Hogyan hasznosítható újra — nyelvenként. |
↳ disposalInstructions 🌐 | object | ✓ | Disposal instructions — Ha nem újrahasznosítható — nyelvenként. |
complianceDocuments | array[object] | — | Compliance documents — Tanúsítványok, megfelelőségi dokumentumok linkjei (opcionális). pl. OEKO-TEX, GOTS. |
↳ type | string | ✓ | Type |
↳ url | string | ✓ | URL |
| Field | Type | Req. | Description |
|---|---|---|---|
productName | string | ✓ | Product name — Az akkumulátor neve, ahogy a vásárló a passporton látni fogja. |
sku | string | ✓ | SKU — Belső cikkszám / azonosító — a te rendszeredből. |
brandName | string | ✓ | Brand |
gtin | string | — | GTIN (optional) — A vonalkód száma (GTIN-8/12/13/14). Az ellenőrzőszámot a rendszer validálja. Ha nincs, hagyd üresen. |
economicOperator | object | ✓ | Economic operator |
↳ role | string (enum) | ✓ | Role — Ki teszi a terméket az EU-piacra és felel érte. A legtöbb gyártónál: Gyártó. (manufacturer · importer · authorized_representative · distributor · dealer · fulfilment_service_provider) |
↳ legalName | string | ✓ | Legal name |
↳ address | string | ✓ | Address |
↳ country | string | ✓ | Country (ISO 3166-1 alpha-2) — Kétbetűs ISO országkód, nagybetűvel — pl. HU, DE, IT |
↳ contactEmail | string | ✓ | Contact email — Ide fordulhat a vásárló vagy a hatóság. |
↳ operatorId | string | — | Unique operator ID (GS1 GLN) — 13 jegyű GS1 GLN — EU DPP egyedi gazdasági szereplő-azonosító. Ha nincs, hagyd üresen. |
↳ eori 🔒 | string | — | EORI number — A gazdasági szereplő EORI-száma (vám / EU DPP-nyilvántartási azonosító) — a registry ez alapján azonosít. Csak hatósági hozzáférési szinten látszik. Ha nincs, hagyd üresen. |
languages | array[string] | ✓ | Languages (BCP-47) — Mely nyelveken jelenjen meg a passport. A lokalizált mezőket (biztonság, életciklus) minden itt felsorolt nyelven ki kell tölteni. pl. hu, en |
batteryCategory | string (enum) | ✓ | Battery category — Az (EU) 2023/1542 szerinti kategória. A kötelező útlevél elsőként az EV, az ipari (>2 kWh) és az LMT akkukra vonatkozik (2027. február 18.). (portable · lmt · ev · industrial · sli) |
cellChemistry | string (enum) | ✓ | Cell chemistry — Az akkumulátor cellakémiai típusa. (nmc · nca · lfp · lmo · lto · nimh · lead_acid · sodium_ion …) |
weightKg | number | — | Weight (kg) — Az akkumulátor tömege kilogrammban. |
countryOfManufacture | string | — | Country of manufacture (ISO) — Ahol az akku készült. Kétbetűs ISO kód, pl. DE, HU, CN |
manufacturingDate | string | — | Manufacturing date / year — A gyártás éve vagy év-hónapja, ISO formátumban: ÉÉÉÉ, ÉÉÉÉ-HH vagy ÉÉÉÉ-HH-NN. |
ratedCapacity | number | ✓ | Rated capacity (Ah) — Névleges kapacitás amperóra (Ah). |
energyWh | number | — | Energy (Wh) — Teljes energiatartalom wattórában (Wh). Opcionális. |
nominalVoltage | number | — | Nominal voltage (V) — Névleges feszültség voltban. Opcionális. |
expectedLifetimeCycles | number | — | Expected lifetime (charge cycles) — A garantált / várható teljes töltési ciklusok száma. Opcionális. |
stateOfHealth 🔒 | number | — | State of Health (%) — Az akku egészségi állapota az eredeti kapacitás %-ában (új akkunál 100). DARAB-SPECIFIKUS és dinamikus — ideális helye az egység-szint (nem a modell-template). Opcionális. |
carbonFootprint | number | — | Carbon footprint (kg CO₂e / kWh) — Az akku teljes életciklusra vetített szénlábnyoma, kg CO₂-egyenérték per kWh teljes energia. |
carbonFootprintClass | string | — | Carbon footprint class (A–G) — A rendelet szerinti CF-teljesítményosztály, ha rendelkezésre áll. Opcionális. |
carbonFootprintStudyUrl | string | — | Carbon footprint study (URL) — A szénlábnyom-számítás alapjául szolgáló tanulmány / dokumentáció linkje (a CF-delegált aktus szerint). Opcionális. |
carbonFootprintBreakdown | array[object] | — | Carbon footprint by lifecycle stage — A szénlábnyom megbontása életciklus-szakaszokra (kg CO₂e / kWh) — a CF-delegált aktus ezt várja. Opcionális. |
↳ stage | string (enum) | ✓ | Lifecycle stage (raw_material · main_production · distribution · recycling) |
↳ value | number | ✓ | Value (kg CO₂e / kWh) |
recycledContent | array[object] | — | Recycled raw-material content — Az újrahasznosított kritikus nyersanyagok aránya anyagonként (kobalt, lítium, nikkel, ólom). Opcionális, de a rendelet egyre szigorúbban várja. |
↳ material | string (enum) | ✓ | Material (cobalt · lithium · nickel · lead) |
↳ percentage | number | ✓ | Recycled share (%) |
hazardousSubstances | array[object] | — | Hazardous substances — Az akkuban jelen lévő veszélyes anyagok (a higany, kadmium, ólom felett). A legtöbb adatlapnál releváns. |
↳ name | string | ✓ | Name |
↳ casNumber | string | — | CAS number |
↳ concentrationRange | string | — | Concentration range |
safetyInformation 🌐 | object | — | Safety information — Kezelési, tárolási és vészhelyzeti tudnivalók — nyelvenként egy-egy szöveg. |
dueDiligenceUrl 🔒 | string | — | Supply chain due diligence report (URL) — A rendelet szerinti due diligence (átvilágítási) szabályzat/jelentés linkje. Jogos érdekű felek hozzáférési szint (Art. 77(4)) — nem publikus. Opcionális. |
endOfLife | object | ✓ | End of life — Gyűjtés, újrahasznosítás, szétszerelés — nyelvenként kitöltve. |
↳ recyclingInstructions 🌐 | object | ✓ | Collection / recycling — Hová vihető vissza, hogyan hasznosítható újra — nyelvenként. |
↳ disposalInstructions 🌐 | object | ✓ | Disposal / warnings — Tilalmak, veszélyek — nyelvenként. |
complianceDocuments | array[object] | — | Compliance documents — Tanúsítványok, megfelelőségi és teszt-dokumentumok linkjei (opcionális). pl. CE, UN 38.3. |
↳ type | string | ✓ | Type |
↳ url | string | ✓ | URL |
The languages field (e.g. ["hu","en"]) declares which languages have free-text content. The localized fields (care, end-of-life… — "localized": true in /schema) must be filled only in the first (primary) language; the rest are optional, falling back to an available language if missing. The passport's UI labels are translated to 24 languages automatically, independently of this.
curl -X POST https://veridyn.eu/api/v1/products \
-H "Authorization: Bearer vk_<key>" \
-H "Content-Type: application/json" \
-d '{
"category": "textile",
"data": {
"productName": "Bio pamut póló",
"sku": "TEE-001",
"brandName": "Lumora",
"languages": ["hu","en"],
"fiberComposition": [{"fiber":"pamut","percentage":100}],
"countryOfManufacture": "PT",
"careInstructions": {"hu":"Mosás 30 °C","en":"Wash at 30 °C"},
"repair": {"repairable": true, "sparePartsAvailable": false},
"endOfLife": {
"recyclingInstructions": {"hu":"Textilgyűjtő","en":"Textile bin"},
"disposalInstructions": {"hu":"Ne a kukába","en":"Not household waste"}
},
"economicOperator": {
"role":"manufacturer","legalName":"Lumora Kft.","address":"Budapest",
"country":"HU","contactEmail":"hello@lumora.hu"
}
}
}'
Response (201):
{
"data": {
"id": "a1993ef7-7562-43bb-92ff-eb63f02dcde9",
"category": "textile",
"status": "active",
"version_no": 1,
"passport_url": "https://veridyn.eu/<account>/p/a1993ef7-…",
"qr_url": "https://veridyn.eu/api/v1/products/a1993ef7-…/qr",
"data": { "productName": "Bio pamut póló", … }
}
}
curl https://veridyn.eu/api/v1/products?limit=25 \
-H "Authorization: Bearer vk_<key>"
curl https://veridyn.eu/api/v1/products/{id} \
-H "Authorization: Bearer vk_<key>"
curl -X PATCH https://veridyn.eu/api/v1/products/{id} \
-H "Authorization: Bearer vk_<key>" \
-H "Content-Type: application/json" \
-d '{"data": {"recycledContentPercentage": 30}}'
The provided fields are merged onto the existing data (partial update), then validated, and a new, retained version is created — the full change history is preserved.
Success: the payload is under the data key. On error:
{ "error": "Invalid data.", "code": "validation", "errors": [ … ] }
| HTTP | code | Meaning |
|---|---|---|
| 401 | unauthorized | Missing/invalid API key. |
| 403 | plan_required | The API is available from the Pro plan. |
| 404 | not_found | No such product / route. |
| 409 | gtin_taken | The GTIN is already taken. |
| 422 | validation | Invalid data (details in errors). |
Under Settings → Webhooks you register an HTTPS URL. When a product passport is created / updated / archived, Veridyn POSTs a signed JSON to that URL — so your system is notified in real time, without polling.
product.created · product.updated · product.archived · product.restored
POST https://your-system.example/veridyn-webhook
Content-Type: application/json
X-Veridyn-Event: product.updated
X-Veridyn-Signature: sha256=<hmac>
{
"event": "product.updated",
"data": { "id": "a1993ef7-…", "category": "textile", "version_no": 2 },
"sent_at": "2026-07-02T13:19:11+00:00"
}
The X-Veridyn-Signature is the HMAC-SHA256 of the raw body with the webhook secret (shown in Settings). Verify it — e.g. in PHP:
$body = file_get_contents('php://input');
$expected = 'sha256=' . hash_hmac('sha256', $body, $secret);
if (!hash_equals($expected, $_SERVER['HTTP_X_VERIDYN_SIGNATURE'] ?? '')) {
http_response_code(401); exit; // invalid signature}
Respond with a 2xx status. Delivery is best-effort (short timeout); the status of the last delivery is shown in Settings.
/schema/{category} endpoint. Currently available: textile and battery. The schema grows as the EU finalises categories.