API referenca
Sve u MyProductPassportu dostupno je putem REST API-ja s autentifikacijom ključem: izrađujte proizvode, generirajte i objavljujte digitalne putovnice proizvoda, šaljite aktualne podatke o baterijama i provjeravajte usklađenost izravno iz svog ERP-a, PIM-a ili build pipelinea.
01 / PočetakAutentifikacija
Svaki se zahtjev autentificira API ključem poslanim kao Bearer token. Ključevi se izrađuju u aplikaciji u odjeljku API ključevi, prikazuju se jednom i pohranjuju u obliku sažetka; svaki ključ ima vlastiti skup dopuštenja, neobavezan popis dopuštenih IP adresa i neobavezan datum isteka. Ključevi se mogu mijenjati bez prekida rada.
Authorization: Bearer pk_your_api_keyDopuštenja se dodjeljuju po ključu, pa integracija dobiva samo ono što joj treba:
| Dopuštenje | Odobrenja |
|---|---|
| products:read | Čitanje proizvoda |
| products:write | Izrada, ažuriranje i brisanje proizvoda |
| passports:read | Čitanje putovnica |
| passports:write | Generiraj putovnice |
| passports:publish | Objava i arhiviranje putovnica |
| webhooks:manage | Izrada, testiranje i uklanjanje krajnjih točaka webhooka |
| 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 / PočetakOgraničenja zahtjeva
Ograničenja vrijede po ključu, po minuti, a određuje ih paket:
| Paket | Zahtjeva / minuti |
|---|---|
| Besplatno | 30 |
| Micro | 60 |
| E-etiketa | 60 |
| Starter | 120 |
| Professional | 300 |
| Business | 600 |
| Battery | 600 |
Svaki odgovor sadrži zaglavlja X-RateLimit-Limit i X-RateLimit-Remaining. Prekoračenje ograničenja vraća 429:
{ "error": "Rate limit exceeded.", "limit": 300, "retry_after": 60 }03 / PočetakPogreške
Pogreške su JSON s uobičajenim kodom statusa. Najčešće:
| Status | Značenje | Primjer tijela |
|---|---|---|
| 401 | Ključ nedostaje, nije valjan, opozvan je ili je istekao | {"error": "Invalid or revoked API key."} |
| 403 | Ključu nedostaje dopuštenje, IP adresa nije na popisu dopuštenih ili je dosegnuto ograničenje paketa | {"message": "API key does not have 'products:write' permission."} |
| 404 | Resurs ne postoji u vašem radnom prostoru | {"message": "Not found."} |
| 422 | Provjera valjanosti nije uspjela | {"message": "…", "errors": {"gtin": ["…"]}} |
| 429 | Prekoračeno ograničenje zahtjeva | {"error": "Rate limit exceeded."} |
04 / Prvi koraciPaginacija
Krajnje točke popisa vraćaju 25 stavki po stranici sa standardnim objektima links i meta. Proslijedite ?page=2 za kretanje kroz zbirku.
05 / PočetakPoveznica za AI asistenta (MCP)
Povežite Claude, Cursor ili bilo kojeg asistenta koji podržava Model Context Protocol i jednostavnim riječima zamolite ga da izrađuje proizvode, ispunjava putovnice onim što mu kažete i provjerava što još nedostaje. Koristi API ključ s njegovim dopuštenjima i ograničenjem zahtjeva. Može izrađivati nacrte i ispunjavati polja; nikad ništa ne objavljuje, ne arhivira niti briše: to ostaje vama u 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"]
}
}
}Alati koje nudi:
| Alat | Što radi |
|---|---|
| list_products | Proizvodi radnog prostora, od najnovijih, 25 po stranici, sa sektorom i najnovijom putovnicom. |
| get_product | Jedan proizvod s podacima, sektorom, regulatornim odjeljcima i najnovijom putovnicom. |
| list_sectors | Predlošci sektora koje proizvod može koristiti (tekstil, elektronika, baterije, vino i drugo), s njihovim ID-ovima. Sektor proizvoda određuje koja su polja putovnice obvezna. |
| create_product | Dodaje proizvod u radni prostor. Upotrijebite sector_id iz list_sectors. compliance_sections dodaje regulatorne odjeljke putovnici: gpsr, epr, france, chemicals, eudr. |
| list_passports | Putovnice radnog prostora, od najnovijih, 25 po stranici, sa statusom (draft, published, archived), postotkom potpunosti i javnom adresom. |
| get_passport | Jedna putovnica: status, verzija, postotak potpunosti, javna adresa i poveznice na QR kod. |
| create_passport | Izrađuje nacrt putovnice za proizvod. Ne objavljuje se: objavljuje je osoba u aplikaciji. |
| get_passport_fields | Što putovnica traži: ključevi obveznih i neobveznih polja, značenje svakog (oznaka, opis, primjer), postojeće vrijednosti i obvezna polja koja nedostaju. |
| update_passport_fields | Upisuje vrijednosti polja u nacrt ili objavljenu putovnicu (objavljena se ažurira na mjestu: ista adresa, isti QR kod). Ključevi iz get_passport_fields; prazan tekst uklanja vrijednost. Upisujte samo činjenice koje navodi korisnik ili njegovi dokumenti. |
| get_compliance | Potpunost putovnice: postotak, status i obvezna polja koja još nedostaju. |
06 / Krajnje točkeRačun
/me
Vraća autentificirani račun, razinu pretplate i koliko je ograničenja proizvoda iskorišteno. Korisno kao provjera veze.
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 / Krajnje točkeProizvodi
/products
zahtijeva products:read Prikazuje proizvode u vašem radnom prostoru od najnovijih, 25 po stranici. Svaki proizvod uključuje svoj sektor i sažetak najnovije putovnice.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| page | integer | Broj stranice. |
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
zahtijeva products:write Izrađuje jedan proizvod. Vraća 403 ako je ograničenje proizvoda paketa iskorišteno.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| name | string | obavezno | Naziv proizvoda, do 255 znakova. |
| sku | string | Vaš interni SKU, do 100 znakova. | |
| gtin | string | GTIN-8, 12, 13 ili 14 (samo znamenke). | |
| brand | string | Marka prikazana na javnoj putovnici. | |
| description | string | Do 2.000 znakova. | |
| category | string | Kategorija kao slobodni tekst. Zadano "general". | |
| sector_id | integer | ID sektora, koji odabire predložak polja putovnice. | |
| country_of_origin | string | Oznaka zemlje, npr. "PT". | |
| weight | number | Neto masa. | |
| weight_unit | string | Jedno od kg, g, lb, oz. Zadano kg. | |
| materials | array | Objekti {name, percentage 0-100}. | |
| has_packaging | boolean | Dodaje u putovnicu polja predloška za ambalažu (ključevi koji počinju s pkg_), pod istim QR kodom. |
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
zahtijeva products:write Izrađuje do 100 proizvoda u jednom pozivu. Cijela serija odbija se s 403 ako bi premašila vaše preostalo ograničenje proizvoda. Za kataloge s tisućama proizvoda pozivajte ovu krajnju točku u petlji ili koristite CSV uvoz u aplikaciji.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| products | array | obavezno | 1 do 100 objekata proizvoda s istim poljima kao Izrada proizvoda (bez materijala). |
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}
zahtijeva products:read Vraća jedan proizvod s njegovim sektorom i sažetkom najnovije putovnice. 404 ako ID nije u vašem radnom prostoru.
curl https://myproductpassport.eu/api/v1/products/512 \
-H "Authorization: Bearer pk_your_key"/products/{id}
zahtijeva products:write Djelomično ažurira proizvod. Pošaljite samo polja koja želite promijeniti; popis polja jednak je kao kod Izradi proizvod.
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}
zahtijeva products:write Meko briše proizvod. Objavljene putovnice proizvoda i dalje rade, pa ispisani QR kodovi nikada ne ostaju bez stranice.
curl -X DELETE https://myproductpassport.eu/api/v1/products/512 \
-H "Authorization: Bearer pk_your_key"{ "message": "Product deleted." }08 / Krajnje točkePutovnice
/passports
zahtijeva passports:read Prikazuje putovnice od najnovijih, 25 po stranici, sa sažetkom proizvoda i svim poljima putovnice.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| page | integer | Broj stranice. |
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
zahtijeva passports:write Generira nacrt putovnice za proizvod i unaprijed popunjava polja iz podataka o proizvodu i predloška sektora. Vraća nacrt s ocjenom usklađenosti. Proizvod koji već ima aktivnu putovnicu vraća 409 s tom putovnicom: ispravite je s PUT /passports/{id}/fields, čime se zadržavaju njezina adresa i QR kod.
curl -X POST https://myproductpassport.eu/api/v1/products/512/passports \
-H "Authorization: Bearer pk_your_key"/passports/{id}
zahtijeva passports:read Vraća jednu putovnicu s proizvodom, poljima, javnim URL-om i GS1 Digital Linkom.
curl https://myproductpassport.eu/api/v1/passports/96 \
-H "Authorization: Bearer pk_your_key"/passports/{id}/publish
zahtijeva passports:publish Objavljuje nacrt putovnice i aktivira njezinu javnu stranicu i QR kod. Objaviti se mogu samo nacrti; sve ostalo vraća 404.
curl -X POST https://myproductpassport.eu/api/v1/passports/96/publish \
-H "Authorization: Bearer pk_your_key"/passports/{id}/archive
zahtijeva passports:publish Arhivira putovnicu i povlači njezinu javnu stranicu iz upotrebe.
curl -X POST https://myproductpassport.eu/api/v1/passports/96/archive \
-H "Authorization: Bearer pk_your_key"/passports/bulk-publish
zahtijeva passports:publish Objavljuje do 50 nacrta putovnica u jednom pozivu i izvješćuje o rezultatu za svaku putovnicu, pa jedna pogreška nikad ne prekida seriju.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| passport_ids | array | obavezno | 1 do 50 ID-ova putovnica. |
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
zahtijeva passports:write Za proizvod pripremljen za ponovnu uporabu, prenamijenjen ili ponovno proizveden, Uredba o baterijama (članak 77. stavak 7.) zahtijeva novu putovnicu povezanu s izvornom. Time se izrađuje novi zapis proizvoda i nacrt putovnice unaprijed ispunjen iz objavljene, s poveznicom na nju. Izvornik ostaje aktivan i obje putovnice prikazuju poveznicu. Novu objavite s POST /passports/{id}/publish.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| stage | string | obavezno | prepared_for_reuse, repurposed ili 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
zahtijeva passports:read Vraća ključeve polja koje traži predložak sektora putovnice (obvezne i neobvezne), trenutačne vrijednosti i koji obvezni ključevi još nedostaju. Upotrijebite ga za izradu sadržaja 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
zahtijeva passports:write Upisuje bilo koji skup vrijednosti polja u nacrt ili aktivnu putovnicu: cijeli skup iz Priloga XIII. za bateriju, polja predloška sektora ili vlastite ključeve. Pošaljite samo ključeve koje želite promijeniti; vrijednost null ili prazna uklanja to polje. Aktivna putovnica ažurira se na mjestu, njezina adresa i QR kod se ne mijenjaju, a strojni prijevodi ponovno se generiraju. Usklađenost se ponovno ocjenjuje. Nacrt se ovim pozivom ne objavljuje; upotrijebite POST /passports/{id}/publish.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| fields | object | obavezno | Mapa ključa polja na vrijednost. Ključevi su mala slova, znamenke i podvlake; vrijednosti do 5000 znakova. Do 200 ključeva po pozivu. |
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
zahtijeva passports:write Šalje vlastite podatke ove baterije (točka 4. Priloga XIII. Uredbe (EU) 2023/1542) na objavljenu putovnicu, za BMS i sustave voznih parkova. Pošaljite bilo koji podskup polja u nastavku; usklađenost se ponovno provjerava nakon ažuriranja. Te se vrijednosti prikazuju samo posjetiteljima koje je vlasnik putovnice odobrio (članak 77. stavak 2.), nikad na javnoj stranici. capacity_fade, power_capability i internal_resistance pohranjuju se kao trenutačna očitanja ove baterije (current_*), odvojeno od izvornih vrijednosti modela.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| state_of_health | string | npr. "97% pri 412 ciklusa". | |
| state_of_certified_energy | string | Preostala certificirana energija (baterije električnih vozila). | |
| battery_status | string | original, repurposed, re-used, remanufactured ili waste. | |
| capacity_fade | string | Dosadašnji gubitak kapaciteta. Pohranjuje se kao current_capacity_fade. | |
| power_capability | string | Trenutačna snaga. Pohranjuje se kao current_power_capability. | |
| internal_resistance | string | Izmjereni unutarnji otpor. Pohranjuje se kao current_internal_resistance. | |
| use_data | string | Ciklusi, negativni događaji, temperatura i stanje napunjenosti, do 5000 znakova. |
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
zahtijeva passports:write Svaka baterija treba vlastitu putovnicu (Uredba (EU) 2023/1542, članak 77. stavak 1.). Registrirajte do 10 000 baterija jednog modela u jednom pozivu, svaku s vlastitim serijskim brojem (do 20 slova, znamenki, točaka, crtica ili podvlaka) te po želji manufacturing_date, battery_status i njezinim podacima iz točke 4. Priloga XIII. Postojeći serijski brojevi se ažuriraju; vrijednosti koje izostavite zadržavaju se. Ako proizvod ima GTIN, adresa svake baterije je njezin GS1 Digital Link, /01/{gtin}/21/{serial}. Podaci iz točke 4 prikazuju se samo promatračima koje vlasnik odobri.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| units[].serial | string | obavezno | Serijski broj baterije. |
| units[].manufacturing_date | string | Mjesec i godina, npr. "2026-09". | |
| units[].battery_status | string | original ili waste. Promjena statusa zahtijeva vrijednosti izmjerene pri njoj (Prilog XIII. točka 4.(a)); waste zahtijeva i responsible_party_type (producer, pro ili waste_operator), responsible_party_name i responsible_party_contact (članak 77. stavak 7.). recycled, uz recycled_at i recycler_name, okončava putovnicu (članak 77. stavak 8.). Prenamijenjena, ponovno upotrijebljena ili ponovno proizvedena baterija dobiva novu putovnicu: POST /passports/{id}/units/{serial}/successor. | |
| units[].state_of_health | string | Također 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 i 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}
zahtijeva passports:write Za sustav upravljanja baterijom koji šalje podatke jedne baterije: bilo što od battery_status, state_of_health, state_of_certified_energy, current_capacity_fade, current_power_capability, current_internal_resistance i use_data. Za čitanje upotrijebite GET na istoj putanji ili GET /passports/{id}/units za popis (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
zahtijeva passports:read Prilog XIII. točka 4. podtočka (a) zahtijeva vrijednosti radnih svojstava i trajnosti kad se baterija stavlja na tržište i kad joj se promijeni status. Ta se očitanja čuvaju onakva kakva jesu, što god se kasnije pošalje; pošaljite record_snapshot: true uz PATCH kako biste sačuvali i periodično očitanje.
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
zahtijeva passports:write Članak 77. stavak 7.: baterija koja je pripremljena za ponovnu uporabu, prenamijenjena ili ponovno proizvedena ima novu putovnicu povezanu s izvornom. Time se baterija ponovno registrira, s novim serijskim brojem i identifikatorom, pod modelom baterije drugog života u vašem radnom prostoru (izrađenim iz ovog modela ako još ne postoji), dvije se putovnice povezuju i čuvaju se vrijednosti izmjerene pri promjeni. Izvorna baterija zadržava svoju putovnicu. Dovršite i objavite model drugog života putem POST /passports/{id}/publish.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| stage | string | obavezno | prepared_for_reuse, repurposed ili remanufactured. |
| values | object | obavezno | Vrijednosti izmjerene pri promjeni: barem po jedna iz svakog para remaining_capacity_ah ili current_capacity_fade, current_power_capability ili power_fade te current_internal_resistance ili internal_resistance_increase, kao i expected_lifetime_cycles_remaining (Prilog IV. dio A). |
| serial | string | Novi serijski broj. Zadano: izvorni serijski broj uz nastavak -RU, -RP ili -RM. | |
| measured_at | string | Kada su vrijednosti izmjerene. | |
| member_state | string | Dvoslovna oznaka države članice u kojoj je ispitano zdravstveno stanje (članak 73. stavak 1. točka (a)). | |
| target_passport_id | integer | Postojeći model drugog života ovog modela baterije pod kojim je treba registrirati. |
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
zahtijeva passports:write Pohranjuje podnošenje u registar DPP-a EU-a i njegov rezultat na putovnici: status, korelacijski ID, registracijski identifikator koji vraća registar i neobaveznu poveznicu na sigurnosnu kopiju koju hostira pružatelj usluga DPP-a. Sama registracija obavlja se u registru Komisije (web obrazac ili učitavanje datoteke); ovo čuva rezultat uz putovnicu. GET /passports/{id} vraća isti blok pod registry.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| status | string | not_submitted, submitted, registered ili failed. | |
| product_group | string | Grupa proizvoda u registru, na primjer batteries. | |
| granularity | string | model, serija ili artikl. | |
| upi | string | Jedinstveni identifikator proizvoda kao https URL. Zadano je URL javne putovnice. | |
| correlation_id | string | ID korelacije koji registar dodjeljuje pri podnošenju. | |
| uri | string | Identifikator registracije koji je vratio registar. | |
| backup_url | string | https poveznica na sigurnosnu kopiju koju hostira pružatelj DPP usluga. | |
| submitted_at | date | Datum podnošenja. | |
| registered_at | date | Datum registracije. | |
| error | string | Opis pogreške za neuspjelo podnošenje. |
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
zahtijeva passports:read QR kod putovnice kao datoteka: svg (zadano), png (s brendom, spreman za ispis) ili pdf (list naljepnica).
| Parametar | 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 / Krajnje točkeUsklađenost
/passports/{passportId}/compliance
zahtijeva passports:read Provodi provjeru usklađenosti putovnice uživo prema obveznim poljima njezina sektora i točno izvješćuje što nedostaje.
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 / Krajnje točkeSektori
/sectors
Sektori u koje se proizvod može razvrstati: sistemski sektori platforme i svi koje je definirao vaš radni prostor. Koristite id pri izradi proizvoda, a ključeve polja pri upisu polja putovnice.
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 / Krajnje točkeDokumenti
/products/{productId}/documents
zahtijeva products:read Izjave o sukladnosti, izvješća o ispitivanju i certifikati priloženi proizvodu. Javni dokument povezan je sa svake objavljene putovnice proizvoda.
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
zahtijeva products:write Višedijelni prijenos. PDF, Word, Excel, CSV, tekst, PNG i JPEG do 10 MB, najviše 20 po proizvodu. Tekst se izdvaja u pozadini.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| file | file | obavezno | Dokument. |
| is_public | boolean | Prikaži na javnoj putovnici (zadano 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}
zahtijeva products:write Uključuje ili isključuje poveznicu na dokument s javne putovnice.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| is_public | boolean | obavezno |
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}
zahtijeva products:write Uklanja datoteku i njezinu poveznicu s putovnicom.
curl -X DELETE https://myproductpassport.eu/api/v1/products/512/documents/31 \
-H "Authorization: Bearer pk_your_key"{ "message": "Document deleted." }12 / Krajnje točkeLanac opskrbe
/products/{productId}/supply-chain
zahtijeva products:read Koraci prikazani na putovnici proizvoda, redom.
curl https://myproductpassport.eu/api/v1/products/512/supply-chain \
-H "Authorization: Bearer pk_your_key"/products/{productId}/supply-chain
zahtijeva products:write Zamjenjuje sve korake popisom koji pošaljete, redoslijedom slanja. Pošaljite prazan popis za brisanje. Vrste koraka: raw_material, processing, manufacturing, assembly, packaging, distribution.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| steps | array | obavezno | Do 50 koraka. |
| steps[].step_type | string | obavezno | |
| steps[].supplier_name | string | obavezno | |
| 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 / Krajnje točkePrijevodi
/passports/{id}/translations
zahtijeva passports:read Svaka prevedena vrijednost polja po jeziku, s izvorom: auto (strojno, izrađeno pri objavi) ili 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}
zahtijeva passports:write Postavlja prijevode za jedan jezik prema ključu polja. Ručni prijevod nikada se ne prepisuje strojnim. Pošaljite prazan niz za uklanjanje prijevoda.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| fields | object | obavezno | field_key: prevedena vrijednost |
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 / Krajnje točkeIntegritet i izvozi
/passports/{id}/integrity
zahtijeva passports:read Svako objavljeno stanje putovnice kao zapis povezan lancem hash vrijednosti i potpisan algoritmom Ed25519: otisak (SHA-256), vrijednost lanca i potpis. Javni ključevi nalaze se na /.well-known/mpp-integrity-keys.json, tako da svatko može provjeriti lanac.
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}
zahtijeva passports:read Potpuni zapis onakav kakav je potpisan, uključujući snimku stanja: što je putovnica navodila u tom trenutku, sve do hash vrijednosti svake priložene datoteke.
curl https://myproductpassport.eu/api/v1/passports/96/integrity/1 \
-H "Authorization: Bearer pk_your_key"/passports/{id}/epcis
zahtijeva passports:read Putovnica kao dokument GS1 EPCIS 2.0 u formatu JSON-LD: puštanje artikla u uporabu, svaki korak lanca opskrbe kao opažanje, pojedinačne baterije te putovnica za drugi vijek kao transformacija. Identifikatori su URI-ji GS1 Digital Link kada proizvod ima GTIN.
curl https://myproductpassport.eu/api/v1/passports/96/epcis \
-H "Authorization: Bearer pk_your_key"15 / Krajnje točkeZahtjevi dobavljačima
/passports/{id}/supplier-requests
zahtijeva passports:write Šalje dobavljaču e-poruku s privatnom poveznicom za popunjavanje odabranih polja na njegovu jeziku. Ništa ne dospijeva u putovnicu dok to ne odobri netko iz vašeg radnog prostora.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| supplier_name | string | obavezno | |
| supplier_email | string | obavezno | |
| field_keys | array | obavezno | Ključevi polja iz predloška putovnice. |
| locale | string | Jezik e-poruke i obrasca, npr. de. | |
| due_at | date | Rok za odgovor; 14 dana ako se ne navede. | |
| 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
zahtijeva passports:read Svi zahtjevi za putovnicu s njihovim statusom.
curl https://myproductpassport.eu/api/v1/passports/96/supplier-requests \
-H "Authorization: Bearer pk_your_key"/supplier-requests/{id}
zahtijeva passports:read Jedan zahtjev s odgovorima dobavljača, napomenom i nazivima priloženih datoteka.
curl https://myproductpassport.eu/api/v1/supplier-requests/12 \
-H "Authorization: Bearer pk_your_key"16 / Krajnje točkePostprodaja
/passports/{id}/items
zahtijeva items:write Dajte artiklima proizvoda (bilo kojeg sektora osim baterija, koje koriste /units) vlastiti serijski broj: svaki dobiva vlastitu adresu i QR kod, skriveni kod autentičnosti za naljepnicu, a vlasnik ga može registrirati. Pošaljite do 10.000 artikala ili raspon. S GTIN-om adresa je GS1 Digital Link /01/{gtin}/21/{serial}.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| items[].serial | string | obavezno | Najviše 20 slova, znamenki, točaka, crtica ili podvlaka. |
| items[].batch | string | Serija, najviše 20 znakova. | |
| items[].manufactured_on | string | Datum proizvodnje, GGGG-MM-DD. | |
| range | object | Umjesto items: prefix, start, count, digits i batch, primjerice 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}
zahtijeva items:read Artikl s adresom, statusom, podatkom je li registriran i do kada vrijedi jamstvo, provjerama autentičnosti i poviješću. Ključ s items:write dobiva i skriveni kod za ispis. GET /passports/{id}/items ih navodi (filtri status i 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}
zahtijeva items:write Postavite status na stolen ili recalled i njegova stranica upozorava svakoga tko ga skenira, uz vaš status_note; ukradeni artikl ne može se registrirati. retired isključuje stranicu. Mogu se mijenjati i batch i manufactured_on.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| status | string | active, stolen, recalled ili retired. | |
| status_note | string | Prikazuje se na stranici artikla, najviše 500 znakova. |
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
zahtijeva aftersales:read Osobe koje su registrirale vaše proizvode: ime, e-pošta, država, datum kupnje, trgovac, datumi jamstva i jesu li pristale na novosti i ponude (marketing_consent=1 navodi samo njih). Zadano aktivne registracije; status=pending, transferred ili ended za ostale; since= za promjene nakon datuma.
curl "https://myproductpassport.eu/api/v1/owner-registrations?marketing_consent=1&since=2026-10-01" \
-H "Authorization: Bearer pk_your_key"/service-requests
zahtijeva aftersales:read Popravci, jamstveni zahtjevi, povrati, rezervni dijelovi i pitanja iz vaših putovnica, najnoviji prvi, s filtrima status i type. GET /service-requests/{reference} dodaje razgovor.
curl "https://myproductpassport.eu/api/v1/service-requests?status=new" \
-H "Authorization: Bearer pk_your_key"/service-requests/{reference}/replies
zahtijeva aftersales:write Vaš odgovor šalje se kupcu e-poštom s poveznicom na stranicu njegova zahtjeva, na njegovu jeziku. internal: true dodaje bilješku vidljivu samo vašem timu. PATCH /service-requests/{reference} sa statusom pomiče ga dalje (kupac je obaviješten kada je u obradi, riješen ili zatvoren).
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| body | string | obavezno | Odgovor, najviše 5.000 znakova. |
| internal | boolean | Bilješka za vaš tim umjesto odgovora. | |
| status | string | new, in_progress, waiting, resolved ili 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 / Krajnje točkeSkupne izmjene i slike
/products/bulk-fields
zahtijeva products:write Postavlja podatak o proizvodu ili polje putovnice na najviše 5.000 proizvoda. mode je set, fill (samo gdje je prazno) ili clear. Do 100 proizvoda ažurira se unutar zahtjeva; veći skupovi stavljaju se u red čekanja (202).
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| product_ids | array | obavezno | |
| target | string | obavezno | product | field |
| key | string | obavezno | |
| 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
zahtijeva products:write Višedijelni prijenos datoteke JPG, PNG ili WebP (do 15MB, 8 po proizvodu). Prva slika je naslovna slika na javnoj putovnici.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| image | file | obavezno | |
| 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
zahtijeva products:write Proslijedite image_ids željenim redoslijedom; prva slika postaje naslovna.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| image_ids | array | obavezno |
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}
zahtijeva products:write Uklanja sliku i njezinu datoteku.
curl -X DELETE https://myproductpassport.eu/api/v1/products/12/images/31 \
-H "Authorization: Bearer pk_your_key"18 / Krajnje točkeWebhookovi
/webhooks
zahtijeva webhooks:manage Krajnje točke registrirane za vaš radni prostor. Tajne ovdje nisu uključene; dohvatite jednu krajnju točku da biste vidjeli njezinu tajnu.
curl https://myproductpassport.eu/api/v1/webhooks \
-H "Authorization: Bearer pk_your_key"/webhooks
zahtijeva webhooks:manage Registrira javni HTTPS URL za jedan ili više događaja. Odgovor uključuje tajni ključ za potpis. Privatni ili interni hostovi se odbijaju.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| url | string | obavezno | |
| events | array | obavezno | Bilo koji od događaja navedenih u nastavku. |
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}
zahtijeva webhooks:manage curl https://myproductpassport.eu/api/v1/webhooks/3 \
-H "Authorization: Bearer pk_your_key"/webhooks/{id}
zahtijeva webhooks:manage Promijenite URL ili događaje, ili pauzirajte i nastavite krajnju točku. Nastavak poništava broj neuspjeha; krajnja točka se automatski pauzira nakon 10 uzastopnih neuspjelih isporuka.
| Parametar | 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
zahtijeva webhooks:manage Stavlja u red isporuku webhook.test kako biste provjerili prijemnik i kod za potpis.
curl -X POST https://myproductpassport.eu/api/v1/webhooks/3/test \
-H "Authorization: Bearer pk_your_key"{ "message": "Test delivery queued." }/webhooks/{id}/deliveries
zahtijeva webhooks:manage Nedavne isporuke, od najnovijih, s HTTP statusom koji je vratila vaša krajnja točka i prvih 500 znakova tijela odgovora.
| Parametar | Vrsta | Opis | |
|---|---|---|---|
| per_page | integer | Do 100. |
curl https://myproductpassport.eu/api/v1/webhooks/3/deliveries \
-H "Authorization: Bearer pk_your_key"/webhooks/{id}
zahtijeva webhooks:manage curl -X DELETE https://myproductpassport.eu/api/v1/webhooks/3 \
-H "Authorization: Bearer pk_your_key"{ "message": "Webhook endpoint deleted." }19 / DogađajiWebhookovi
Umjesto periodičnih upita, registrirajte krajnju točku webhooka u aplikaciji (stranica Webhooks, dostupna od paketa Starter naviše) i MyProductPassport će slati JSON metodom POST na vaš URL kako se događaji zbivaju:
| Događaj | Pokreće se kada |
|---|---|
| product.created | Proizvod je izrađen (aplikacija, API ili CSV uvoz) |
| product.updated | Proizvod je ažuriran |
| product.deleted | Proizvod je izbrisan |
| passport.created | Putovnica se generira |
| passport.published | Putovnica postaje aktivna |
| passport.archived | Putovnica se arhivira |
| supplier_request.submitted | Dobavljač šalje podatke koje ste zatražili |
| owner.registered | Vlasnik potvrđuje svoju registraciju |
| owner.transferred | Artikl prelazi na novog registriranog vlasnika |
| service_request.created | Kupac šalje servisni zahtjev iz putovnice |
| service_request.updated | Servisni zahtjev dobiva odgovor ili novi status |
| item.status_changed | Artikl je označen kao ukraden, opozvan ili povučen iz upotrebe, ili je oznaka uklonjena |
| item.verification_failed | Očitanje zaštićene oznake ne uspije, pogrešni se kodovi gomilaju ili se serijski broj pojavljuje na previše mjesta |
| webhook.test | Iz aplikacije šaljete probnu isporuku |
Svaka isporuka je JSON omotnica: ID isporuke (isti ID ponovno se šalje pri ponovnim pokušajima kako biste mogli ukloniti duplikate), događaj, broj pokušaja, vremenska oznaka i podaci o događaju. Događaji putovnica sadrže uuid putovnice i javni URL, pa vam drugi zahtjev rijetko treba:
{
"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"}
}
}Zaglavlja sadrže naziv događaja, ID isporuke, Unix vremensku oznaku i HMAC potpis neobrađenog tijela, tako da možete provjeriti da dolazi od nas i odbiti ponavljanja:
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 bilo kojim kodom 2xx u roku od 10 sekundi. Sve ostalo ponavlja se pet puta tijekom otprilike 90 minuta (30 s, 1 min, 5 min, 15 min, 1 h); nakon 10 uzastopnih neuspjeha krajnja točka se pauzira dok je ponovno ne omogućite.
$expected = 'sha256=' . hash_hmac('sha256', $rawBody, $endpointSecret);
abort_unless(hash_equals($expected, $request->header('X-MPP-Signature')), 401);