Prvi rok EU-a za DPP (Baterije): 130 dana Uskladite se sada
Jezik
EN DE FR IT ES NL PL BG CS DA EL ET FI HR HU LT LV MT PT RO SK SL SV
Proizvod
Značajke Postprodaja Kako funkcionira Demo Enterprise Cijene
Sektori
Svi sektori Tekstil Elektronika Baterije
Resursi
Blog Usporedite DPP softver Zahtjevi po zemljama Procjena pripravnosti Provjera ekoloških tvrdnji Besplatna preuzimanja Pojmovnik
Tvrtka
Partneri Kontakt
Prijava Započnite besplatno
Razvojni programeri / REST API

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.

v1 https://myproductpassport.eu/api/v1 Započnite besplatno OpenAPI specifikacija ↓

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.

Zaglavlje zahtjeva
Authorization: Bearer pk_your_api_key
U svakom paketu. API ključevi mogu se izraditi i koristiti u svakom paketu, uključujući besplatni. Paket određuje koliko zahtjeva u minuti ključ smije poslati (u nastavku) i koliko proizvoda i putovnica radni prostor smije imati.
Testni način rada. Testni ključ (pk_test_...) izvršava svaki poziv točno kao i aktivni ključ, s istom provjerom valjanosti, istim ID-ovima i odgovorima, a zatim ga poništava: ništa se ne sprema, ne šalje se ni e-poruka ni webhook i ne zadržava se nijedna datoteka. Odgovori sadrže "test_mode": true i zaglavlje X-MPP-Mode: test. Izradite i testirajte integraciju na svojim stvarnim podacima, a zatim je prebacite na aktivni ključ.

Dopuštenja se dodjeljuju po ključu, pa integracija dobiva samo ono što joj treba:

DopuštenjeOdobrenja
products:readČitanje proizvoda
products:writeIzrada, ažuriranje i brisanje proizvoda
passports:readČitanje putovnica
passports:writeGeneriraj putovnice
passports:publishObjava i arhiviranje putovnica
webhooks:manageIzrada, testiranje i uklanjanje krajnjih točaka webhooka
items:readRead individual items and their history
items:writeAdd, update and flag individual items
aftersales:readRead owner registrations and service requests
aftersales:writeUpdate service requests and reply to customers

02 / PočetakOgraničenja zahtjeva

Ograničenja vrijede po ključu, po minuti, a određuje ih paket:

PaketZahtjeva / minuti
Besplatno30
Micro60
E-etiketa60
Starter120
Professional300
Business600
Battery600

Svaki odgovor sadrži zaglavlja X-RateLimit-Limit i X-RateLimit-Remaining. Prekoračenje ograničenja vraća 429:

