Risorse
Passaporti
Tutti gli endpoint Passaporti, con l'ambito che impongono, il corpo che accettano, una risposta leggibile e i rifiuti che possono restituire.
Elencare i passaporti.
/organizations/{organization}/passports- Ambito
- passports:read
Idempotency-Key- Non accettata
- Restituisce
- 200
Parametri di percorso
organizationstringaObbligatorioL'organizzazione per cui questa richiesta agisce. La chiave deve avere una concessione su di essa.
Parametri di query
limitstringaFacoltativoQuanti record restituire. Il server può restituirne meno.
cursorstringaFacoltativoIl next_cursor della pagina precedente. Un cursore codifica i filtri con cui è stato emesso; inviarlo con filtri diversi viene rifiutato con cursor_invalid.
statusstringaFacoltativoRestituisce solo i passaporti in questo stato.
categorystringaFacoltativoRestituisce solo i passaporti di questa categoria.
updated_sincestringaFacoltativoUna marca temporale RFC 3339. Restituisce i passaporti aggiornati in quel momento o dopo: è così che un'integrazione rileva le modifiche senza rileggere ogni volta l'intero catalogo.
Errori
Tutti i rifiuti che questo endpoint può restituire, con lo stato con cui arrivano.
curl "https://passportcraft.com/api/v1/organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports?status=published&limit=25" \
-H "Authorization: Bearer $PASSPORTCRAFT_API_KEY"{
"object": "list",
"data": [
{
"object": "passport",
"id": "2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"name": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"organization_id": "8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2",
"category": "textile",
"status": "published",
"gtin": "02000000000053",
"external_id": "SKU-4471-BLK",
"version": 4,
"livemode": true,
"created_at": "2026-08-01T09:12:44.918Z",
"updated_at": "2026-08-01T14:03:22.501Z",
"data": {
"product_name": "Merino Crew Neck",
"product_description": "Mid-weight knitted crew neck in 100% merino wool.",
"manufacturer_name": "Atelier Kestrel SAS",
"manufacturer_address": "14 rue des Tanneurs, 59100 Roubaix",
"manufacturer_country": "FR",
"material_composition": [
{
"fiber": "Merino wool",
"percentage": 100
}
],
"substances_of_concern": [
"None above threshold"
],
"gtin": "02000000000053"
}
}
],
"has_more": false,
"next_cursor": null
}GET /organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports?status=published&limit=25
Creare un passaporto.
/organizations/{organization}/passports- Ambito
- passports:write
Idempotency-Key- Accettata
- Restituisce
- 201
Parametri di percorso
organizationstringaObbligatorioL'organizzazione per cui questa richiesta agisce. La chiave deve avere una concessione su di essa.
Corpo della richiesta
categorystringaObbligatorioUn id di categoria fra quelli di GET /categories. Fissa lo schema dei campi e non è più modificabile in seguito.
external_idstringaFacoltativoIl Suo identificativo per questo prodotto, da 1 a 255 caratteri. Univoco all'interno dell'organizzazione e della modalità: è ciò che permette di riconciliare senza dover conservare i nostri id, quindi lo stesso id può esistere una volta in test e una volta in produzione.
dataoggettoFacoltativoIl documento del passaporto. Le chiavi sono nomi di campo dello schema della categoria, più la chiave document_id_key di ogni campo che accetta un documento; qualsiasi altra chiave viene rifiutata anziché memorizzata in silenzio.
Errori
Tutti i rifiuti che questo endpoint può restituire, con lo stato con cui arrivano.
- 409already_exists
- 500configuration_error
- 409gtin_in_use
- 409idempotency_conflict
- 403insufficient_scope
- 500internal_error
- 401invalid_key
- 400invalid_request
- 401key_expired
- 401key_revoked
- 401key_rotated
- 400mode_mismatch
- 402no_subscription
- 404organization_not_found_or_not_granted
- 413payload_too_large
- 402payment_overdue
- 402plan_required
- 429rate_limited
- 415unsupported_media_type
- 422validation_failed
- 400wildcard_not_supported
curl "https://passportcraft.com/api/v1/organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports" \
-X POST \
-H "Authorization: Bearer $PASSPORTCRAFT_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"category": "textile",
"external_id": "SKU-4471-BLK",
"data": {
"product_name": "Merino Crew Neck",
"product_description": "Mid-weight knitted crew neck in 100% merino wool.",
"manufacturer_name": "Atelier Kestrel SAS",
"manufacturer_address": "14 rue des Tanneurs, 59100 Roubaix",
"manufacturer_country": "FR"
}
}'{
"object": "passport",
"id": "2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"name": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"organization_id": "8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2",
"category": "textile",
"status": "draft",
"gtin": null,
"serial_number": null,
"external_id": "SKU-4471-BLK",
"version": 1,
"livemode": true,
"registry_id": null,
"created_at": "2026-08-01T09:12:44.918Z",
"updated_at": "2026-08-01T09:12:44.918Z",
"published_at": null,
"trashed_at": null,
"data": {
"product_name": "Merino Crew Neck",
"product_description": "Mid-weight knitted crew neck in 100% merino wool.",
"manufacturer_name": "Atelier Kestrel SAS",
"manufacturer_address": "14 rue des Tanneurs, 59100 Roubaix",
"manufacturer_country": "FR",
"material_composition": [
{
"fiber": "Merino wool",
"percentage": 100
}
],
"substances_of_concern": [
"None above threshold"
]
}
}POST /organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports
Recuperare un passaporto.
/organizations/{organization}/passports/{id}- Ambito
- passports:read
Idempotency-Key- Non accettata
- Restituisce
- 200
Parametri di percorso
organizationstringaObbligatorioL'organizzazione per cui questa richiesta agisce. La chiave deve avere una concessione su di essa.
idstringaObbligatorioL'identificativo della risorsa. Lo tratti come una stringa opaca.
Errori
Tutti i rifiuti che questo endpoint può restituire, con lo stato con cui arrivano.
curl "https://passportcraft.com/api/v1/organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41" \
-H "Authorization: Bearer $PASSPORTCRAFT_API_KEY"{
"object": "passport",
"id": "2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"name": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"organization_id": "8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2",
"category": "textile",
"status": "published",
"gtin": "02000000000053",
"serial_number": null,
"external_id": "SKU-4471-BLK",
"version": 4,
"livemode": true,
"registry_id": null,
"created_at": "2026-08-01T09:12:44.918Z",
"updated_at": "2026-08-01T14:03:22.501Z",
"published_at": "2026-08-01T14:03:22.501Z",
"trashed_at": null,
"data": {
"product_name": "Merino Crew Neck",
"product_description": "Mid-weight knitted crew neck in 100% merino wool.",
"manufacturer_name": "Atelier Kestrel SAS",
"manufacturer_address": "14 rue des Tanneurs, 59100 Roubaix",
"manufacturer_country": "FR",
"material_composition": [
{
"fiber": "Merino wool",
"percentage": 100
}
],
"substances_of_concern": [
"None above threshold"
],
"gtin": "02000000000053"
}
}GET /organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41
Applicare un JSON Merge Patch a un passaporto.
/organizations/{organization}/passports/{id}- Ambito
- passports:write
Idempotency-Key- Accettata
- Restituisce
- 200
Parametri di percorso
organizationstringaObbligatorioL'organizzazione per cui questa richiesta agisce. La chiave deve avere una concessione su di essa.
idstringaObbligatorioL'identificativo della risorsa. Lo tratti come una stringa opaca.
Intestazioni della richiesta
Expected-VersioninteroFacoltativoLa version del passaporto che ha letto, come numero intero. La scrittura viene rifiutata con precondition_failed se nel frattempo il passaporto è cambiato: è l'unico modo per rendere sicura una sequenza leggi-modifica-scrivi di fronte a un editor concorrente. Usi questa intestazione al posto di If-Match. Ripeta una scrittura rifiutata con una NUOVA Idempotency-Key: il rifiuto resta registrato sulla precedente e verrebbe riprodotto.
If-MatchstringaFacoltativoRIFIUTATO con invalid_request a meno che non sia esattamente *, quindi anche quando porta un ETag. La nostra CDN confronta If-Match con la RISPOSTA e ne riscrive il risultato: una scrittura condizionale verrebbe quindi applicata e le verrebbe comunque segnalata come 412, ed è questo che il rifiuto impedisce. Invii la versione in Expected-Version. If-Match: *, che chiede soltanto che il passaporto esista ancora, è accettato.
Corpo della richiesta
dataoggettoFacoltativoUn JSON Merge Patch RFC 7386 applicato al documento del passaporto. Ometta una chiave per lasciarla invariata; invii null per eliminarla. Gli array vengono sostituiti, mai uniti.
Errori
Tutti i rifiuti che questo endpoint può restituire, con lo stato con cui arrivano.
- 500configuration_error
- 409gtin_in_use
- 409idempotency_conflict
- 403insufficient_scope
- 500internal_error
- 401invalid_key
- 400invalid_request
- 401key_expired
- 401key_revoked
- 401key_rotated
- 400mode_mismatch
- 402no_subscription
- 404organization_not_found_or_not_granted
- 413payload_too_large
- 402payment_overdue
- 402plan_required
- 412precondition_failed
- 429rate_limited
- 404resource_not_found
- 415unsupported_media_type
- 422validation_failed
- 400wildcard_not_supported
- 409wrong_status
curl "https://passportcraft.com/api/v1/organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41" \
-X PATCH \
-H "Authorization: Bearer $PASSPORTCRAFT_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"data": {
"recycled_content_percentage": 38,
"recycling_instructions": "Return to any Atelier Kestrel store for fibre recovery."
}
}'{
"object": "passport",
"id": "2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"name": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"organization_id": "8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2",
"category": "textile",
"status": "draft",
"gtin": null,
"serial_number": null,
"external_id": "SKU-4471-BLK",
"version": 2,
"livemode": true,
"registry_id": null,
"created_at": "2026-08-01T09:12:44.918Z",
"updated_at": "2026-08-01T10:44:12.700Z",
"published_at": null,
"trashed_at": null,
"data": {
"product_name": "Merino Crew Neck",
"product_description": "Mid-weight knitted crew neck in 100% merino wool.",
"manufacturer_name": "Atelier Kestrel SAS",
"manufacturer_address": "14 rue des Tanneurs, 59100 Roubaix",
"manufacturer_country": "FR",
"material_composition": [
{
"fiber": "Merino wool",
"percentage": 100
}
],
"substances_of_concern": [
"None above threshold"
],
"recycled_content_percentage": 38,
"recycling_instructions": "Return to any Atelier Kestrel store for fibre recovery."
}
}PATCH /organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41
Pubblicare un passaporto.
/organizations/{organization}/passports/{id}/publish- Ambito
- passports:write
Idempotency-Key- Accettata
- Restituisce
- 200
Parametri di percorso
organizationstringaObbligatorioL'organizzazione per cui questa richiesta agisce. La chiave deve avere una concessione su di essa.
idstringaObbligatorioL'identificativo della risorsa. Lo tratti come una stringa opaca.
Corpo della richiesta
variant_review_fingerprintstringaFacoltativoObbligatorio quando il passaporto contiene taglie e colori inseriti da un assistente: l’impronta restituita da GET …/variants/review, inviata dopo che una persona ha verificato quelle righe. Senza di essa la pubblicazione viene rifiutata con variant_review_required; se taglie e colori sono cambiati dopo quella verifica, con variant_review_changed. La invii con una nuova chiave di idempotenza. Stringa esadecimale di 64 caratteri.
Errori
Tutti i rifiuti che questo endpoint può restituire, con lo stato con cui arrivano.
- 500configuration_error
- 422document_missing
- 409gtin_in_use
- 422gtin_required
- 409idempotency_conflict
- 403insufficient_scope
- 500internal_error
- 401invalid_key
- 400invalid_request
- 401key_expired
- 401key_revoked
- 401key_rotated
- 400mode_mismatch
- 402no_subscription
- 404organization_not_found_or_not_granted
- 413payload_too_large
- 402payment_overdue
- 402plan_required
- 402publish_limit_reached
- 429rate_limited
- 404resource_not_found
- 503storage_unavailable
- 402unit_limit_reached
- 415unsupported_media_type
- 422validation_failed
- 409variant_review_changed
- 409variant_review_required
- 400wildcard_not_supported
- 409wrong_status
curl "https://passportcraft.com/api/v1/organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41/publish" \
-X POST \
-H "Authorization: Bearer $PASSPORTCRAFT_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"{
"object": "passport",
"id": "2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"name": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"organization_id": "8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2",
"category": "textile",
"status": "published",
"gtin": "02000000000053",
"serial_number": null,
"external_id": "SKU-4471-BLK",
"version": 4,
"livemode": true,
"registry_id": null,
"created_at": "2026-08-01T09:12:44.918Z",
"updated_at": "2026-08-01T14:03:22.501Z",
"published_at": "2026-08-01T14:03:22.501Z",
"trashed_at": null,
"data": {
"product_name": "Merino Crew Neck",
"product_description": "Mid-weight knitted crew neck in 100% merino wool.",
"manufacturer_name": "Atelier Kestrel SAS",
"manufacturer_address": "14 rue des Tanneurs, 59100 Roubaix",
"manufacturer_country": "FR",
"material_composition": [
{
"fiber": "Merino wool",
"percentage": 100
}
],
"substances_of_concern": [
"None above threshold"
],
"gtin": "02000000000053"
},
"warnings": [
{
"code": "environmental_claim_detected",
"message": "This passport contains environmental claims (carbon neutral), found in its wording or in fields the brand marked as environmental information. From 27 September 2026, Directive (EU) 2024/825 requires the trader placing the product on the market to hold substantiation for such claims. Publishing succeeded; confirm the substantiation exists.",
"doc_url": "https://passportcraft.com/docs/api/errors#environmental_claim_detected"
}
]
}POST /organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41/publish
Ritirare un passaporto.
Distruttiva/organizations/{organization}/passports/{id}/unpublish- Ambito
- passports:write
Idempotency-Key- Accettata
- Restituisce
- 200
Parametri di percorso
organizationstringaObbligatorioL'organizzazione per cui questa richiesta agisce. La chiave deve avere una concessione su di essa.
idstringaObbligatorioL'identificativo della risorsa. Lo tratti come una stringa opaca.
Errori
Tutti i rifiuti che questo endpoint può restituire, con lo stato con cui arrivano.
- 500configuration_error
- 409idempotency_conflict
- 403insufficient_scope
- 500internal_error
- 401invalid_key
- 400invalid_request
- 401key_expired
- 401key_revoked
- 401key_rotated
- 400mode_mismatch
- 402no_subscription
- 404organization_not_found_or_not_granted
- 413payload_too_large
- 402payment_overdue
- 402plan_required
- 412precondition_failed
- 429rate_limited
- 404resource_not_found
- 415unsupported_media_type
- 422validation_failed
- 400wildcard_not_supported
- 409wrong_status
curl "https://passportcraft.com/api/v1/organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41/unpublish" \
-X POST \
-H "Authorization: Bearer $PASSPORTCRAFT_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"{
"object": "passport",
"id": "2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"name": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"organization_id": "8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2",
"category": "textile",
"status": "draft",
"gtin": "02000000000053",
"serial_number": null,
"external_id": "SKU-4471-BLK",
"version": 5,
"livemode": true,
"registry_id": null,
"created_at": "2026-08-01T09:12:44.918Z",
"updated_at": "2026-08-02T08:15:09.113Z",
"published_at": null,
"trashed_at": null,
"data": {
"product_name": "Merino Crew Neck",
"product_description": "Mid-weight knitted crew neck in 100% merino wool.",
"manufacturer_name": "Atelier Kestrel SAS",
"manufacturer_address": "14 rue des Tanneurs, 59100 Roubaix",
"manufacturer_country": "FR",
"material_composition": [
{
"fiber": "Merino wool",
"percentage": 100
}
],
"substances_of_concern": [
"None above threshold"
],
"gtin": "02000000000053"
}
}POST /organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41/unpublish
Spostare un passaporto nel cestino.
Distruttiva/organizations/{organization}/passports/{id}/trash- Ambito
- passports:write
Idempotency-Key- Accettata
- Restituisce
- 200
Parametri di percorso
organizationstringaObbligatorioL'organizzazione per cui questa richiesta agisce. La chiave deve avere una concessione su di essa.
idstringaObbligatorioL'identificativo della risorsa. Lo tratti come una stringa opaca.
Errori
Tutti i rifiuti che questo endpoint può restituire, con lo stato con cui arrivano.
- 500configuration_error
- 409idempotency_conflict
- 403insufficient_scope
- 500internal_error
- 401invalid_key
- 400invalid_request
- 401key_expired
- 401key_revoked
- 401key_rotated
- 400mode_mismatch
- 402no_subscription
- 404organization_not_found_or_not_granted
- 413payload_too_large
- 402payment_overdue
- 402plan_required
- 412precondition_failed
- 429rate_limited
- 404resource_not_found
- 415unsupported_media_type
- 422validation_failed
- 400wildcard_not_supported
- 409wrong_status
curl "https://passportcraft.com/api/v1/organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41/trash" \
-X POST \
-H "Authorization: Bearer $PASSPORTCRAFT_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"{
"object": "passport",
"id": "2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"name": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"organization_id": "8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2",
"category": "textile",
"status": "trashed",
"gtin": "02000000000053",
"serial_number": null,
"external_id": "SKU-4471-BLK",
"version": 6,
"livemode": true,
"registry_id": null,
"created_at": "2026-08-01T09:12:44.918Z",
"updated_at": "2026-08-02T08:19:44.002Z",
"published_at": null,
"trashed_at": "2026-08-02T08:19:44.002Z",
"data": {
"product_name": "Merino Crew Neck",
"product_description": "Mid-weight knitted crew neck in 100% merino wool.",
"manufacturer_name": "Atelier Kestrel SAS",
"manufacturer_address": "14 rue des Tanneurs, 59100 Roubaix",
"manufacturer_country": "FR",
"material_composition": [
{
"fiber": "Merino wool",
"percentage": 100
}
],
"substances_of_concern": [
"None above threshold"
],
"gtin": "02000000000053"
}
}POST /organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41/trash
Ripristinare un passaporto dal cestino.
/organizations/{organization}/passports/{id}/restore- Ambito
- passports:write
Idempotency-Key- Accettata
- Restituisce
- 200
Parametri di percorso
organizationstringaObbligatorioL'organizzazione per cui questa richiesta agisce. La chiave deve avere una concessione su di essa.
idstringaObbligatorioL'identificativo della risorsa. Lo tratti come una stringa opaca.
Errori
Tutti i rifiuti che questo endpoint può restituire, con lo stato con cui arrivano.
- 500configuration_error
- 409idempotency_conflict
- 403insufficient_scope
- 500internal_error
- 401invalid_key
- 400invalid_request
- 401key_expired
- 401key_revoked
- 401key_rotated
- 400mode_mismatch
- 402no_subscription
- 409not_trashed
- 404organization_not_found_or_not_granted
- 413payload_too_large
- 402payment_overdue
- 402plan_required
- 412precondition_failed
- 429rate_limited
- 404resource_not_found
- 415unsupported_media_type
- 422validation_failed
- 400wildcard_not_supported
curl "https://passportcraft.com/api/v1/organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41/restore" \
-X POST \
-H "Authorization: Bearer $PASSPORTCRAFT_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"{
"object": "passport",
"id": "2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"name": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"organization_id": "8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2",
"category": "textile",
"status": "draft",
"gtin": "02000000000053",
"serial_number": null,
"external_id": "SKU-4471-BLK",
"version": 7,
"livemode": true,
"registry_id": null,
"created_at": "2026-08-01T09:12:44.918Z",
"updated_at": "2026-08-02T08:21:03.884Z",
"published_at": null,
"trashed_at": null,
"data": {
"product_name": "Merino Crew Neck",
"product_description": "Mid-weight knitted crew neck in 100% merino wool.",
"manufacturer_name": "Atelier Kestrel SAS",
"manufacturer_address": "14 rue des Tanneurs, 59100 Roubaix",
"manufacturer_country": "FR",
"material_composition": [
{
"fiber": "Merino wool",
"percentage": 100
}
],
"substances_of_concern": [
"None above threshold"
],
"gtin": "02000000000053"
}
}POST /organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41/restore
Verificare un passaporto rispetto allo schema della sua categoria, senza salvare.
/organizations/{organization}/passports/{id}/validate- Ambito
- passports:read
Idempotency-Key- Non accettata
- Restituisce
- 200
Parametri di percorso
organizationstringaObbligatorioL'organizzazione per cui questa richiesta agisce. La chiave deve avere una concessione su di essa.
idstringaObbligatorioL'identificativo della risorsa. Lo tratti come una stringa opaca.
Corpo della richiesta
dataoggettoFacoltativoI campi da unire prima del controllo, così da poter provare una modifica senza salvarla. In nessuno dei due casi viene scritto qualcosa.
variant_review_fingerprintstringaFacoltativoL’impronta restituita da GET …/variants/review. La invii per chiedere se la pubblicazione che la porta andrebbe a buon fine; senza di essa, un passaporto con taglie e colori inseriti da un assistente segnala la verifica come errore. Stringa esadecimale di 64 caratteri; un’impronta superata o malformata viene segnalata come rilievo anziché rifiutata, poiché questo endpoint risponde con una previsione.
Errori
Tutti i rifiuti che questo endpoint può restituire, con lo stato con cui arrivano.
- 500configuration_error
- 403insufficient_scope
- 500internal_error
- 401invalid_key
- 400invalid_request
- 401key_expired
- 401key_revoked
- 401key_rotated
- 400mode_mismatch
- 404organization_not_found_or_not_granted
- 413payload_too_large
- 429rate_limited
- 404resource_not_found
- 503storage_unavailable
- 415unsupported_media_type
- 422validation_failed
- 400wildcard_not_supported
curl "https://passportcraft.com/api/v1/organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41/validate" \
-X POST \
-H "Authorization: Bearer $PASSPORTCRAFT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"data": {
"material_composition": null
}
}'{
"object": "validation",
"id": "2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"name": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41/validation",
"organization_id": "8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2",
"passport_id": "2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"category": "textile",
"schema_version": "1.0.0-draft",
"dry_run": true,
"valid": false,
"publishable": false,
"error_count": 2,
"warning_count": 0,
"checked_at": "2026-08-02T08:26:11.409Z",
"issues": [
{
"object": "validation_issue",
"field": "material_composition",
"source": {
"pointer": "/data/material_composition"
},
"rule": "required",
"severity": "error",
"message": "Material Composition is required",
"message_key": "required",
"message_params": {
"field": "Material Composition"
},
"writable_via_api": true
},
{
"object": "validation_issue",
"field": "gtin",
"source": {
"pointer": "/data/gtin"
},
"rule": "required",
"severity": "error",
"message": "A GTIN is required before this passport can be published. A saved size or colour with its own barcode also satisfies this.",
"writable_via_api": true
}
]
}POST /organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41/validate
Recuperare gli URL pubblici e i GS1 Digital Links. gs1_digital_links include tutte le varianti con variant_id, size e colour. L’URI del GTIN principale compare una sola volta con i dati della variante; un URI principale con numero di serie resta distinto.
/organizations/{organization}/passports/{id}/links- Ambito
- passports:read
Idempotency-Key- Non accettata
- Restituisce
- 200
Parametri di percorso
organizationstringaObbligatorioL'organizzazione per cui questa richiesta agisce. La chiave deve avere una concessione su di essa.
idstringaObbligatorioL'identificativo della risorsa. Lo tratti come una stringa opaca.
Errori
Tutti i rifiuti che questo endpoint può restituire, con lo stato con cui arrivano.
curl "https://passportcraft.com/api/v1/organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41/links" \
-H "Authorization: Bearer $PASSPORTCRAFT_API_KEY"{
"object": "passport_links",
"id": "2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"name": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41/links",
"organization_id": "8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2",
"passport": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"status": "published",
"livemode": true,
"gtin": "02000000000053",
"serial_number": null,
"public_url": "https://passportcraft.com/passport/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"qr_target": "https://passportcraft.com/01/02000000000053",
"gs1_digital_links": [
{
"uri": "https://passportcraft.com/01/02000000000053",
"gtin14": "02000000000053",
"serial": null,
"linkset_url": "https://passportcraft.com/01/02000000000053?linkType=linkset",
"unavailable_reason": null,
"variant_id": null,
"size": null,
"colour": null
}
],
"gs1_digital_link": {
"uri": "https://passportcraft.com/01/02000000000053",
"gtin14": "02000000000053",
"serial": null,
"linkset_url": "https://passportcraft.com/01/02000000000053?linkType=linkset",
"unavailable_reason": null
},
"resolves_publicly": true,
"not_resolvable_reason": null,
"preview_url": null
}GET /organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41/links
Elenca le letture della batteria.
/organizations/{organization}/passports/{id}/units/{unitId}/readings- Ambito
- units:read
Idempotency-Key- Non accettata
- Restituisce
- 200
Parametri di percorso
organizationstringaObbligatorioL'organizzazione per cui questa richiesta agisce. La chiave deve avere una concessione su di essa.
idstringaObbligatorioL'identificativo della risorsa. Lo tratti come una stringa opaca.
unitIdstringaObbligatorioL'identificativo della risorsa. Lo tratti come una stringa opaca.
Parametri di query
limitstringaFacoltativoNumero di letture da restituire, da 1 a 100.
cursorstringaFacoltativoIl next_cursor della pagina precedente. Mantenga lo stesso filtro di campo.
fieldstringaFacoltativoRestituisce solo le letture di questo campo.
Errori
Tutti i rifiuti che questo endpoint può restituire, con lo stato con cui arrivano.
- 500configuration_error
- 400cursor_invalid
- 403insufficient_scope
- 500internal_error
- 400invalid_field
- 401invalid_key
- 400invalid_request
- 401key_expired
- 401key_revoked
- 401key_rotated
- 400mode_mismatch
- 404organization_not_found_or_not_granted
- 413payload_too_large
- 429rate_limited
- 404resource_not_found
- 400wildcard_not_supported
curl "https://passportcraft.com/api/v1/organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/b6f0d4a2-71c3-4e58-8a19-3f7c2d5e8b04/units/d41d8cd9-8f00-4b20-a204-9800998ecf84/readings?field=status&limit=50" \
-H "Authorization: Bearer $PASSPORTCRAFT_API_KEY"{
"object": "list",
"data": [
{
"object": "unit_reading",
"id": "a1100000-0000-4000-8000-000000000001",
"name": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/b6f0d4a2-71c3-4e58-8a19-3f7c2d5e8b04/units/d41d8cd9-8f00-4b20-a204-9800998ecf84/readings/a1100000-0000-4000-8000-000000000001",
"organization_id": "8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2",
"passport_id": "b6f0d4a2-71c3-4e58-8a19-3f7c2d5e8b04",
"unit_id": "d41d8cd9-8f00-4b20-a204-9800998ecf84",
"passport": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/b6f0d4a2-71c3-4e58-8a19-3f7c2d5e8b04",
"unit": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/b6f0d4a2-71c3-4e58-8a19-3f7c2d5e8b04/units/d41d8cd9-8f00-4b20-a204-9800998ecf84",
"livemode": true,
"field": "status",
"value": "original",
"observed_on": "2026-08-02",
"source": "brand_statement",
"note": null,
"document_id": null,
"recorded_by": "a1100000-0000-4000-8000-000000000002",
"recorded_actor_type": "api_key",
"recorded_via": "api",
"recorded_at": "2026-08-02T09:31:18.446123Z",
"legacy_import": false
}
],
"has_more": false,
"next_cursor": null
}GET /organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/b6f0d4a2-71c3-4e58-8a19-3f7c2d5e8b04/units/d41d8cd9-8f00-4b20-a204-9800998ecf84/readings?field=status&limit=50
Registra una lettura della batteria.
/organizations/{organization}/passports/{id}/units/{unitId}/readings- Ambito
- units:write
Idempotency-Key- Accettata
- Restituisce
- 201
Parametri di percorso
organizationstringaObbligatorioL'organizzazione per cui questa richiesta agisce. La chiave deve avere una concessione su di essa.
idstringaObbligatorioL'identificativo della risorsa. Lo tratti come una stringa opaca.
unitIdstringaObbligatorioL'identificativo della risorsa. Lo tratti come una stringa opaca.
Corpo della richiesta
fieldstringaObbligatorioUn campo per batteria dello schema di categoria.
valuetesto, numero o numero con unitàObbligatorioUn valore conforme alla definizione del campo; numero e unità per i campi con selezione dell’unità.
observed_onstringaObbligatorioData della misurazione o dichiarazione del valore, nel formato AAAA-MM-GG.
sourcestringaObbligatoriomeasurement o brand_statement.
notestringaFacoltativoNota facoltativa su metodo o prova, fino a 500 caratteri.
document_idstringaFacoltativoDocumento facoltativo della libreria dell’organizzazione a supporto della lettura.
Errori
Tutti i rifiuti che questo endpoint può restituire, con lo stato con cui arrivano.
- 500configuration_error
- 409connector_writes_drafts_only
- 409idempotency_conflict
- 403insufficient_scope
- 500internal_error
- 400invalid_document_id
- 400invalid_field
- 400invalid_input
- 401invalid_key
- 400invalid_note
- 400invalid_observed_on
- 400invalid_request
- 400invalid_source
- 400invalid_value
- 401key_expired
- 401key_revoked
- 401key_rotated
- 400mode_mismatch
- 402no_subscription
- 404organization_not_found_or_not_granted
- 413payload_too_large
- 402payment_overdue
- 402plan_required
- 429rate_limited
- 404resource_not_found
- 400unit_reading_document_unavailable
- 409unit_status_history_conflict
- 400unit_status_required
- 409unit_status_transition_forbidden
- 415unsupported_media_type
- 422validation_failed
- 400wildcard_not_supported
curl "https://passportcraft.com/api/v1/organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/b6f0d4a2-71c3-4e58-8a19-3f7c2d5e8b04/units/d41d8cd9-8f00-4b20-a204-9800998ecf84/readings" \
-X POST \
-H "Authorization: Bearer $PASSPORTCRAFT_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"field": "status",
"value": "original",
"observed_on": "2026-08-02",
"source": "brand_statement"
}'{
"object": "unit_reading",
"id": "a1100000-0000-4000-8000-000000000001",
"name": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/b6f0d4a2-71c3-4e58-8a19-3f7c2d5e8b04/units/d41d8cd9-8f00-4b20-a204-9800998ecf84/readings/a1100000-0000-4000-8000-000000000001",
"organization_id": "8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2",
"passport_id": "b6f0d4a2-71c3-4e58-8a19-3f7c2d5e8b04",
"unit_id": "d41d8cd9-8f00-4b20-a204-9800998ecf84",
"passport": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/b6f0d4a2-71c3-4e58-8a19-3f7c2d5e8b04",
"unit": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/b6f0d4a2-71c3-4e58-8a19-3f7c2d5e8b04/units/d41d8cd9-8f00-4b20-a204-9800998ecf84",
"livemode": true,
"field": "status",
"value": "original",
"observed_on": "2026-08-02",
"source": "brand_statement",
"note": null,
"document_id": null,
"recorded_by": "a1100000-0000-4000-8000-000000000002",
"recorded_actor_type": "api_key",
"recorded_via": "api",
"recorded_at": "2026-08-02T09:31:18.446123Z",
"legacy_import": false
}POST /organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/b6f0d4a2-71c3-4e58-8a19-3f7c2d5e8b04/units/d41d8cd9-8f00-4b20-a204-9800998ecf84/readings
Scollegare un documento ed eliminarlo dalla libreria quando nulla lo utilizza più.
/organizations/{organization}/passports/{id}/documents/{documentId}- Ambito
- documents:write
Idempotency-Key- Non accettata
- Restituisce
- 200
Parametri di percorso
organizationstringaObbligatorioL'organizzazione per cui questa richiesta agisce. La chiave deve avere una concessione su di essa.
idstringaObbligatorioL'identificativo della risorsa. Lo tratti come una stringa opaca.
documentIdstringaObbligatorioL'identificativo della risorsa. Lo tratti come una stringa opaca.
Intestazioni della richiesta
If-MatchstringaFacoltativoRIFIUTATO con invalid_request a meno che non sia esattamente *. Questo endpoint non ha una forma condizionale. DELETE è l'unico metodo che non abbiamo misurato rispetto alla nostra CDN, che su alcuni percorsi confronta If-Match con la RISPOSTA e riscrive un successo in un 412, e uno scollegamento già avvenuto non deve mai esserle segnalato come un rifiuto. If-Match: *, che chiede soltanto che il documento esista ancora, è accettato.
Errori
Tutti i rifiuti che questo endpoint può restituire, con lo stato con cui arrivano.
- 500configuration_error
- 409document_feeds_extraction
- 403insufficient_scope
- 500internal_error
- 401invalid_key
- 400invalid_request
- 401key_expired
- 401key_revoked
- 401key_rotated
- 400mode_mismatch
- 402no_subscription
- 404organization_not_found_or_not_granted
- 413payload_too_large
- 402payment_overdue
- 402plan_required
- 429rate_limited
- 409resource_busy
- 404resource_not_found
- 400wildcard_not_supported
curl "https://passportcraft.com/api/v1/organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41/documents/a3b8c2d1-5e64-4f79-8a0b-1c2d3e4f5a6b" \
-X DELETE \
-H "Authorization: Bearer $PASSPORTCRAFT_API_KEY"{
"object": "document.deleted",
"id": "a3b8c2d1-5e64-4f79-8a0b-1c2d3e4f5a6b",
"organization_id": "8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2",
"passport_id": "2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41",
"livemode": true,
"detached": true,
"deleted_from_library": true,
"remaining_links": 0,
"document_limit": 50
}DELETE /organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41/documents/a3b8c2d1-5e64-4f79-8a0b-1c2d3e4f5a6b