Referencia API
Všetko v MyProductPassport je dostupné cez REST API s overením kľúčom: vytvárajte produkty, generujte a zverejňujte digitálne produktové pasy, posielajte aktuálne údaje batérií a kontrolujte súlad priamo z vášho ERP, PIM alebo build pipeline.
01 / ZačínameOverovanie
Každá požiadavka sa overuje API kľúčom odovzdaným ako Bearer token. Kľúče sa vytvárajú v aplikácii v sekcii API kľúče, zobrazia sa raz a ukladajú sa hashované; každý kľúč má vlastnú sadu oprávnení, voliteľný zoznam povolených IP a voliteľný dátum vypršania. Kľúče možno rotovať bez výpadku.
Authorization: Bearer pk_your_api_keyOprávnenia sa udeľujú pre každý kľúč zvlášť, takže integrácia dostane len to, čo potrebuje:
| Oprávnenie | Oprávnenia |
|---|---|
| products:read | Čítanie produktov |
| products:write | Vytváranie, úprava a mazanie produktov |
| passports:read | Čítanie pasov |
| passports:write | Vygenerovať pasy |
| passports:publish | Zverejňovanie a archivácia pasov |
| webhooks:manage | Vytváranie, testovanie a odstraňovanie koncových bodov webhookov |
| items:read | Read individual items and their history |
| items:write | Add, update and flag individual items |
| aftersales:read | Read owner registrations and service requests |
| aftersales:write | Update service requests and reply to customers |
02 / ZačínameLimity požiadaviek
Limity platia na kľúč, za minútu a určuje ich plán:
| Plán | Požiadaviek / minútu |
|---|---|
| Zadarmo | 30 |
| Micro | 60 |
| E-etiketa | 60 |
| Starter | 120 |
| Professional | 300 |
| Business | 600 |
| Battery | 600 |
Každá odpoveď obsahuje hlavičky X-RateLimit-Limit a X-RateLimit-Remaining. Pri prekročení limitu sa vráti 429:
{ "error": "Rate limit exceeded.", "limit": 300, "retry_after": 60 }03 / ZačínameChyby
Chyby sú vo formáte JSON s bežným stavovým kódom. Najčastejšie:
| Stav | Význam | Ukážkové telo |
|---|---|---|
| 401 | Chýbajúci, neplatný, zrušený alebo exspirovaný kľúč | {"error": "Invalid or revoked API key."} |
| 403 | Kľúču chýba oprávnenie, IP adresa nie je na zozname povolených alebo sa vyčerpal limit plánu | {"message": "API key does not have 'products:write' permission."} |
| 404 | Zdroj vo vašom pracovnom priestore neexistuje | {"message": "Not found."} |
| 422 | Overenie zlyhalo | {"message": "…", "errors": {"gtin": ["…"]}} |
| 429 | Prekročený limit požiadaviek | {"error": "Rate limit exceeded."} |
04 / ZačínameStránkovanie
Koncové body zoznamov vracajú 25 položiek na stránku so štandardnými objektmi links a meta. Odovzdajte ?page=2 na prechádzanie kolekciou.
05 / ZačínameKonektor AI asistenta (MCP)
Pripojte Claude, Cursor alebo akéhokoľvek asistenta, ktorý podporuje Model Context Protocol, a jednoducho ho požiadajte, aby zakladal výrobky, vypĺňal pasy podľa toho, čo mu poviete, a kontroloval, čo ešte chýba. Používa kľúč API s jeho oprávneniami a limitom požiadaviek. Môže vytvárať koncepty a vypĺňať polia; nikdy nič nezverejňuje, nearchivuje ani nemaže: to zostáva na vás v aplikácii.
https://myproductpassport.eu/api/mcpclaude mcp add --transport http myproductpassport https://myproductpassport.eu/api/mcp \
--header "Authorization: Bearer pk_live_your_key"{
"mcpServers": {
"myproductpassport": {
"url": "https://myproductpassport.eu/api/mcp",
"headers": { "Authorization": "Bearer pk_live_your_key" }
}
}
}{
"mcpServers": {
"myproductpassport": {
"command": "npx",
"args": ["mcp-remote", "https://myproductpassport.eu/api/mcp", "--header", "Authorization: Bearer pk_live_your_key"]
}
}
}Ponúkané nástroje:
| Nástroj | Čo robí |
|---|---|
| list_products | Výrobky pracovného priestoru od najnovších, 25 na stranu, so sektorom a najnovším pasom. |
| get_product | Jeden výrobok s údajmi, sektorom, regulačnými sekciami a najnovším pasom. |
| list_sectors | Šablóny sektorov, ktoré môže výrobok použiť (textil, elektronika, batérie, víno a ďalšie), s ich ID. Sektor výrobku určuje, ktoré polia pasu sú povinné. |
| create_product | Pridá výrobok do pracovného priestoru. Použite sector_id z list_sectors. compliance_sections pridá do pasu regulačné sekcie: gpsr, epr, france, chemicals, eudr. |
| list_passports | Pasy pracovného priestoru od najnovších, 25 na stranu, so stavom (draft, published, archived), percentom úplnosti a verejnou adresou. |
| get_passport | Jeden pas: stav, verzia, percento úplnosti, verejná adresa a odkazy na QR kód. |
| create_passport | Vytvorí koncept pasu pre výrobok. Nezverejní sa: zverejní ho človek v aplikácii. |
| get_passport_fields | Čo pas vyžaduje: kľúče povinných a voliteľných polí, význam každého (označenie, popis, príklad), existujúce hodnoty a chýbajúce povinné polia. |
| update_passport_fields | Zapíše hodnoty polí do konceptu alebo zverejneného pasu (zverejnený sa aktualizuje na mieste: rovnaká adresa, rovnaký QR kód). Kľúče z get_passport_fields; prázdny text hodnotu odstráni. Zapisujte len fakty, ktoré uvádza používateľ alebo jeho dokumenty. |
| get_compliance | Úplnosť pasu: percento, stav a povinné polia, ktoré ešte chýbajú. |
06 / Koncové bodyÚčet
/me
Vráti overený účet, jeho úroveň predplatného a koľko z limitu produktov je využité. Užitočné ako test pripojenia.
curl https://myproductpassport.eu/api/v1/me \
-H "Authorization: Bearer pk_your_key"{
"data": {
"id": 42,
"name": "Jane Doe",
"email": "[email protected]",
"company_name": "Acme Ltd",
"subscription_tier": "professional",
"product_count": 128,
"product_limit": 500,
"passport_count": 96,
"organization": {"id": 7, "name": "Acme Ltd"},
"api_key": {"name": "ERP sync", "permissions": ["*"], "rate_limit_per_minute": 1000, "expires_at": null},
"webhooks_available": true
}
}07 / Koncové bodyProdukty
/products
vyžaduje products:read Vypíše produkty vo vašom pracovnom priestore od najnovších, 25 na stránku. Každý produkt obsahuje svoj sektor a zhrnutie najnovšieho pasu.
| Parameter | Typ | Opis | |
|---|---|---|---|
| page | integer | Číslo stránky. |
curl "https://myproductpassport.eu/api/v1/products?page=1" \
-H "Authorization: Bearer pk_your_key"{
"data": [
{
"id": 512,
"name": "Alpine Merino Crew Sweater",
"sku": "AM-CREW-01",
"gtin": "05012345678900",
"brand": "Northloom",
"category": "textiles",
"status": "active",
"country_of_origin": "PT",
"weight": 0.4,
"weight_unit": "kg",
"materials": [
{ "name": "Merino wool (RWS)", "percentage": 78 },
{ "name": "Recycled nylon (GRS)", "percentage": 20 },
{ "name": "Elastane", "percentage": 2 }
],
"sector": { "id": 3, "name": "Textiles" },
"latest_passport": {
"id": 96, "version": 1,
"status": "published", "compliance_percentage": 100
},
"created_at": "2026-08-14T09:21:00+00:00",
"updated_at": "2026-09-01T16:02:11+00:00"
}
],
"links": { "next": null },
"meta": { "current_page": 1, "per_page": 25, "total": 1 }
}/products
vyžaduje products:write Vytvorí jeden produkt. Ak je limit produktov plánu vyčerpaný, vráti 403.
| Parameter | Typ | Opis | |
|---|---|---|---|
| name | string | povinné | Názov produktu, až 255 znakov. |
| sku | string | Vaše interné SKU, až 100 znakov. | |
| gtin | string | GTIN-8, 12, 13 alebo 14 (iba číslice). | |
| brand | string | Značka zobrazená vo verejnom pase. | |
| description | string | Až 2 000 znakov. | |
| category | string | Kategória ako voľný text. Predvolená hodnota "general". | |
| sector_id | integer | ID sektora, ktoré vyberá šablónu polí pasu. | |
| country_of_origin | string | Kód krajiny, napr. "PT". | |
| weight | number | Čistá hmotnosť. | |
| weight_unit | string | Jedno z kg, g, lb, oz. Predvolené je kg. | |
| materials | array | Objekty {name, percentage 0-100}. | |
| has_packaging | boolean | Pridá do pasu polia šablóny pre obaly (kľúče začínajúce sa pkg_), pod tým istým QR kódom. |
curl -X POST https://myproductpassport.eu/api/v1/products \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Alpine Merino Crew Sweater",
"sku": "AM-CREW-01",
"gtin": "05012345678900",
"sector_id": 3,
"materials": [
{"name": "Merino wool (RWS)", "percentage": 78},
{"name": "Recycled nylon (GRS)", "percentage": 22}
]
}'{
"data": {
"id": 513,
"name": "Alpine Merino Crew Sweater",
"sku": "AM-CREW-01",
"status": "active",
"sector": { "id": 3, "name": "Textiles" },
"created_at": "2026-09-07T18:40:00+00:00"
}
}/products/bulk
vyžaduje products:write Vytvorí až 100 produktov jedným volaním. Celá dávka sa odmietne s kódom 403, ak by prekročila zostávajúci limit produktov. Pri katalógoch s tisíckami položiek volajte tento koncový bod v cykle alebo použite import CSV v aplikácii.
| Parameter | Typ | Opis | |
|---|---|---|---|
| products | array | povinné | 1 až 100 objektov výrobkov s rovnakými poľami ako „Vytvoriť výrobok“ (bez materiálov). |
curl -X POST https://myproductpassport.eu/api/v1/products/bulk \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{
"products": [
{"name": "PSL-BT-122000", "sku": "PSL-BT-122000", "sector_id": 5},
{"name": "PSL-BT-123000", "sku": "PSL-BT-123000", "sector_id": 5}
]
}'{
"message": "2 product(s) created.",
"products": [
{ "id": 514, "name": "PSL-BT-122000", "status": "active" },
{ "id": 515, "name": "PSL-BT-123000", "status": "active" }
]
}/products/{id}
vyžaduje products:read Vráti jeden produkt s jeho sektorom a zhrnutím najnovšieho pasu. 404, ak ID nie je vo vašom pracovnom priestore.
curl https://myproductpassport.eu/api/v1/products/512 \
-H "Authorization: Bearer pk_your_key"/products/{id}
vyžaduje products:write Čiastočne aktualizuje produkt. Pošlite len polia, ktoré chcete zmeniť; zoznam polí zodpovedá Vytvoriť produkt.
curl -X PUT https://myproductpassport.eu/api/v1/products/512 \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{"brand": "Northloom"}'/products/{id}
vyžaduje products:write Obnoviteľne vymaže produkt. Zverejnené pasy produktu naďalej fungujú, takže vytlačené QR kódy nikdy nezostanú bez stránky.
curl -X DELETE https://myproductpassport.eu/api/v1/products/512 \
-H "Authorization: Bearer pk_your_key"{ "message": "Product deleted." }08 / Koncové bodyPasy
/passports
vyžaduje passports:read Vypíše pasy od najnovších, 25 na stránku, so zhrnutím produktu a všetkými poľami pasu.
| Parameter | Typ | Opis | |
|---|---|---|---|
| page | integer | Číslo stránky. |
curl https://myproductpassport.eu/api/v1/passports \
-H "Authorization: Bearer pk_your_key"{
"data": [
{
"id": 96,
"uuid": "36ff3776-d517-4228-8cde-9208136ea84a",
"version": 1,
"status": "published",
"compliance_status": "compliant",
"compliance_percentage": 100,
"public_url": "https://myproductpassport.co.uk/p/36ff3776-…",
"gs1_url": "https://myproductpassport.co.uk/01/05012345678900",
"product": { "id": 512, "name": "Alpine Merino Crew Sweater", "sku": "AM-CREW-01" },
"fields": [
{ "key": "material_composition", "value": "…", "verification_status": "verified" }
],
"published_at": "2026-08-16T10:00:00+00:00"
}
],
"meta": { "current_page": 1, "per_page": 25, "total": 1 }
}/products/{productId}/passports
vyžaduje passports:write Vygeneruje koncept pasu pre produkt a predvyplní polia z údajov produktu a šablóny sektora. Vráti koncept so skóre súladu. Pri produkte, ktorý už má aktívny pas, vráti 409 s týmto pasom: opravte ho pomocou PUT /passports/{id}/fields, čím zostane zachovaná jeho adresa aj QR kód.
curl -X POST https://myproductpassport.eu/api/v1/products/512/passports \
-H "Authorization: Bearer pk_your_key"/passports/{id}
vyžaduje passports:read Vráti jeden pas s produktom, poľami, verejnou URL a GS1 Digital Link.
curl https://myproductpassport.eu/api/v1/passports/96 \
-H "Authorization: Bearer pk_your_key"/passports/{id}/publish
vyžaduje passports:publish Zverejní koncept pasu a sprístupní jeho verejnú stránku a QR kód. Zverejniť možno iba koncepty; všetko ostatné vráti 404.
curl -X POST https://myproductpassport.eu/api/v1/passports/96/publish \
-H "Authorization: Bearer pk_your_key"/passports/{id}/archive
vyžaduje passports:publish Archivuje pas a stiahne jeho verejnú stránku z obehu.
curl -X POST https://myproductpassport.eu/api/v1/passports/96/archive \
-H "Authorization: Bearer pk_your_key"/passports/bulk-publish
vyžaduje passports:publish Zverejní až 50 konceptov pasov jedným volaním a hlási výsledky pre každý pas, takže jedno zlyhanie nikdy nepreruší celú dávku.
| Parameter | Typ | Opis | |
|---|---|---|---|
| passport_ids | array | povinné | 1 až 50 ID pasov. |
curl -X POST https://myproductpassport.eu/api/v1/passports/bulk-publish \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{"passport_ids": [96, 97, 98]}'{
"published": 2,
"failed": 1,
"published_ids": [96, 97],
"errors": [
{ "id": 98, "error": "Compliance below the publishing threshold." }
]
}/passports/{id}/successor
vyžaduje passports:write Pri výrobku pripravenom na opätovné použitie, prepracovanom na iný účel alebo repasovanom vyžaduje nariadenie o batériách (čl. 77 ods. 7) nový pas prepojený s pôvodným. Tým sa vytvorí nový záznam produktu a koncept pasu predvyplnený zo zverejneného, s odkazom naň. Pôvodný pas zostáva aktívny a oba pasy zobrazujú odkaz. Nový pas zverejnite pomocou POST /passports/{id}/publish.
| Parameter | Typ | Opis | |
|---|---|---|---|
| stage | string | povinné | prepared_for_reuse, repurposed alebo remanufactured. |
curl -X POST https://myproductpassport.eu/api/v1/passports/96/successor \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{ "stage": "repurposed" }'{
"data": {
"id": 131, "status": "draft", "version": 1,
"lineage": {
"stage": "repurposed",
"original": { "id": 96, "url": "https://myproductpassport.co.uk/p/..." },
"originals": [{ "passport_id": 96, "product_id": 40, "stage": "repurposed", "status": "published", "url": "https://myproductpassport.co.uk/p/..." }],
"successors": []
}
}
}/passports/{id}/fields
vyžaduje passports:read Vráti kľúče polí, ktoré šablóna sektora pasu vyžaduje (povinné aj voliteľné), aktuálne uložené hodnoty a ktoré povinné kľúče ešte chýbajú. Použite to na zostavenie tela pre PUT /passports/{id}/fields.
curl https://myproductpassport.eu/api/v1/passports/96/fields \
-H "Authorization: Bearer pk_your_key"{
"passport_id": 96,
"sector": "batteries",
"compliance_percentage": 84,
"required": ["battery_category", "carbon_footprint", "..."],
"optional": ["energy_round_trip_efficiency", "..."],
"missing_required": ["carbon_footprint_class", "recycled_content"],
"values": { "battery_category": "Industrial", "...": "..." }
}/passports/{id}/fields
vyžaduje passports:write Zapíše ľubovoľnú sadu hodnôt polí do konceptu alebo živého pasu: kompletnú sadu podľa prílohy XIII pre batériu, polia šablóny sektora alebo vlastné kľúče. Posielajte len kľúče, ktoré chcete zmeniť; hodnota null alebo prázdna pole odstráni. Živý pas sa aktualizuje na mieste, jeho adresa ani QR kód sa nemenia a jeho strojové preklady sa vygenerujú znova. Súlad sa prehodnotí. Koncept sa týmto volaním nepublikuje; použite POST /passports/{id}/publish.
| Parameter | Typ | Opis | |
|---|---|---|---|
| fields | object | povinné | Mapa kľúčov polí na hodnoty. Kľúče sú malé písmená, číslice a podčiarkovníky; hodnoty až 5 000 znakov. Až 200 kľúčov na volanie. |
curl -X PUT https://myproductpassport.eu/api/v1/passports/96/fields \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{
"fields": {
"carbon_footprint": "61.2 kg CO2e/kWh",
"carbon_footprint_class": "C",
"recycled_content": "Cobalt 16%, lithium 6%, nickel 6%, lead 0%"
}
}'{
"message": "3 field(s) changed, 0 removed.",
"changed": ["carbon_footprint", "carbon_footprint_class", "recycled_content"],
"removed": [],
"passport": { "id": 96, "status": "published", "compliance_percentage": 92 }
}/passports/{id}/state-of-health
vyžaduje passports:write Odošle vlastné údaje tejto batérie (príloha XIII bod 4 nariadenia (EÚ) 2023/1542) do zverejneného pasu, pre systémy BMS a správu vozových parkov. Pošlite ľubovoľnú podmnožinu nižšie uvedených polí; súlad sa po aktualizácii znova skontroluje. Tieto hodnoty sa zobrazujú iba divákom schváleným vlastníkom pasu (čl. 77 ods. 2), nikdy na verejnej stránke. capacity_fade, power_capability a internal_resistance sa ukladajú ako aktuálne hodnoty tejto batérie (current_*), oddelene od pôvodných hodnôt modelu.
| Parameter | Typ | Opis | |
|---|---|---|---|
| state_of_health | string | napr. "97% pri 412 cykloch". | |
| state_of_certified_energy | string | Zostávajúca certifikovaná energia (batérie elektromobilov). | |
| battery_status | string | original, repurposed, re-used, remanufactured alebo waste. | |
| capacity_fade | string | Doterajší pokles kapacity. Ukladá sa ako current_capacity_fade. | |
| power_capability | string | Aktuálna výkonová schopnosť. Ukladá sa ako current_power_capability. | |
| internal_resistance | string | Nameraný vnútorný odpor. Ukladá sa ako current_internal_resistance. | |
| use_data | string | Cykly, nepriaznivé udalosti, teplota a stav nabitia, až 5 000 znakov. |
curl -X POST https://myproductpassport.eu/api/v1/passports/96/state-of-health \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{
"state_of_health": "97% at 412 cycles",
"capacity_fade": "3% from initial rated capacity"
}'{
"message": "2 field(s) updated.",
"updated_fields": ["state_of_health", "current_capacity_fade"],
"passport": { "id": 96, "status": "published", "compliance_percentage": 100 }
}/passports/{id}/units
vyžaduje passports:write Každá batéria potrebuje vlastný pas (nariadenie (EÚ) 2023/1542, čl. 77 ods. 1). Zaregistrujte až 10 000 batérií jedného modelu jedným volaním, každú s vlastným sériovým číslom (až 20 písmen, číslic, bodiek, spojovníkov alebo podčiarkovníkov) a voliteľne manufacturing_date, battery_status a jej údajmi podľa prílohy XIII bodu 4. Existujúce sériové čísla sa aktualizujú; hodnoty, ktoré vynecháte, zostanú zachované. Ak má produkt GTIN, adresou každej batérie je jej GS1 Digital Link, /01/{gtin}/21/{serial}. Údaje bodu 4 sa zobrazujú iba divákom schváleným vlastníkom.
| Parameter | Typ | Opis | |
|---|---|---|---|
| units[].serial | string | povinné | Sériové číslo batérie. |
| units[].manufacturing_date | string | Mesiac a rok, napr. "2026-09". | |
| units[].battery_status | string | original alebo waste. Zmena stavu vyžaduje hodnoty namerané pri nej (príloha XIII bod 4 písm. a)); waste navyše vyžaduje responsible_party_type (producer, pro alebo waste_operator), responsible_party_name a responsible_party_contact (čl. 77 ods. 7). recycled spolu s recycled_at a recycler_name ukončí pas (čl. 77 ods. 8). Batéria so zmeneným účelom, opätovne použitá alebo repasovaná batéria dostane nový pas: POST /passports/{id}/units/{serial}/successor. | |
| units[].state_of_health | string | Tiež state_of_certified_energy, current_capacity_fade, current_power_capability, current_internal_resistance, remaining_capacity_ah, power_fade, internal_resistance_increase, round_trip_efficiency, round_trip_efficiency_fade, expected_lifetime_cycles_remaining, self_discharge_rate, ohmic_resistance a use_data. |
curl -X POST https://myproductpassport.eu/api/v1/passports/96/units \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{"units": [{"serial": "KES-00001", "manufacturing_date": "2026-09", "state_of_health": "100%"}]}'{ "created": 1, "updated": 0, "skipped": 0, "errors": [] }/passports/{id}/units/{serial}
vyžaduje passports:write Pre systém riadenia batérie, ktorý posiela údaje jednej batérie: ľubovoľné z battery_status, state_of_health, state_of_certified_energy, current_capacity_fade, current_power_capability, current_internal_resistance a use_data. Na čítanie použite GET na rovnakú cestu, pre zoznam GET /passports/{id}/units (per_page až 500).
curl -X PATCH https://myproductpassport.eu/api/v1/passports/96/units/KES-00001 \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{"state_of_health": "96% at 412 cycles"}'{
"data": { "serial": "KES-00001", "public_url": "https://myproductpassport.co.uk/01/05012345678900/21/KES-00001", "battery_status": "original", "data": { "state_of_health": "96% at 412 cycles" } }
}/passports/{id}/units/{serial}/snapshots
vyžaduje passports:read Príloha XIII bod 4 písm. a) vyžaduje hodnoty výkonnosti a životnosti pri uvedení batérie na trh a pri zmene jej stavu. Tieto merania sa uchovávajú tak, ako boli, bez ohľadu na neskôr odoslané údaje; ak chcete uchovať aj pravidelné meranie, pošlite record_snapshot: true s požiadavkou PATCH.
curl https://myproductpassport.eu/api/v1/passports/96/units/KES-00001/snapshots \
-H "Authorization: Bearer pk_your_key"{
"data": [
{ "event": "placed_on_market", "status": "original", "values": { "state_of_health": "100%" }, "measured_at": "2026-09-26T09:00:00+00:00", "source": "api" },
{ "event": "status_change", "status": "waste", "values": { "remaining_capacity_ah": "71 Ah", "power_fade": "14%", "internal_resistance_increase": "22%", "expected_lifetime_cycles_remaining": "0" }, "measured_at": "2029-03-02T10:00:00+00:00", "source": "bms" }
]
}/passports/{id}/units/{serial}/successor
vyžaduje passports:write Článok 77 ods. 7: batéria, ktorá bola pripravená na opätovné použitie, ktorej účel bol zmenený alebo ktorá bola repasovaná, má nový pas prepojený s pôvodným. Týmto sa batéria zaregistruje znova, s novým sériovým číslom a identifikátorom, v rámci modelu batérie druhého života vo vašom pracovnom priestore (vytvoreného z tohto modelu, ak zatiaľ neexistuje), oba pasy sa prepoja a uchovajú sa hodnoty namerané pri zmene. Pôvodná batéria si ponechá svoj pas. Model druhého života doplňte a zverejnite pomocou POST /passports/{id}/publish.
| Parameter | Typ | Opis | |
|---|---|---|---|
| stage | string | povinné | prepared_for_reuse, repurposed alebo remanufactured. |
| values | object | povinné | Hodnoty namerané pri zmene: z každej dvojice aspoň jedna hodnota (remaining_capacity_ah alebo current_capacity_fade, current_power_capability alebo power_fade, current_internal_resistance alebo internal_resistance_increase) a expected_lifetime_cycles_remaining (príloha IV časť A). |
| serial | string | Nové sériové číslo. Predvolené: pôvodné sériové číslo s príponou -RU, -RP alebo -RM. | |
| measured_at | string | Kedy boli hodnoty namerané. | |
| member_state | string | Dvojpísmenový kód členského štátu, v ktorom bol zdravotný stav testovaný (čl. 73 ods. 1 písm. a)). | |
| target_passport_id | integer | Existujúci model druhého života tohto modelu batérie, pod ktorým sa batéria zaregistruje. |
curl -X POST https://myproductpassport.eu/api/v1/passports/96/units/KES-00001/successor \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{"stage": "repurposed", "values": {"remaining_capacity_ah": "82 Ah", "power_fade": "9%", "internal_resistance_increase": "15%", "expected_lifetime_cycles_remaining": "2000"}}'{
"data": {
"serial": "KES-00001-RP", "battery_status": "repurposed", "passport_id": 131,
"lineage": { "originals": [{ "serial": "KES-00001", "passport_id": 96, "stage": "repurposed" }], "successors": [] }
}
}/passports/{id}/registry
vyžaduje passports:write Ukladá do pasu podanie do registra EÚ pre DPP a jeho výsledok: stav, korelačné ID, registračný identifikátor vrátený registrom a voliteľný odkaz na záložnú kópiu hostovanú poskytovateľom služieb DPP. Samotná registrácia prebieha v registri Komisie (webový formulár alebo nahranie súboru); týmto sa výsledok uchová pri pase. GET /passports/{id} vracia rovnaký blok pod registry.
| Parameter | Typ | Opis | |
|---|---|---|---|
| status | string | not_submitted, submitted, registered alebo failed. | |
| product_group | string | Skupina výrobkov v registri, napríklad batteries. | |
| granularity | string | model, šarža alebo kus. | |
| upi | string | Jedinečný identifikátor výrobku ako https URL. Predvolene URL verejného pasu. | |
| correlation_id | string | ID korelácie pridelené registrom pri podaní. | |
| uri | string | Registračný identifikátor vrátený registrom. | |
| backup_url | string | https odkaz na záložnú kópiu hosťovanú poskytovateľom služieb DPP. | |
| submitted_at | date | Dátum podania. | |
| registered_at | date | Dátum registrácie. | |
| error | string | Popis chyby pri neúspešnom podaní. |
curl -X POST https://myproductpassport.eu/api/v1/passports/96/registry \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{
"status": "registered",
"correlation_id": "7f3a2c1e-0b4d-4f8e-9a6b-2d1c3e4f5a6b",
"uri": "urn:eu:dpp:reg:00000001",
"registered_at": "2027-02-18"
}'{
"message": "Registry details updated.",
"passport": {
"id": 96,
"registry": {
"status": "registered",
"upi": "https://myproductpassport.co.uk/p/552fbb4e-5d9a-41da-9050-cc9005d8b66b",
"correlation_id": "7f3a2c1e-0b4d-4f8e-9a6b-2d1c3e4f5a6b",
"uri": "urn:eu:dpp:reg:00000001",
"registered_at": "2027-02-18T00:00:00+00:00"
}
}
}/passports/{id}/qr
vyžaduje passports:read QR kód pasu ako súbor: svg (predvolené), png (so značkou, pripravený na tlač) alebo pdf (hárok štítkov).
| Parameter | Typ | Opis | |
|---|---|---|---|
| format | string | svg | png | pdf |
curl "https://myproductpassport.eu/api/v1/passports/96/qr?format=png" \
-H "Authorization: Bearer pk_your_key" -o passport-96.png09 / Koncové bodySúlad
/passports/{passportId}/compliance
vyžaduje passports:read Vykoná živú kontrolu súladu pasu s povinnými poľami jeho sektora a presne uvedie, čo chýba.
curl https://myproductpassport.eu/api/v1/passports/96/compliance \
-H "Authorization: Bearer pk_your_key"{
"data": {
"passport_id": 96,
"product_name": "Alpine Merino Crew Sweater",
"status": "compliant",
"percentage": 100,
"completed_fields": 12,
"total_fields": 12,
"missing_fields": []
}
}10 / Koncové bodySektory
/sectors
Sektory, do ktorých možno produkt zaradiť: systémové sektory platformy plus všetky definované vo vašom pracovnom priestore. Pri vytváraní produktov použite id a pri zápise polí pasu kľúče polí.
curl https://myproductpassport.eu/api/v1/sectors \
-H "Authorization: Bearer pk_your_key"{
"data": [
{
"id": 4,
"slug": "batteries",
"name": "Batteries",
"system": true,
"regulations_finalised": true,
"deadline": "2027-02-18",
"deadline_label": "18 Feb 2027",
"required_fields": ["battery_category", "battery_weight", "..."],
"optional_fields": ["energy_round_trip_efficiency", "..."]
}
]
}11 / Koncové bodyDokumenty
/products/{productId}/documents
vyžaduje products:read Vyhlásenia o zhode, protokoly o skúškach a certifikáty priložené k produktu. Verejný dokument je prepojený zo všetkých zverejnených pasov produktu.
curl https://myproductpassport.eu/api/v1/products/512/documents \
-H "Authorization: Bearer pk_your_key"{
"data": [
{
"id": 31,
"product_id": 512,
"filename": "declaration-of-conformity.pdf",
"mime_type": "application/pdf",
"file_size": 184322,
"is_public": true,
"processing_status": "completed",
"public_url": "https://myproductpassport.co.uk/p/3f0c.../document/31",
"created_at": "2026-09-22T10:12:00+00:00"
}
]
}/products/{productId}/documents
vyžaduje products:write Nahrávanie multipart. PDF, Word, Excel, CSV, text, PNG a JPEG do 10 MB, najviac 20 na produkt. Text sa extrahuje na pozadí.
| Parameter | Typ | Opis | |
|---|---|---|---|
| file | file | povinné | Dokument. |
| is_public | boolean | Zobraziť vo verejnom pase (predvolene false). |
curl -X POST https://myproductpassport.eu/api/v1/products/512/documents \
-H "Authorization: Bearer pk_your_key" \
-F "[email protected]" \
-F "is_public=1"/products/{productId}/documents/{id}
vyžaduje products:write Prepína, či je dokument prepojený z verejného pasu.
| Parameter | Typ | Opis | |
|---|---|---|---|
| is_public | boolean | povinné |
curl -X PATCH https://myproductpassport.eu/api/v1/products/512/documents/31 \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{"is_public": false}'/products/{productId}/documents/{id}
vyžaduje products:write Odstráni súbor a jeho prepojenie s pasom.
curl -X DELETE https://myproductpassport.eu/api/v1/products/512/documents/31 \
-H "Authorization: Bearer pk_your_key"{ "message": "Document deleted." }12 / Koncové bodyDodávateľský reťazec
/products/{productId}/supply-chain
vyžaduje products:read Kroky zobrazené v pase produktu, v poradí.
curl https://myproductpassport.eu/api/v1/products/512/supply-chain \
-H "Authorization: Bearer pk_your_key"/products/{productId}/supply-chain
vyžaduje products:write Nahradí všetky kroky zoznamom, ktorý pošlete, v zaslanom poradí. Na vymazanie pošlite prázdny zoznam. Typy krokov: raw_material, processing, manufacturing, assembly, packaging, distribution.
| Parameter | Typ | Opis | |
|---|---|---|---|
| steps | array | povinné | Až 50 krokov. |
| steps[].step_type | string | povinné | |
| steps[].supplier_name | string | povinné | |
| steps[].supplier_location | string | ||
| steps[].supplier_country | string | ISO 3166-1 alpha-2. | |
| steps[].lat / lng | number | ||
| steps[].description | string | ||
| steps[].certifications | array | ||
| steps[].date | date |
curl -X PUT https://myproductpassport.eu/api/v1/products/512/supply-chain \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{"steps": [{"step_type": "raw_material", "supplier_name": "Merino Growers Co-op", "supplier_country": "NZ", "certifications": ["RWS"]}, {"step_type": "manufacturing", "supplier_name": "Northloom Mill", "supplier_location": "Biella", "supplier_country": "IT"}]}'13 / Koncové bodyPreklady
/passports/{id}/translations
vyžaduje passports:read Každá preložená hodnota poľa podľa jazyka s uvedením zdroja: auto (strojový, vytvorený pri zverejnení) alebo manual.
curl https://myproductpassport.eu/api/v1/passports/96/translations \
-H "Authorization: Bearer pk_your_key"{
"data": {
"passport_id": 96,
"available_locales": ["bg", "cs", "da", "de", "..."],
"translations": {
"de": {"care_instructions": {"value": "Kalt waschen", "source": "manual"}}
}
}
}/passports/{id}/translations/{locale}
vyžaduje passports:write Nastaví preklady pre jeden jazyk podľa kľúča poľa. Ručný preklad sa nikdy strojovo neprepíše. Na odstránenie pošlite prázdny reťazec.
| Parameter | Typ | Opis | |
|---|---|---|---|
| fields | object | povinné | field_key: preložená hodnota |
curl -X PUT https://myproductpassport.eu/api/v1/passports/96/translations/de \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{"fields": {"care_instructions": "Kalt waschen, nicht bleichen"}}'{ "message": "1 translation(s) written, 0 removed.", "locale": "de", "written": 1, "removed": 0 }14 / Koncové bodyIntegrita a exporty
/passports/{id}/integrity
vyžaduje passports:read Každý zverejnený stav pasu ako záznam zreťazený pomocou hashov a podpísaný kľúčom Ed25519: odtlačok (SHA-256), hodnota reťazca a podpis. Verejné kľúče sú na adrese /.well-known/mpp-integrity-keys.json, takže reťazec môže overiť ktokoľvek.
curl https://myproductpassport.eu/api/v1/passports/96/integrity \
-H "Authorization: Bearer pk_your_key"{ "data": { "state": "intact", "hash_algorithm": "SHA-256", "signature_algorithm": "Ed25519", "records": [ { "sequence": 1, "event": "published", "content_hash": "8f3a...", "chain_hash": "c21e...", "signature": "MEUC...", "key_id": "3fa9c21e0b7d4a11" } ], "problems": [] } }/passports/{id}/integrity/{sequence}
vyžaduje passports:read Úplný záznam v podobe, v akej bol podpísaný, vrátane snímky: čo pas uvádzal v danom okamihu, až po hash každého priloženého súboru.
curl https://myproductpassport.eu/api/v1/passports/96/integrity/1 \
-H "Authorization: Bearer pk_your_key"/passports/{id}/epcis
vyžaduje passports:read Pas ako dokument GS1 EPCIS 2.0 vo formáte JSON-LD: uvedenie položky do obehu (commissioning), každý krok dodávateľského reťazca ako pozorovanie, jednotlivé batérie a pas druhého života ako transformácia. Ak má produkt GTIN, identifikátory sú URI GS1 Digital Link.
curl https://myproductpassport.eu/api/v1/passports/96/epcis \
-H "Authorization: Bearer pk_your_key"15 / Koncové bodyŽiadosti dodávateľom
/passports/{id}/supplier-requests
vyžaduje passports:write Pošle dodávateľovi e-mailom súkromný odkaz na vyplnenie vami zvolených polí v jeho jazyku. Do pasu sa nič nedostane, kým to neschváli niekto z vášho pracovného priestoru.
| Parameter | Typ | Opis | |
|---|---|---|---|
| supplier_name | string | povinné | |
| supplier_email | string | povinné | |
| field_keys | array | povinné | Kľúče polí zo šablóny pasu. |
| locale | string | Jazyk e-mailu a formulára, napr. de. | |
| due_at | date | Termín odpovede; ak sa neuvedie, 14 dní. | |
| message | string |
curl -X POST https://myproductpassport.eu/api/v1/passports/96/supplier-requests \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{"supplier_name": "Mei Chen", "supplier_email": "[email protected]", "field_keys": ["recycled_content_cobalt", "carbon_footprint"], "locale": "de"}'/passports/{id}/supplier-requests
vyžaduje passports:read Všetky žiadosti k pasu s ich stavom.
curl https://myproductpassport.eu/api/v1/passports/96/supplier-requests \
-H "Authorization: Bearer pk_your_key"/supplier-requests/{id}
vyžaduje passports:read Jedna žiadosť s odpoveďami dodávateľa, poznámkou a názvami priložených súborov.
curl https://myproductpassport.eu/api/v1/supplier-requests/12 \
-H "Authorization: Bearer pk_your_key"16 / Koncové bodyPopredajný servis
/passports/{id}/items
vyžaduje items:write Dajte kusom výrobku (akéhokoľvek odvetvia okrem batérií, ktoré používajú /units) vlastné sériové číslo: každý dostane vlastnú adresu a QR kód, skrytý kód pravosti pre svoj štítok a môže ho zaregistrovať jeho vlastník. Pošlite až 10 000 kusov alebo rozsah. S kódom GTIN je adresou GS1 Digital Link /01/{gtin}/21/{serial}.
| Parameter | Typ | Opis | |
|---|---|---|---|
| items[].serial | string | povinné | Najviac 20 písmen, číslic, bodiek, spojovníkov alebo podčiarkovníkov. |
| items[].batch | string | Šarža, najviac 20 znakov. | |
| items[].manufactured_on | string | Dátum výroby, RRRR-MM-DD. | |
| range | object | Namiesto items: prefix, start, count, digits a batch, napríklad SN-00001 až SN-00500. |
curl -X POST https://myproductpassport.eu/api/v1/passports/96/items \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{"range": {"prefix": "SN-", "start": 1, "count": 500, "digits": 5, "batch": "B2026-10"}}'{ "created": 500, "updated": 0, "skipped": 0, "over_limit": 0, "errors": [] }/passports/{id}/items/{serial}
vyžaduje items:read Kus s adresou, stavom, informáciou, či je zaregistrovaný a do kedy platí jeho záruka, s overeniami pravosti a históriou. Kľúč s items:write dostane aj skrytý kód na tlač. GET /passports/{id}/items ich vypíše (filtre status a batch, per_page do 500).
curl https://myproductpassport.eu/api/v1/passports/96/items/SN-00001 \
-H "Authorization: Bearer pk_your_key"{
"data": { "serial": "SN-00001", "status": "active", "url": "https://myproductpassport.co.uk/01/05012345678900/21/SN-00001", "registered": true, "warranty_ends_on": "2028-10-02", "events": [ { "type": "registered", "country": "IE", "at": "2026-10-03T09:12:00+00:00" } ] }
}/passports/{id}/items/{serial}
vyžaduje items:write Nastavte status na stolen alebo recalled a stránka kusu varuje každého, kto ho naskenuje, a zobrazí vašu poznámku status_note; odcudzený kus nemožno zaregistrovať. retired stránku kusu vypne. Meniť možno aj batch a manufactured_on.
| Parameter | Typ | Opis | |
|---|---|---|---|
| status | string | active, stolen, recalled alebo retired. | |
| status_note | string | Zobrazuje sa na stránke kusu, najviac 500 znakov. |
curl -X PATCH https://myproductpassport.eu/api/v1/passports/96/items/SN-00001 \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{"status": "stolen", "status_note": "Reported stolen on 2 October 2026."}'/owner-registrations
vyžaduje aftersales:read Ľudia, ktorí zaregistrovali vaše výrobky: meno, e-mail, krajina, dátum nákupu, predajca, dátumy záruky a či súhlasili s novinkami a ponukami (marketing_consent=1 vypíše len ich). Predvolené sú aktívne registrácie; status=pending, transferred alebo ended pre ostatné; since= pre zmeny po určitom dátume.
curl "https://myproductpassport.eu/api/v1/owner-registrations?marketing_consent=1&since=2026-10-01" \
-H "Authorization: Bearer pk_your_key"/service-requests
vyžaduje aftersales:read Opravy, reklamácie, spätný zber, náhradné diely a otázky z vašich pasov, od najnovších, s filtrami status a type. GET /service-requests/{reference} pridá konverzáciu.
curl "https://myproductpassport.eu/api/v1/service-requests?status=new" \
-H "Authorization: Bearer pk_your_key"/service-requests/{reference}/replies
vyžaduje aftersales:write Vaša odpoveď odíde zákazníkovi e-mailom s odkazom na stránku jeho požiadavky, v jeho jazyku. internal: true pridá poznámku viditeľnú len pre váš tím. PATCH /service-requests/{reference} so statusom posunie požiadavku ďalej (zákazník je informovaný, keď sa vybavuje, je vyriešená alebo uzavretá).
| Parameter | Typ | Opis | |
|---|---|---|---|
| body | string | povinné | Odpoveď, najviac 5 000 znakov. |
| internal | boolean | Poznámka pre váš tím namiesto odpovede. | |
| status | string | new, in_progress, waiting, resolved alebo closed. |
curl -X POST https://myproductpassport.eu/api/v1/service-requests/SR-7K3F9Q/replies \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{"body": "A new lid is on its way today.", "status": "waiting"}'17 / Koncové bodyHromadné úpravy a obrázky
/products/bulk-fields
vyžaduje products:write Nastaví údaj o produkte alebo pole pasu až pre 5 000 produktov. mode je set, fill (iba tam, kde je hodnota prázdna) alebo clear. V rámci požiadavky sa aktualizuje až 100 produktov; väčšie množiny sa zaradia do frontu (202).
| Parameter | Typ | Opis | |
|---|---|---|---|
| product_ids | array | povinné | |
| target | string | povinné | product | field |
| key | string | povinné | |
| value | string | ||
| mode | string | set | fill | clear |
curl -X PATCH https://myproductpassport.eu/api/v1/products/bulk-fields \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{"product_ids": [12, 13, 14], "target": "field", "key": "warranty_period", "value": "10 years", "mode": "fill"}'{ "data": { "changed": 2, "skipped": 1, "errors": [] } }/products/{id}/images
vyžaduje products:write Nahranie súboru JPG, PNG alebo WebP ako multipart (do 15MB, 8 na produkt). Prvý obrázok je titulným obrázkom verejného pasu.
| Parameter | Typ | Opis | |
|---|---|---|---|
| image | file | povinné | |
| alt | string | Popis obrázka. |
curl -X POST https://myproductpassport.eu/api/v1/products/12/images \
-H "Authorization: Bearer pk_your_key" \
-F [email protected] -F alt="Front of the battery"/products/{id}/images/order
vyžaduje products:write Zadajte image_ids v požadovanom poradí; prvý sa stane titulným obrázkom.
| Parameter | Typ | Opis | |
|---|---|---|---|
| image_ids | array | povinné |
curl -X PUT https://myproductpassport.eu/api/v1/products/12/images/order \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{"image_ids": [31, 30]}'/products/{id}/images/{imageId}
vyžaduje products:write Odstráni obrázok aj jeho súbor.
curl -X DELETE https://myproductpassport.eu/api/v1/products/12/images/31 \
-H "Authorization: Bearer pk_your_key"18 / Koncové bodyWebhooky
/webhooks
vyžaduje webhooks:manage Koncové body zaregistrované pre váš pracovný priestor. Tajné kľúče tu nie sú; na zobrazenie tajného kľúča načítajte jeden koncový bod.
curl https://myproductpassport.eu/api/v1/webhooks \
-H "Authorization: Bearer pk_your_key"/webhooks
vyžaduje webhooks:manage Zaregistruje verejnú HTTPS URL pre jednu alebo viac udalostí. Odpoveď obsahuje podpisový kľúč. Súkromných alebo interných hostiteľov odmietame.
| Parameter | Typ | Opis | |
|---|---|---|---|
| url | string | povinné | |
| events | array | povinné | Ktorákoľvek z udalostí uvedených nižšie. |
curl -X POST https://myproductpassport.eu/api/v1/webhooks \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{"url": "https://erp.acme.example/mpp", "events": ["passport.published", "product.updated"]}'{
"data": {
"id": 3,
"url": "https://erp.acme.example/mpp",
"events": ["passport.published", "product.updated"],
"is_active": true,
"failure_count": 0,
"secret": "9f1c...64 hex characters...",
"created_at": "2026-09-22T10:12:00+00:00"
}
}/webhooks/{id}
vyžaduje webhooks:manage curl https://myproductpassport.eu/api/v1/webhooks/3 \
-H "Authorization: Bearer pk_your_key"/webhooks/{id}
vyžaduje webhooks:manage Zmeňte URL alebo udalosti, prípadne koncový bod pozastavte a obnovte. Obnovenie vynuluje počet zlyhaní; koncový bod sa automaticky pozastaví po 10 po sebe idúcich neúspešných doručeniach.
| Parameter | Typ | Opis | |
|---|---|---|---|
| url | string | ||
| events | array | ||
| is_active | boolean |
curl -X PUT https://myproductpassport.eu/api/v1/webhooks/3 \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{"is_active": true}'/webhooks/{id}/test
vyžaduje webhooks:manage Zaradí do frontu doručenie webhook.test, aby ste mohli overiť prijímač a kód podpisu.
curl -X POST https://myproductpassport.eu/api/v1/webhooks/3/test \
-H "Authorization: Bearer pk_your_key"{ "message": "Test delivery queued." }/webhooks/{id}/deliveries
vyžaduje webhooks:manage Nedávne doručenia, od najnovších, s HTTP stavom, ktorý vrátil váš koncový bod, a prvými 500 znakmi tela odpovede.
| Parameter | Typ | Opis | |
|---|---|---|---|
| per_page | integer | Až 100. |
curl https://myproductpassport.eu/api/v1/webhooks/3/deliveries \
-H "Authorization: Bearer pk_your_key"/webhooks/{id}
vyžaduje webhooks:manage curl -X DELETE https://myproductpassport.eu/api/v1/webhooks/3 \
-H "Authorization: Bearer pk_your_key"{ "message": "Webhook endpoint deleted." }19 / UdalostiWebhooky
Namiesto dopytovania zaregistrujte v aplikácii koncový bod webhooku (stránka Webhooky, dostupná od plánu Starter) a MyProductPassport bude na vašu URL posielať JSON metódou POST, keď sa niečo stane:
| Udalosť | Spustí sa, keď |
|---|---|
| product.created | Vytvorí sa výrobok (aplikácia, API alebo import CSV) |
| product.updated | Produkt sa aktualizuje |
| product.deleted | Výrobok sa odstráni |
| passport.created | Pas je vygenerovaný |
| passport.published | Pas je zverejnený |
| passport.archived | Pas je archivovaný |
| supplier_request.submitted | Dodávateľ pošle informácie, o ktoré ste požiadali |
| owner.registered | Vlastník potvrdí registráciu |
| owner.transferred | Kus prechádza na nového registrovaného vlastníka |
| service_request.created | Zákazník pošle servisnú požiadavku z pasu |
| service_request.updated | Servisná požiadavka dostane odpoveď alebo nový stav |
| item.status_changed | Kus je označený ako odcudzený, stiahnutý z trhu alebo vyradený, alebo je označenie zrušené |
| item.verification_failed | Načítanie zabezpečeného tagu zlyhá, hromadia sa nesprávne kódy alebo sa sériové číslo objavuje na príliš mnohých miestach |
| webhook.test | Z aplikácie odošlete testovacie doručenie |
Každé doručenie je obálka JSON: ID doručenia (pri opakovaní sa posiela rovnaké ID, takže môžete odstrániť duplicity), udalosť, číslo pokusu, časová pečiatka a údaje udalosti. Udalosti pasov obsahujú uuid pasu a verejnú URL, takže druhú požiadavku potrebujete len zriedka:
{
"id": 8123,
"event": "passport.published",
"attempt": 1,
"created_at": "2026-09-22T10:12:00+00:00",
"data": {
"passport_id": 96,
"uuid": "3f0c8f1e-...",
"version": 2,
"status": "published",
"public_url": "https://myproductpassport.co.uk/p/3f0c8f1e-...",
"product_id": 512,
"product": {"id": 512, "name": "Alpine Merino Crew Sweater", "sku": "NL-AMC-001", "gtin": "5012345678900"}
}
}Hlavičky obsahujú názov udalosti, ID doručenia, unixovú časovú pečiatku a podpis HMAC nespracovaného tela, takže môžete overiť, že pochádza od nás, a odmietať opakované správy:
Content-Type: application/json
User-Agent: MyProductPassport-Webhooks/1.0
X-MPP-Event: passport.published
X-MPP-Delivery: 8123
X-MPP-Timestamp: 1790084320
X-MPP-Signature: sha256=<hex hmac of the raw body, keyed with your endpoint secret>Odpovedzte ľubovoľným kódom 2xx do 10 sekúnd. Všetko ostatné sa zopakuje päťkrát v priebehu približne 90 minút (30 s, 1 min, 5 min, 15 min, 1 h); po 10 po sebe idúcich zlyhaniach sa koncový bod pozastaví, kým ho znova nepovolíte.
$expected = 'sha256=' . hash_hmac('sha256', $rawBody, $endpointSecret);
abort_unless(hash_equals($expected, $request->header('X-MPP-Signature')), 401);