Referenca API-ja
Vse v MyProductPassport je na voljo prek REST API-ja, overjenega s ključem: ustvarjajte izdelke, generirajte in objavljajte digitalne potne liste izdelkov, pošiljajte sprotne podatke o baterijah in preverjajte skladnost neposredno iz svojega ERP, PIM ali cevovoda gradnje.
01 / Prvi korakiPreverjanje pristnosti
Vsaka zahteva je overjena s ključem API, poslanim kot žeton Bearer. Ključi se ustvarijo v aplikaciji pod Ključi API, prikažejo se enkrat in shranijo kot zgoščeni zapis; vsak ključ ima svoj nabor dovoljenj, neobvezen seznam dovoljenih IP-jev in neobvezen datum poteka. Ključe je mogoče zamenjati brez izpada.
Authorization: Bearer pk_your_api_keyDovoljenja se dodelijo na ključ, zato integracija dobi le tisto, kar potrebuje:
| Dovoljenje | Dodelitve dostopa |
|---|---|
| products:read | Branje izdelkov |
| products:write | Ustvarjanje, posodabljanje in brisanje izdelkov |
| passports:read | Branje potnih listov |
| passports:write | Ustvari potne liste |
| passports:publish | Objava in arhiviranje potnih listov |
| webhooks:manage | Ustvarjanje, preizkušanje in odstranjevanje končnih točk 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 / Prvi korakiOmejitve zahtev
Omejitve veljajo na ključ, na minuto, in jih določa paket:
| Paket | Zahtev / minuto |
|---|---|
| Brezplačno | 30 |
| Micro | 60 |
| E-etiketa | 60 |
| Starter | 120 |
| Professional | 300 |
| Business | 600 |
| Battery | 600 |
Vsak odgovor vsebuje glavi X-RateLimit-Limit in X-RateLimit-Remaining. Ob prekoračitvi omejitve se vrne 429:
{ "error": "Rate limit exceeded.", "limit": 300, "retry_after": 60 }03 / Prvi korakiNapake
Napake so v obliki JSON z običajno statusno kodo. Najpogostejše:
| Stanje | Pomen | Primer telesa |
|---|---|---|
| 401 | Manjkajoč, neveljaven, preklican ali potekel ključ | {"error": "Invalid or revoked API key."} |
| 403 | Ključu manjka dovoljenje, naslov IP ni na seznamu dovoljenih ali je dosežena omejitev paketa | {"message": "API key does not have 'products:write' permission."} |
| 404 | Vir v vašem delovnem prostoru ne obstaja | {"message": "Not found."} |
| 422 | Preverjanje ni uspelo | {"message": "…", "errors": {"gtin": ["…"]}} |
| 429 | Prekoračena omejitev zahtev | {"error": "Rate limit exceeded."} |
04 / Prvi korakiŠtevilčenje strani
Končne točke seznamov vrnejo 25 elementov na stran s standardnima objektoma links in meta. Za premikanje po zbirki podajte ?page=2.
05 / Prvi korakiPovezava z asistentom UI (MCP)
Povežite Claude, Cursor ali katerega koli asistenta, ki podpira Model Context Protocol, in ga s preprostimi besedami prosite, naj ustvarja proizvode, izpolnjuje potne liste s tem, kar mu poveste, in preverja, kaj še manjka. Uporablja ključ API z njegovimi dovoljenji in omejitvijo zahtev. Lahko ustvarja osnutke in izpolnjuje polja; nikoli ničesar ne objavi, arhivira ali izbriše: to ostane pri vas v aplikaciji.
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"]
}
}
}Orodja, ki jih ponuja:
| Orodje | Kaj naredi |
|---|---|
| list_products | Proizvodi delovnega prostora, od najnovejših, 25 na stran, s sektorjem in najnovejšim potnim listom. |
| get_product | En proizvod s podatki, sektorjem, regulativnimi razdelki in najnovejšim potnim listom. |
| list_sectors | Predloge sektorjev, ki jih lahko uporablja proizvod (tekstil, elektronika, baterije, vino in drugo), z njihovimi ID-ji. Sektor proizvoda določa, katera polja potnega lista so obvezna. |
| create_product | Doda proizvod v delovni prostor. Uporabite sector_id iz list_sectors. compliance_sections doda potnemu listu regulativne razdelke: gpsr, epr, france, chemicals, eudr. |
| list_passports | Potni listi delovnega prostora, od najnovejših, 25 na stran, s stanjem (draft, published, archived), odstotkom popolnosti in javnim naslovom. |
| get_passport | En potni list: stanje, različica, odstotek popolnosti, javni naslov in povezave do kode QR. |
| create_passport | Ustvari osnutek potnega lista za proizvod. Ni objavljen: objavi ga oseba v aplikaciji. |
| get_passport_fields | Kaj zahteva potni list: ključi obveznih in neobveznih polj, pomen vsakega (oznaka, opis, primer), obstoječe vrednosti in manjkajoča obvezna polja. |
| update_passport_fields | Zapiše vrednosti polj v osnutek ali objavljen potni list (objavljen se posodobi na mestu: isti naslov, ista koda QR). Ključi iz get_passport_fields; prazno besedilo odstrani vrednost. Zapisujte samo dejstva, ki jih navaja uporabnik ali njegovi dokumenti. |
| get_compliance | Popolnost potnega lista: odstotek, stanje in obvezna polja, ki še manjkajo. |
06 / Končne točkeRačun
/me
Vrne overjeni račun, njegovo raven naročnine in koliko omejitve izdelkov je porabljene. Uporabno za preverjanje povezave.
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 / Končne točkeIzdelki
/products
zahteva products:read Navede izdelke v vašem delovnem prostoru od najnovejših, 25 na stran. Vsak izdelek vključuje svoj sektor in povzetek najnovejšega potnega lista.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| page | integer | Številka strani. |
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
zahteva products:write Ustvari en izdelek. Vrne 403, če je omejitev izdelkov paketa porabljena.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| name | string | obvezno | Ime izdelka, do 255 znakov. |
| sku | string | Vaš notranji SKU, do 100 znakov. | |
| gtin | string | GTIN-8, 12, 13 ali 14 (samo števke). | |
| brand | string | Blagovna znamka, prikazana na javnem potnem listu. | |
| description | string | Do 2.000 znakov. | |
| category | string | Kategorija v prostem besedilu. Privzeto "general". | |
| sector_id | integer | ID sektorja, ki izbere predlogo polj potnega lista. | |
| country_of_origin | string | Oznaka države, npr. "PT". | |
| weight | number | Neto teža. | |
| weight_unit | string | Eno od kg, g, lb, oz. Privzeto kg. | |
| materials | array | Objekti {name, percentage 0-100}. | |
| has_packaging | boolean | Doda v potni list polja predloge za embalažo (ključi, ki se začnejo s pkg_), pod isto kodo QR. |
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
zahteva products:write Z enim klicem ustvari do 100 izdelkov. Celoten paket se zavrne s 403, če bi presegel vašo preostalo omejitev izdelkov. Za kataloge s tisoči izdelkov kličite to končno točko v zanki ali uporabite uvoz CSV v aplikaciji.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| products | array | obvezno | Od 1 do 100 objektov izdelkov z enakimi polji kot »Ustvari izdelek« (brez materialov). |
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}
zahteva products:read Vrne en izdelek z njegovim sektorjem in povzetkom najnovejšega potnega lista. 404, če ID ni v vašem delovnem prostoru.
curl https://myproductpassport.eu/api/v1/products/512 \
-H "Authorization: Bearer pk_your_key"/products/{id}
zahteva products:write Delno posodobi izdelek. Pošljite samo polja, ki jih želite spremeniti; seznam polj je enak kot pri Ustvari izdelek.
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}
zahteva products:write Izbriše izdelek z možnostjo obnovitve. Objavljeni potni listi izdelka še naprej delujejo, zato natisnjene QR-kode nikoli ne ostanejo brez strani.
curl -X DELETE https://myproductpassport.eu/api/v1/products/512 \
-H "Authorization: Bearer pk_your_key"{ "message": "Product deleted." }08 / Končne točkePotni listi
/passports
zahteva passports:read Navede potne liste od najnovejših, 25 na stran, s povzetkom izdelka in vsemi polji potnega lista.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| page | integer | Številka strani. |
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
zahteva passports:write Ustvari osnutek potnega lista za izdelek in vnaprej izpolni polja iz podatkov o izdelku in predloge sektorja. Vrne osnutek z oceno skladnosti. Za izdelek, ki že ima aktiven potni list, vrne 409 s tem potnim listom: popravite ga s PUT /passports/{id}/fields, ki ohrani njegov naslov in kodo QR.
curl -X POST https://myproductpassport.eu/api/v1/products/512/passports \
-H "Authorization: Bearer pk_your_key"/passports/{id}
zahteva passports:read Vrne en potni list z izdelkom, polji, javnim URL-jem in GS1 Digital Link.
curl https://myproductpassport.eu/api/v1/passports/96 \
-H "Authorization: Bearer pk_your_key"/passports/{id}/publish
zahteva passports:publish Objavi osnutek potnega lista in aktivira njegovo javno stran in kodo QR. Objaviti je mogoče samo osnutke; vse drugo vrne 404.
curl -X POST https://myproductpassport.eu/api/v1/passports/96/publish \
-H "Authorization: Bearer pk_your_key"/passports/{id}/archive
zahteva passports:publish Arhivira potni list in njegovo javno stran umakne iz obtoka.
curl -X POST https://myproductpassport.eu/api/v1/passports/96/archive \
-H "Authorization: Bearer pk_your_key"/passports/bulk-publish
zahteva passports:publish Z enim klicem objavi do 50 osnutkov potnih listov in poroča o rezultatu za vsak potni list, zato ena napaka nikoli ne prekine paketa.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| passport_ids | array | obvezno | Od 1 do 50 ID-jev potnih listov. |
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
zahteva passports:write Za izdelek, pripravljen za ponovno uporabo, prenamenjen ali ponovno izdelan, Uredba o baterijah (člen 77(7)) zahteva nov potni list, povezan z izvirnim. S tem se ustvari nov zapis izdelka in osnutek potnega lista, vnaprej izpolnjen iz objavljenega in povezan z njim. Izvirnik ostane aktiven, oba potna lista pa prikazujeta povezavo. Novega objavite s POST /passports/{id}/publish.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| stage | string | obvezno | prepared_for_reuse, repurposed ali 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
zahteva passports:read Vrne ključe polj, ki jih zahteva predloga sektorja potnega lista (obvezne in neobvezne), trenutne vrednosti in katerih obveznih ključev še manjka. Uporabite ga za sestavo vsebine za 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
zahteva passports:write Zapiše poljuben nabor vrednosti polj v osnutek ali objavljen potni list: celoten nabor iz Priloge XIII za baterijo, polja predloge sektorja ali lastne ključe. Pošljite samo ključe, ki jih želite spremeniti; vrednost null ali prazna polje odstrani. Objavljeni potni list se posodobi na mestu, njegov naslov in QR-koda se ne spremenita, strojni prevodi pa se ustvarijo znova. Skladnost se ponovno oceni. Osnutek s tem klicem ni objavljen; uporabite POST /passports/{id}/publish.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| fields | object | obvezno | Preslikava ključa polja v vrednost. Ključi so male črke, števke in podčrtaji; vrednosti do 5.000 znakov. Do 200 ključev na klic. |
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
zahteva passports:write Pošlje lastne podatke te baterije (točka 4 Priloge XIII k Uredbi (EU) 2023/1542) v objavljen potni list, za sisteme BMS in vozne parke. Pošljite poljuben podnabor spodnjih polj; skladnost se po posodobitvi ponovno preveri. Te vrednosti so prikazane samo gledalcem, ki jih je odobril lastnik potnega lista (člen 77(2)), nikoli na javni strani. capacity_fade, power_capability in internal_resistance se shranijo kot trenutne meritve te baterije (current_*), ločeno od izvirnih vrednosti modela.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| state_of_health | string | npr. "97% pri 412 ciklih". | |
| state_of_certified_energy | string | Preostala certificirana energija (baterije za električna vozila). | |
| battery_status | string | original, repurposed, re-used, remanufactured ali waste. | |
| capacity_fade | string | Dosedanje zmanjšanje kapacitete. Shranjeno kot current_capacity_fade. | |
| power_capability | string | Trenutna zmogljivost moči. Shranjeno kot current_power_capability. | |
| internal_resistance | string | Izmerjena notranja upornost. Shranjeno kot current_internal_resistance. | |
| use_data | string | Cikli, negativni dogodki, temperatura in stanje napolnjenosti, do 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
zahteva passports:write Vsaka baterija potrebuje svoj potni list (Uredba (EU) 2023/1542, člen 77(1)). Z enim klicem registrirajte do 10.000 baterij enega modela, vsako s svojo serijsko številko (do 20 črk, števk, pik, vezajev ali podčrtajev) in po želji manufacturing_date, battery_status ter njene podatke iz točke 4 Priloge XIII. Obstoječe serijske številke se posodobijo; izpuščene vrednosti se ohranijo. Če ima izdelek GTIN, je naslov vsake baterije njen GS1 Digital Link, /01/{gtin}/21/{serial}. Podatki iz točke 4 so prikazani samo gledalcem, ki jih odobri lastnik.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| units[].serial | string | obvezno | Serijska številka baterije. |
| units[].manufacturing_date | string | Mesec in leto, npr. "2026-09". | |
| units[].battery_status | string | original ali waste. Sprememba statusa zahteva vrednosti, izmerjene ob njej (Priloga XIII, 4(a)); waste potrebuje tudi responsible_party_type (producer, pro ali waste_operator), responsible_party_name in responsible_party_contact (člen 77(7)). recycled z recycled_at in recycler_name konča potni list (člen 77(8)). Prenamenjena, ponovno uporabljena ali ponovno izdelana baterija dobi nov potni list: POST /passports/{id}/units/{serial}/successor. | |
| units[].state_of_health | string | Tudi 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 in 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}
zahteva passports:write Za sistem za upravljanje baterije, ki pošilja podatke ene baterije: kar koli od battery_status, state_of_health, state_of_certified_energy, current_capacity_fade, current_power_capability, current_internal_resistance in use_data. Za branje uporabite GET na isti poti ali GET /passports/{id}/units za seznam (per_page do 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
zahteva passports:read Priloga XIII, točka 4(a), zahteva vrednosti zmogljivosti in trajnosti ob dajanju baterije na trg in ob spremembi njenega stanja. Te meritve se ohranijo nespremenjene, ne glede na pozneje poslane podatke; če želite ohraniti tudi redno meritev, pošljite record_snapshot: true z zahtevo 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
zahteva passports:write Člen 77(7): baterija, ki je bila pripravljena za ponovno uporabo, prenamenjena ali ponovno izdelana, ima nov potni list, povezan z izvirnim. S tem se baterija ponovno registrira z novo serijsko številko in identifikatorjem v okviru modela baterije za drugo življenje v vašem delovnem prostoru (ustvarjenega iz tega modela, če ga še ni), oba se povežeta, vrednosti, izmerjene ob spremembi, pa se ohranijo. Izvirna baterija obdrži svoj potni list. Model za drugo življenje dopolnite in objavite s POST /passports/{id}/publish.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| stage | string | obvezno | prepared_for_reuse, repurposed ali remanufactured. |
| values | object | obvezno | Vrednosti, izmerjene ob spremembi: vsaj ena od remaining_capacity_ah ali current_capacity_fade, od current_power_capability ali power_fade, od current_internal_resistance ali internal_resistance_increase ter expected_lifetime_cycles_remaining (Priloga IV, del A). |
| serial | string | Nova serijska številka. Privzeto: izvirna serijska številka s pripono -RU, -RP ali -RM. | |
| measured_at | string | Kdaj so bile vrednosti izmerjene. | |
| member_state | string | Dvočrkovna koda države članice, v kateri je bilo preskušeno zdravstveno stanje (člen 73(1)(a)). | |
| target_passport_id | integer | Obstoječi model za drugo življenje tega modela baterije, pod katerim jo registrirate. |
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
zahteva passports:write Na potnem listu shrani oddajo v register DPP EU in njen rezultat: stanje, korelacijski ID, registracijski identifikator, ki ga vrne register, in neobvezno povezavo do varnostne kopije, ki jo gosti ponudnik storitev DPP. Sama registracija poteka v registru Komisije (spletni obrazec ali nalaganje datoteke); to ohrani rezultat ob potnem listu. GET /passports/{id} vrne isti blok pod registry.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| status | string | not_submitted, submitted, registered ali failed. | |
| product_group | string | Skupina izdelkov v registru, na primer batteries. | |
| granularity | string | model, serija ali kos. | |
| upi | string | Enolični identifikator izdelka kot URL https. Privzeto URL javnega potnega lista. | |
| correlation_id | string | ID korelacije, ki ga register dodeli ob oddaji. | |
| uri | string | Identifikator registracije, ki ga vrne register. | |
| backup_url | string | Povezava https do varnostne kopije, ki jo gosti ponudnik storitev DPP. | |
| submitted_at | date | Datum oddaje. | |
| registered_at | date | Datum registracije. | |
| error | string | Opis napake za neuspelo oddajo. |
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
zahteva passports:read QR-koda potnega lista kot datoteka: svg (privzeto), png (z blagovno znamko, pripravljena za tisk) ali pdf (pola nalepk).
| Parameter | Vrsta | 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 / Končne točkeSkladnost
/passports/{passportId}/compliance
zahteva passports:read Izvede sprotno preverjanje skladnosti potnega lista glede na obvezna polja njegovega sektorja in natančno poroča, kaj manjka.
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 / Končne točkeSektorji
/sectors
Sektorji, v katere je mogoče uvrstiti izdelek: sistemski sektorji platforme in vsi, ki jih je določil vaš delovni prostor. Pri ustvarjanju izdelkov uporabite id, pri pisanju polj potnega lista pa ključe polj.
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 / Končne točkeDokumenti
/products/{productId}/documents
zahteva products:read Izjave o skladnosti, poročila o preskusih in certifikati, priloženi izdelku. Javni dokument je povezan z vsakega objavljenega potnega lista izdelka.
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
zahteva products:write Večdelno nalaganje. PDF, Word, Excel, CSV, besedilo, PNG in JPEG do 10 MB, največ 20 na izdelek. Besedilo se izlušči v ozadju.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| file | file | obvezno | Dokument. |
| is_public | boolean | Prikaži na javnem potnem listu (privzeto 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}
zahteva products:write Preklopi, ali je dokument povezan z javnega potnega lista.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| is_public | boolean | obvezno |
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}
zahteva products:write Odstrani datoteko in njeno povezavo s potnim listom.
curl -X DELETE https://myproductpassport.eu/api/v1/products/512/documents/31 \
-H "Authorization: Bearer pk_your_key"{ "message": "Document deleted." }12 / Končne točkeDobavna veriga
/products/{productId}/supply-chain
zahteva products:read Koraki, prikazani na potnem listu izdelka, po vrsti.
curl https://myproductpassport.eu/api/v1/products/512/supply-chain \
-H "Authorization: Bearer pk_your_key"/products/{productId}/supply-chain
zahteva products:write Zamenja vse korake s seznamom, ki ga pošljete, v poslanem vrstnem redu. Za izpraznitev pošljite prazen seznam. Vrste korakov: raw_material, processing, manufacturing, assembly, packaging, distribution.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| steps | array | obvezno | Do 50 korakov. |
| steps[].step_type | string | obvezno | |
| steps[].supplier_name | string | obvezno | |
| 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 / Končne točkePrevodi
/passports/{id}/translations
zahteva passports:read Vsaka prevedena vrednost polja po jezikih z virom: auto (strojno, ustvarjeno ob objavi) ali 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}
zahteva passports:write Nastavi prevode za en jezik po ključu polja. Ročnega prevoda strojni nikoli ne prepiše. Za odstranitev pošljite prazen niz.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| fields | object | obvezno | field_key: prevedena vrednost |
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 / Končne točkeCelovitost in izvozi
/passports/{id}/integrity
zahteva passports:read Vsako objavljeno stanje potnega lista kot zapis, povezan v verigo zgoščenih vrednosti in podpisan z Ed25519: prstni odtis (SHA-256), vrednost verige in podpis. Javni ključi so na voljo na /.well-known/mpp-integrity-keys.json, zato lahko verigo preveri kdor koli.
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}
zahteva passports:read Celoten zapis, kot je bil podpisan, vključno s posnetkom stanja: kaj je potni list navajal v tistem trenutku, vse do zgoščene vrednosti vsake priložene datoteke.
curl https://myproductpassport.eu/api/v1/passports/96/integrity/1 \
-H "Authorization: Bearer pk_your_key"/passports/{id}/epcis
zahteva passports:read Potni list kot dokument GS1 EPCIS 2.0 JSON-LD: vzpostavitev izdelka (commissioning), vsak korak dobavne verige kot opazovanje, posamezne baterije in potni list za drugo življenje kot transformacija. Identifikatorji so URI-ji GS1 Digital Link, če ima izdelek GTIN.
curl https://myproductpassport.eu/api/v1/passports/96/epcis \
-H "Authorization: Bearer pk_your_key"15 / Končne točkeZahteve za dobavitelje
/passports/{id}/supplier-requests
zahteva passports:write Dobavitelju po e-pošti pošlje zasebno povezavo, prek katere v svojem jeziku izpolni polja, ki jih izberete. V potni list ne pride nič, dokler tega ne odobri nekdo iz vašega delovnega prostora.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| supplier_name | string | obvezno | |
| supplier_email | string | obvezno | |
| field_keys | array | obvezno | Ključi polj iz predloge potnega lista. |
| locale | string | Jezik e-sporočila in obrazca, npr. de. | |
| due_at | date | Rok za odgovor; če ni naveden, 14 dni. | |
| 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
zahteva passports:read Vse zahteve za potni list z njihovim stanjem.
curl https://myproductpassport.eu/api/v1/passports/96/supplier-requests \
-H "Authorization: Bearer pk_your_key"/supplier-requests/{id}
zahteva passports:read Ena zahteva z odgovori dobavitelja, opombo in imeni priloženih datotek.
curl https://myproductpassport.eu/api/v1/supplier-requests/12 \
-H "Authorization: Bearer pk_your_key"16 / Končne točkePoprodaja
/passports/{id}/items
zahteva items:write Kosom izdelka (iz katerega koli sektorja razen baterij, ki uporabljajo /units) dajte lastno serijsko številko: vsak dobi lastni naslov in kodo QR, skrito kodo pristnosti za svojo nalepko, lastnik pa ga lahko registrira. Pošljite do 10.000 kosov ali razpon. Z GTIN je naslov GS1 Digital Link /01/{gtin}/21/{serial}.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| items[].serial | string | obvezno | Največ 20 črk, števk, pik, vezajev ali podčrtajev. |
| items[].batch | string | Serija, največ 20 znakov. | |
| items[].manufactured_on | string | Datum izdelave, LLLL-MM-DD. | |
| range | object | Namesto items: prefix, start, count, digits in batch, na primer od SN-00001 do 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}
zahteva items:read Kos z naslovom, stanjem, podatkom, ali je registriran in do kdaj velja njegova garancija, s preverjanji pristnosti in zgodovino. Ključ z items:write dobi tudi skrito kodo za tiskanje. GET /passports/{id}/items jih navede (filtra status in 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}
zahteva items:write Nastavite status na stolen ali recalled in stran kosa bo vsakogar, ki ga skenira, opozorila z vašo opombo status_note; ukradenega kosa ni mogoče registrirati. retired izklopi stran kosa. Spremenite lahko tudi batch in manufactured_on.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| status | string | active, stolen, recalled ali retired. | |
| status_note | string | Prikazano na strani kosa, največ 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
zahteva aftersales:read Osebe, ki so registrirale vaše izdelke: ime, e-pošta, država, datum nakupa, trgovec, datumi garancije in ali so privolile v novice in ponudbe (marketing_consent=1 navede samo njih). Privzeto aktivne registracije; status=pending, transferred ali ended za ostale; since= za spremembe po datumu.
curl "https://myproductpassport.eu/api/v1/owner-registrations?marketing_consent=1&since=2026-10-01" \
-H "Authorization: Bearer pk_your_key"/service-requests
zahteva aftersales:read Popravila, garancijski zahtevki, vračila, nadomestni deli in vprašanja iz vaših potnih listov, najnovejši najprej, s filtroma status in type. GET /service-requests/{reference} doda pogovor.
curl "https://myproductpassport.eu/api/v1/service-requests?status=new" \
-H "Authorization: Bearer pk_your_key"/service-requests/{reference}/replies
zahteva aftersales:write Vaš odgovor je stranki poslan po e-pošti s povezavo do strani njenega zahtevka, v njenem jeziku. internal: true doda opombo, ki jo vidi le vaša ekipa. PATCH /service-requests/{reference} s stanjem ga premakne naprej (stranka je obveščena, ko je v obdelavi, rešen ali zaprt).
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| body | string | obvezno | Odgovor, največ 5.000 znakov. |
| internal | boolean | Opomba za vašo ekipo namesto odgovora. | |
| status | string | new, in_progress, waiting, resolved ali 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 / Končne točkeMnožično urejanje in slike
/products/bulk-fields
zahteva products:write Nastavi podatek o izdelku ali polje potnega lista za največ 5.000 izdelkov. mode je set, fill (samo kjer je prazno) ali clear. V okviru zahteve se posodobi do 100 izdelkov; večji nabori se uvrstijo v čakalno vrsto (202).
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| product_ids | array | obvezno | |
| target | string | obvezno | product | field |
| key | string | obvezno | |
| 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
zahteva products:write Večdelno nalaganje datoteke JPG, PNG ali WebP (do 15MB, največ 8 na izdelek). Prva slika je naslovna slika na javnem potnem listu.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| image | file | obvezno | |
| alt | string | Opis slike. |
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
zahteva products:write Posredujte image_ids v želenem vrstnem redu; prva slika postane naslovna.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| image_ids | array | obvezno |
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}
zahteva products:write Odstrani sliko in njeno datoteko.
curl -X DELETE https://myproductpassport.eu/api/v1/products/12/images/31 \
-H "Authorization: Bearer pk_your_key"18 / Končne točkeWebhooki
/webhooks
zahteva webhooks:manage Končne točke, registrirane za vaš delovni prostor. Skrivnosti tukaj niso vključene; za ogled skrivnosti pridobite eno končno točko.
curl https://myproductpassport.eu/api/v1/webhooks \
-H "Authorization: Bearer pk_your_key"/webhooks
zahteva webhooks:manage Registrira javni URL HTTPS za enega ali več dogodkov. Odgovor vključuje skrivnost za podpisovanje. Zasebni ali notranji gostitelji so zavrnjeni.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| url | string | obvezno | |
| events | array | obvezno | Kateri koli od spodaj navedenih dogodkov. |
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}
zahteva webhooks:manage curl https://myproductpassport.eu/api/v1/webhooks/3 \
-H "Authorization: Bearer pk_your_key"/webhooks/{id}
zahteva webhooks:manage Spremenite URL ali dogodke ali končno točko začasno ustavite in nadaljujte. Nadaljevanje ponastavi število neuspehov; končna točka se samodejno ustavi po 10 zaporednih neuspelih dostavah.
| Parameter | Vrsta | 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
zahteva webhooks:manage V čakalno vrsto doda dostavo webhook.test, da lahko preverite prejemnik in kodo podpisa.
curl -X POST https://myproductpassport.eu/api/v1/webhooks/3/test \
-H "Authorization: Bearer pk_your_key"{ "message": "Test delivery queued." }/webhooks/{id}/deliveries
zahteva webhooks:manage Nedavne dostave, od najnovejše, s statusom HTTP, ki ga je vrnila vaša končna točka, in prvimi 500 znaki odgovora.
| Parameter | Vrsta | Opis | |
|---|---|---|---|
| per_page | integer | Do 100. |
curl https://myproductpassport.eu/api/v1/webhooks/3/deliveries \
-H "Authorization: Bearer pk_your_key"/webhooks/{id}
zahteva webhooks:manage curl -X DELETE https://myproductpassport.eu/api/v1/webhooks/3 \
-H "Authorization: Bearer pk_your_key"{ "message": "Webhook endpoint deleted." }19 / DogodkiWebhooki
Namesto sprotnega poizvedovanja v aplikaciji registrirajte končno točko webhooka (stran Webhooks, na voljo od paketa Starter naprej) in MyProductPassport bo ob dogodkih pošiljal JSON z metodo POST na vaš URL:
| Dogodek | Sproži se, ko |
|---|---|
| product.created | Izdelek je ustvarjen (aplikacija, API ali uvoz CSV) |
| product.updated | Izdelek je posodobljen |
| product.deleted | Izdelek je izbrisan |
| passport.created | Potni list je ustvarjen |
| passport.published | Potni list postane aktiven |
| passport.archived | Potni list je arhiviran |
| supplier_request.submitted | Dobavitelj pošlje zahtevane podatke |
| owner.registered | Lastnik potrdi svojo registracijo |
| owner.transferred | Kos preide na novega registriranega lastnika |
| service_request.created | Stranka iz potnega lista pošlje servisni zahtevek |
| service_request.updated | Servisni zahtevek dobi odgovor ali novo stanje |
| item.status_changed | Kos je označen kot ukraden, odpoklican ali umaknjen iz uporabe ali pa je označitev preklicana |
| item.verification_failed | Branje varne oznake ne uspe, napačne kode se kopičijo ali se serijska številka pojavi na preveč mestih |
| webhook.test | Iz aplikacije pošljete preizkusno dostavo |
Vsaka dostava je ovojnica JSON: ID dostave (pri ponovnih poskusih se pošlje isti ID, da lahko odstranite dvojnike), dogodek, številka poskusa, časovni žig in podatki o dogodku. Dogodki potnih listov vsebujejo uuid in javni URL potnega lista, zato drugo zahtevo potrebujete le redko:
{
"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"}
}
}Glave vsebujejo ime dogodka, ID dostave, časovni žig Unix in podpis HMAC neobdelanega telesa, da lahko preverite, da prihaja od nas, in zavrnete ponovitve:
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>Odgovorite s katero koli kodo 2xx v 10 sekundah. Vse drugo se ponovi petkrat v približno 90 minutah (30 s, 1 min, 5 min, 15 min, 1 h); po 10 zaporednih neuspehih se končna točka začasno ustavi, dokler je znova ne omogočite.
$expected = 'sha256=' . hash_hmac('sha256', $rawBody, $endpointSecret);
abort_unless(hash_equals($expected, $request->header('X-MPP-Signature')), 401);