429 Too Many Requests
{ "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:

StatusZnačenjePrimjer tijela
401Ključ nedostaje, nije valjan, opozvan je ili je istekao{"error": "Invalid or revoked API key."}
403Ključ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."}
404Resurs ne postoji u vašem radnom prostoru{"message": "Not found."}
422Provjera valjanosti nije uspjela{"message": "…", "errors": {"gtin": ["…"]}}
429Prekorač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.

Adresa poslužitelja (Streamable HTTP)
https://myproductpassport.eu/api/mcp
Claude Code
claude mcp add --transport http myproductpassport https://myproductpassport.eu/api/mcp \
  --header "Authorization: Bearer pk_live_your_key"
Cursor (mcp.json)
{
  "mcpServers": {
    "myproductpassport": {
      "url": "https://myproductpassport.eu/api/mcp",
      "headers": { "Authorization": "Bearer pk_live_your_key" }
    }
  }
}
Claude Desktop i drugi klijenti koji pokreću lokalni poslužitelj
{
  "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_productsProizvodi radnog prostora, od najnovijih, 25 po stranici, sa sektorom i najnovijom putovnicom.
get_productJedan proizvod s podacima, sektorom, regulatornim odjeljcima i najnovijom putovnicom.
list_sectorsPredloš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_productDodaje proizvod u radni prostor. Upotrijebite sector_id iz list_sectors. compliance_sections dodaje regulatorne odjeljke putovnici: gpsr, epr, france, chemicals, eudr.
list_passportsPutovnice radnog prostora, od najnovijih, 25 po stranici, sa statusom (draft, published, archived), postotkom potpunosti i javnom adresom.
get_passportJedna putovnica: status, verzija, postotak potpunosti, javna adresa i poveznice na QR kod.
create_passportIzrađ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_fieldsUpisuje 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_compliancePotpunost putovnice: postotak, status i obvezna polja koja još nedostaju.
Isprobajte s testnim ključem. S testnim ključem (pk_test_...) promjene asistenta provjeravaju se pa poništavaju, pa vidite što bi učinio prije nego mu date pravi ključ.

06 / Krajnje točkeRačun

GET /me

Vraća autentificirani račun, razinu pretplate i koliko je ograničenja proizvoda iskorišteno. Korisno kao provjera veze.

Zahtjev
curl https://myproductpassport.eu/api/v1/me \
  -H "Authorization: Bearer pk_your_key"
Odgovor
{
  "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

GET /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.

ParametarVrstaOpis
pageintegerBroj stranice.
Zahtjev
curl "https://myproductpassport.eu/api/v1/products?page=1" \
  -H "Authorization: Bearer pk_your_key"
Odgovor
{
  "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 }
}
POST /products zahtijeva products:write

Izrađuje jedan proizvod. Vraća 403 ako je ograničenje proizvoda paketa iskorišteno.

ParametarVrstaOpis
namestringobaveznoNaziv proizvoda, do 255 znakova.
skustringVaš interni SKU, do 100 znakova.
gtinstringGTIN-8, 12, 13 ili 14 (samo znamenke).
brandstringMarka prikazana na javnoj putovnici.
descriptionstringDo 2.000 znakova.
categorystringKategorija kao slobodni tekst. Zadano "general".
sector_idintegerID sektora, koji odabire predložak polja putovnice.
country_of_originstringOznaka zemlje, npr. "PT".
weightnumberNeto masa.
weight_unitstringJedno od kg, g, lb, oz. Zadano kg.
materialsarrayObjekti {name, percentage 0-100}.
has_packagingbooleanDodaje u putovnicu polja predloška za ambalažu (ključevi koji počinju s pkg_), pod istim QR kodom.
Zahtjev
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}
    ]
  }'
Odgovor
{
  "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"
  }
}
POST /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.

ParametarVrstaOpis
productsarrayobavezno1 do 100 objekata proizvoda s istim poljima kao Izrada proizvoda (bez materijala).
Zahtjev
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}
    ]
  }'
Odgovor
{
  "message": "2 product(s) created.",
  "products": [
    { "id": 514, "name": "PSL-BT-122000", "status": "active" },
    { "id": 515, "name": "PSL-BT-123000", "status": "active" }
  ]
}
GET /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.

Zahtjev
curl https://myproductpassport.eu/api/v1/products/512 \
  -H "Authorization: Bearer pk_your_key"
PUT /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.

Zahtjev
curl -X PUT https://myproductpassport.eu/api/v1/products/512 \
  -H "Authorization: Bearer pk_your_key" \
  -H "Content-Type: application/json" \
  -d '{"brand": "Northloom"}'
DELETE /products/{id} zahtijeva products:write

Meko briše proizvod. Objavljene putovnice proizvoda i dalje rade, pa ispisani QR kodovi nikada ne ostaju bez stranice.

Zahtjev
curl -X DELETE https://myproductpassport.eu/api/v1/products/512 \
  -H "Authorization: Bearer pk_your_key"
Odgovor
{ "message": "Product deleted." }

08 / Krajnje točkePutovnice

GET /passports zahtijeva passports:read

Prikazuje putovnice od najnovijih, 25 po stranici, sa sažetkom proizvoda i svim poljima putovnice.

ParametarVrstaOpis
pageintegerBroj stranice.
Zahtjev
curl https://myproductpassport.eu/api/v1/passports \
  -H "Authorization: Bearer pk_your_key"
