Zbuduj paszport
Dla programistów

Każdy paszport odpowiada też JSON-em. Bez klucza, bez limitu.

Ten sam adres, który skanuje klient, zwraca dane maszynie. Wystarczy nagłówek Accept. To ten sam identyfikator i dwie reprezentacje, których wymaga EN 18221. Żaden z dostawców, których sprawdziliśmy, tego dziś nie ma.

curl200 OK · application/json
curl -H "Accept: application/json" \
  https://dppera.com/01/05901234123457/10/2026-08-A

{
  "public_id": "7f3ac21",
  "url": "https://dppera.com/01/05901234123457/10/2026-08-A",
  "did": "did:web:dppera.com:p:7f3ac21",
  "gtin": "05901234123457",
  "batch": "2026-08-A",
  "granularity": "batch",
  "product_name": "Płaszcz wełniany 03",
  "brand": "Northwind Apparel",
  "category": "textile",
  "data": { "composition": "Wełna merino - 100%", ... },
  "documents": [ { "kind": "declaration", "href": "https://dppera.com/d/…" } ],
  "published_at": "2026-08-14T09:12:00Z"
}

Jeden adres, trzy reprezentacje. Wybiera nagłówek, nie osobny endpoint.

Tak pracuje resolver zgodny z GS1 Digital Link i tak chce tego norma EN 18221: identyfikator jest jeden, a klient mówi, co potrafi przeczytać.

HTML dla człowieka

Accept: text/html

Strona paszportu w języku przeglądarki albo z jawnym ?lang=pl. Ta sama, którą klient widzi po zeskanowaniu kodu.

JSON dla maszyny

Accept: application/json

Wyciąg publicznych pól rekordu: identyfikatory, produkt, skład, podmiot odpowiedzialny, dokumenty, data publikacji. Działa też ?format=json.

Linkset GS1

?linkType=linkset

Lista linków wg GS1-Conformant Resolver Standard 1.2.0 i RFC 9264, z typem gs1:dpp. Także przez Accept: application/linkset+json. Każda odpowiedź niesie nagłówek Link z adresem linksetu.

Adresy, które działają dziś. Bez rejestracji, bez tokenu.

Odczyt jest publiczny, bo paszport z definicji jest publiczny. Zapis i eksport konta wymagają zalogowania w panelu.

MetodaAdresCo zwracaDostęp
GET/01/{gtin}/10/{batch}Paszport pod adresem GS1 Digital Link. Warianty: sam GTIN (model), /22/{wariant}, /21/{numer sztuki}, w tej kolejności kwalifikatorów.publiczny
GET/p/{public_id}Paszport bez GTIN, z własnym identyfikatorem produktu.publiczny
GET/p/{public_id}/did.jsonDokument DID (W3C DID Core, did:web) dla paszportu.publiczny
GET…?linkType=linksetLinkset wg GS1-Conformant Resolver, także przez Accept: application/linkset+json.publiczny
GET/d/{document_id}Pobranie dokumentu paszportu, zawsze jako załącznik (EN 18221 pkt 4.4). Wycofany paszport nie udostępnia dokumentów.publiczny
POST/api/demo/previewRender podglądu z danych z formularza, bez zapisu. Limit tworzenia podglądów: 2 na godzinę z jednego adresu IP.publiczny
GET/api/passports/{id}/scansAnalityka skanów paszportu: suma z 90 dni i dni z liczbą skanów. Token użytkownika z panelu.konto
POST/api/passports/publishPublikacja paszportu z panelu: snapshot HTML i JSON pod stałym adresem, sprawdzenie limitu planu.konto
POST/api/passports/{id}/documentsWgranie dokumentu do paszportu (PDF i inne, do 10 MB).konto
GET/api/account/exportKomplet danych konta jako JSON, CSV albo ZIP z dokumentami. Działa także przy zaległości.konto

Co jest w odpowiedzi. I czego uczciwie jeszcze nie ma.

Pola odpowiedzi JSON

public_idstały identyfikator paszportu, ten sam co w kodzie QR i w DID
url, didadres kanoniczny i identyfikator did:web
gtin, variant, batch, serialidentyfikatory GS1 obecne na danym poziomie
granularity, model_idpoziom identyfikacji (model, batch, item) i identyfikator modelu
product_name, brand, categorynazwa, marka i grupa produktowa
dataskład, pochodzenie, pielęgnacja, trwałość, substancje, gwarancja, producent
documents[]id, kind, title, filename, content_type, size_bytes, mandatory, href
published_atdata publikacji tej wersji

Czego jeszcze nie ma

  • Rejestracji paszportu w Rejestrze DPP przez API. Rejestr Komisji nie przyjmuje jeszcze paszportów, a jego API zapowiedziano na IV kwartał 2026.
  • Webhooków o skanach. Analityka jest do odczytu na żądanie.
  • Kluczy API do zapisu. Publikacja i wgrywanie dokumentów działają tokenem użytkownika z panelu.
  • Wersjonowanego schematu JSON. Pola są stabilne, ale formalny schemat opublikujemy razem z pierwszym aktem delegowanym, który określi zestaw danych.