Odgovor
{
  "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 }
}
POST /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.

Zahtjev
curl -X POST https://myproductpassport.eu/api/v1/products/512/passports \
  -H "Authorization: Bearer pk_your_key"
GET /passports/{id} zahtijeva passports:read

Vraća jednu putovnicu s proizvodom, poljima, javnim URL-om i GS1 Digital Linkom.

Zahtjev
curl https://myproductpassport.eu/api/v1/passports/96 \
  -H "Authorization: Bearer pk_your_key"
POST /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.

Zahtjev
curl -X POST https://myproductpassport.eu/api/v1/passports/96/publish \
  -H "Authorization: Bearer pk_your_key"
POST /passports/{id}/archive zahtijeva passports:publish

Arhivira putovnicu i povlači njezinu javnu stranicu iz upotrebe.

Zahtjev
curl -X POST https://myproductpassport.eu/api/v1/passports/96/archive \
  -H "Authorization: Bearer pk_your_key"
POST /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.

ParametarVrstaOpis
passport_idsarrayobavezno1 do 50 ID-ova putovnica.
Zahtjev
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]}'
Odgovor
{
  "published": 2,
  "failed": 1,
  "published_ids": [96, 97],
  "errors": [
    { "id": 98, "error": "Compliance below the publishing threshold." }
  ]
}
POST /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.

ParametarVrstaOpis
stagestringobaveznoprepared_for_reuse, repurposed ili remanufactured.
Zahtjev
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" }'
Odgovor
{
  "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": []
    }
  }
}
GET /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.

Zahtjev
curl https://myproductpassport.eu/api/v1/passports/96/fields \
  -H "Authorization: Bearer pk_your_key"
Odgovor
{
  "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", "...": "..." }
}
PUT /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.

ParametarVrstaOpis
fieldsobjectobaveznoMapa ključa polja na vrijednost. Ključevi su mala slova, znamenke i podvlake; vrijednosti do 5000 znakova. Do 200 ključeva po pozivu.
Zahtjev
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%"
    }
  }'
Odgovor
{
  "message": "3 field(s) changed, 0 removed.",
  "changed": ["carbon_footprint", "carbon_footprint_class", "recycled_content"],
  "removed": [],
  "passport": { "id": 96, "status": "published", "compliance_percentage": 92 }
}
POST /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.

ParametarVrstaOpis
state_of_healthstringnpr. "97% pri 412 ciklusa".
state_of_certified_energystringPreostala certificirana energija (baterije električnih vozila).
battery_statusstringoriginal, repurposed, re-used, remanufactured ili waste.
capacity_fadestringDosadašnji gubitak kapaciteta. Pohranjuje se kao current_capacity_fade.
power_capabilitystringTrenutačna snaga. Pohranjuje se kao current_power_capability.
internal_resistancestringIzmjereni unutarnji otpor. Pohranjuje se kao current_internal_resistance.
use_datastringCiklusi, negativni događaji, temperatura i stanje napunjenosti, do 5000 znakova.
Zahtjev
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"
  }'
Odgovor
{
  "message": "2 field(s) updated.",
  "updated_fields": ["state_of_health", "current_capacity_fade"],
  "passport": { "id": 96, "status": "published", "compliance_percentage": 100 }
}
POST /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.

ParametarVrstaOpis
units[].serialstringobaveznoSerijski broj baterije.
units[].manufacturing_datestringMjesec i godina, npr. "2026-09".
units[].battery_statusstringoriginal 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_healthstringTakođ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.
Zahtjev
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%"}]}'
Odgovor
{ "created": 1, "updated": 0, "skipped": 0, "errors": [] }
PATCH /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).

Zahtjev
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"}'
Odgovor
{
  "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" } }
}
GET /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.

Zahtjev
curl https://myproductpassport.eu/api/v1/passports/96/units/KES-00001/snapshots \
  -H "Authorization: Bearer pk_your_key"
Odgovor
{
  "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" }
  ]
}
POST /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.

ParametarVrstaOpis
stagestringobaveznoprepared_for_reuse, repurposed ili remanufactured.
valuesobjectobaveznoVrijednosti 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).
serialstringNovi serijski broj. Zadano: izvorni serijski broj uz nastavak -RU, -RP ili -RM.
measured_atstringKada su vrijednosti izmjerene.
member_statestringDvoslovna oznaka države članice u kojoj je ispitano zdravstveno stanje (članak 73. stavak 1. točka (a)).
target_passport_idintegerPostojeći model drugog života ovog modela baterije pod kojim je treba registrirati.
Zahtjev
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"}}'
Odgovor
{
  "data": {
    "serial": "KES-00001-RP", "battery_status": "repurposed", "passport_id": 131,
    "lineage": { "originals": [{ "serial": "KES-00001", "passport_id": 96, "stage": "repurposed" }], "successors": [] }
  }
}
POST /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.

ParametarVrstaOpis
statusstringnot_submitted, submitted, registered ili failed.
product_groupstringGrupa proizvoda u registru, na primjer batteries.
granularitystringmodel, serija ili artikl.
upistringJedinstveni identifikator proizvoda kao https URL. Zadano je URL javne putovnice.
correlation_idstringID korelacije koji registar dodjeljuje pri podnošenju.
uristringIdentifikator registracije koji je vratio registar.
backup_urlstringhttps poveznica na sigurnosnu kopiju koju hostira pružatelj DPP usluga.
submitted_atdateDatum podnošenja.
registered_atdateDatum registracije.
errorstringOpis pogreške za neuspjelo podnošenje.
Zahtjev
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"
  }'
Odgovor
{
  "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"
    }
  }
}
GET /passports/{id}/qr zahtijeva passports:read

QR kod putovnice kao datoteka: svg (zadano), png (s brendom, spreman za ispis) ili pdf (list naljepnica).

ParametarVrstaOpis
formatstringsvg | png | pdf
Zahtjev
curl "https://myproductpassport.eu/api/v1/passports/96/qr?format=png" \
  -H "Authorization: Bearer pk_your_key" -o passport-96.png

09 / Krajnje točkeUsklađenost

GET /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.

Zahtjev
curl https://myproductpassport.eu/api/v1/passports/96/compliance \
  -H "Authorization: Bearer pk_your_key"
Odgovor
{
  "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

GET /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.

Zahtjev
curl https://myproductpassport.eu/api/v1/sectors \
  -H "Authorization: Bearer pk_your_key"
Odgovor
{
  "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

GET /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.

Zahtjev
curl https://myproductpassport.eu/api/v1/products/512/documents \
  -H "Authorization: Bearer pk_your_key"
Odgovor
{
  "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"
    }
  ]
}
POST /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.

ParametarVrstaOpis
filefileobaveznoDokument.
is_publicbooleanPrikaži na javnoj putovnici (zadano false).
Zahtjev
curl -X POST https://myproductpassport.eu/api/v1/products/512/documents \
  -H "Authorization: Bearer pk_your_key" \
  -F "[email protected]" \
  -F "is_public=1"
PATCH /products/{productId}/documents/{id} zahtijeva products:write

Uključuje ili isključuje poveznicu na dokument s javne putovnice.

ParametarVrstaOpis
is_publicbooleanobavezno
Zahtjev
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}'
DELETE /products/{productId}/documents/{id} zahtijeva products:write

Uklanja datoteku i njezinu poveznicu s putovnicom.

Zahtjev
curl -X DELETE https://myproductpassport.eu/api/v1/products/512/documents/31 \
  -H "Authorization: Bearer pk_your_key"
Odgovor
{ "message": "Document deleted." }

12 / Krajnje točkeLanac opskrbe

GET /products/{productId}/supply-chain zahtijeva products:read

Koraci prikazani na putovnici proizvoda, redom.

Zahtjev
curl https://myproductpassport.eu/api/v1/products/512/supply-chain \
  -H "Authorization: Bearer pk_your_key"
PUT /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.

ParametarVrstaOpis
stepsarrayobaveznoDo 50 koraka.
steps[].step_typestringobavezno
steps[].supplier_namestringobavezno
steps[].supplier_locationstring
steps[].supplier_countrystringISO 3166-1 alpha-2.
steps[].lat / lngnumber
steps[].descriptionstring
steps[].certificationsarray
steps[].datedate
Zahtjev
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

GET /passports/{id}/translations zahtijeva passports:read

Svaka prevedena vrijednost polja po jeziku, s izvorom: auto (strojno, izrađeno pri objavi) ili manual.

Zahtjev
curl https://myproductpassport.eu/api/v1/passports/96/translations \
  -H "Authorization: Bearer pk_your_key"
Odgovor
{
  "data": {
    "passport_id": 96,
    "available_locales": ["bg", "cs", "da", "de", "..."],
    "translations": {
      "de": {"care_instructions": {"value": "Kalt waschen", "source": "manual"}}
    }
  }
}
PUT /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.

ParametarVrstaOpis
fieldsobjectobaveznofield_key: prevedena vrijednost
Zahtjev
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"}}'
Odgovor
{ "message": "1 translation(s) written, 0 removed.", "locale": "de", "written": 1, "removed": 0 }

14 / Krajnje točkeIntegritet i izvozi

GET /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.

Zahtjev
curl https://myproductpassport.eu/api/v1/passports/96/integrity \
  -H "Authorization: Bearer pk_your_key"
Odgovor
{ "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": [] } }
GET /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.

Zahtjev
curl https://myproductpassport.eu/api/v1/passports/96/integrity/1 \
  -H "Authorization: Bearer pk_your_key"
GET /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.

Zahtjev
curl https://myproductpassport.eu/api/v1/passports/96/epcis \
  -H "Authorization: Bearer pk_your_key"

15 / Krajnje točkeZahtjevi dobavljačima

POST /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.

ParametarVrstaOpis
supplier_namestringobavezno
supplier_emailstringobavezno
field_keysarrayobaveznoKljučevi polja iz predloška putovnice.
localestringJezik e-poruke i obrasca, npr. de.
due_atdateRok za odgovor; 14 dana ako se ne navede.
messagestring
Zahtjev
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"}'
GET /passports/{id}/supplier-requests zahtijeva passports:read

Svi zahtjevi za putovnicu s njihovim statusom.

Zahtjev
curl https://myproductpassport.eu/api/v1/passports/96/supplier-requests \
  -H "Authorization: Bearer pk_your_key"
GET /supplier-requests/{id} zahtijeva passports:read

Jedan zahtjev s odgovorima dobavljača, napomenom i nazivima priloženih datoteka.

Zahtjev
curl https://myproductpassport.eu/api/v1/supplier-requests/12 \
  -H "Authorization: Bearer pk_your_key"

16 / Krajnje točkePostprodaja

POST /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}.

ParametarVrstaOpis
items[].serialstringobaveznoNajviše 20 slova, znamenki, točaka, crtica ili podvlaka.
items[].batchstringSerija, najviše 20 znakova.
items[].manufactured_onstringDatum proizvodnje, GGGG-MM-DD.
rangeobjectUmjesto items: prefix, start, count, digits i batch, primjerice od SN-00001 do SN-00500.
Zahtjev
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"}}'
Odgovor
{ "created": 500, "updated": 0, "skipped": 0, "over_limit": 0, "errors": [] }
GET /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).

Zahtjev
curl https://myproductpassport.eu/api/v1/passports/96/items/SN-00001 \
  -H "Authorization: Bearer pk_your_key"
Odgovor
{
  "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" } ] }
}
PATCH /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.

ParametarVrstaOpis
statusstringactive, stolen, recalled ili retired.
status_notestringPrikazuje se na stranici artikla, najviše 500 znakova.
Zahtjev
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."}'
GET /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.

Zahtjev
curl "https://myproductpassport.eu/api/v1/owner-registrations?marketing_consent=1&since=2026-10-01" \
  -H "Authorization: Bearer pk_your_key"
GET /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.

Zahtjev
curl "https://myproductpassport.eu/api/v1/service-requests?status=new" \
  -H "Authorization: Bearer pk_your_key"
POST /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).

ParametarVrstaOpis
bodystringobaveznoOdgovor, najviše 5.000 znakova.
internalbooleanBilješka za vaš tim umjesto odgovora.
statusstringnew, in_progress, waiting, resolved ili closed.
Zahtjev
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

PATCH /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).

ParametarVrstaOpis
product_idsarrayobavezno
targetstringobaveznoproduct | field
keystringobavezno
valuestring
modestringset | fill | clear
Zahtjev
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"}'
Odgovor
{ "data": { "changed": 2, "skipped": 1, "errors": [] } }
POST /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.

ParametarVrstaOpis
imagefileobavezno
altstringOpis slike.
Zahtjev
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"
PUT /products/{id}/images/order zahtijeva products:write

Proslijedite image_ids željenim redoslijedom; prva slika postaje naslovna.

ParametarVrstaOpis
image_idsarrayobavezno
Zahtjev
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]}'
DELETE /products/{id}/images/{imageId} zahtijeva products:write

Uklanja sliku i njezinu datoteku.

Zahtjev
curl -X DELETE https://myproductpassport.eu/api/v1/products/12/images/31 \
  -H "Authorization: Bearer pk_your_key"

18 / Krajnje točkeWebhookovi

GET /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.

Zahtjev
curl https://myproductpassport.eu/api/v1/webhooks \
  -H "Authorization: Bearer pk_your_key"
POST /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.

ParametarVrstaOpis
urlstringobavezno
eventsarrayobaveznoBilo koji od događaja navedenih u nastavku.
Zahtjev
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"]}'
Odgovor
{
  "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"
  }
}
GET /webhooks/{id} zahtijeva webhooks:manage

Zahtjev
curl https://myproductpassport.eu/api/v1/webhooks/3 \
  -H "Authorization: Bearer pk_your_key"
PUT /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.

ParametarVrstaOpis
urlstring
eventsarray
is_activeboolean
Zahtjev
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}'
POST /webhooks/{id}/test zahtijeva webhooks:manage

Stavlja u red isporuku webhook.test kako biste provjerili prijemnik i kod za potpis.

Zahtjev
curl -X POST https://myproductpassport.eu/api/v1/webhooks/3/test \
  -H "Authorization: Bearer pk_your_key"
Odgovor
{ "message": "Test delivery queued." }
GET /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.

ParametarVrstaOpis
per_pageintegerDo 100.
Zahtjev
curl https://myproductpassport.eu/api/v1/webhooks/3/deliveries \
  -H "Authorization: Bearer pk_your_key"
DELETE /webhooks/{id} zahtijeva webhooks:manage

Zahtjev
curl -X DELETE https://myproductpassport.eu/api/v1/webhooks/3 \
  -H "Authorization: Bearer pk_your_key"
Odgovor
{ "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đajPokreće se kada
product.createdProizvod je izrađen (aplikacija, API ili CSV uvoz)
product.updatedProizvod je ažuriran
product.deletedProizvod je izbrisan
passport.createdPutovnica se generira
passport.publishedPutovnica postaje aktivna
passport.archivedPutovnica se arhivira
supplier_request.submittedDobavljač šalje podatke koje ste zatražili
owner.registeredVlasnik potvrđuje svoju registraciju
owner.transferredArtikl prelazi na novog registriranog vlasnika
service_request.createdKupac šalje servisni zahtjev iz putovnice
service_request.updatedServisni zahtjev dobiva odgovor ili novi status
item.status_changedArtikl je označen kao ukraden, opozvan ili povučen iz upotrebe, ili je oznaka uklonjena
item.verification_failedOčitanje zaštićene oznake ne uspije, pogrešni se kodovi gomilaju ili se serijski broj pojavljuje na previše mjesta
webhook.testIz 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:

Tijelo isporuke
{
  "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:

Zaglavlja isporuke
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.

Provjera (PHP)
$expected = 'sha256=' . hash_hmac('sha256', $rawBody, $endpointSecret);
abort_unless(hash_equals($expected, $request->header('X-MPP-Signature')), 401);