Primeros pasos
Primeros pasos
Cinco solicitudes, desde una cuenta vacía hasta un pasaporte publicado con su enlace público.
1.Crear una clave de API
Las claves se generan en la configuración. Una clave se muestra una sola vez, en el momento de crearla; después solo queda visible su identificador.
Conceda únicamente los ámbitos que la integración necesita de verdad. Una clave que puede leer pasaportes pero no publicarlos nunca pondrá un catálogo en línea por accidente.
Abrir las claves de API en la configuraciónshellexport PASSPORTCRAFT_API_KEY=pc_sk_test_…2.Comprobar la clave
La primera llamada que conviene hacer. Confirma que la clave funciona, indica si es una credencial real o de prueba y enumera las organizaciones por las que puede actuar, con el identificador de organización que necesita toda solicitud posterior.
Referencia completa de este endpointSolicitudcurl "https://passportcraft.com/api/v1/whoami" \ -H "Authorization: Bearer $PASSPORTCRAFT_API_KEY"Respuesta{ "object": "credential", "key_id": "K3n9Qw2P", "livemode": true, "owner_organization_id": "8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2", "expires_at": null, "last_used_at": "2026-08-02T07:41:03.220Z", "organizations": [ { "organization_id": "8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2", "scopes": [ "passports:read", "passports:write", "units:read", "units:write" ], "granted_at": "2026-07-14T11:02:19.004Z" } ] }3.Crear un pasaporte
Un pasaporte nace como borrador. Solo la categoría es obligatoria; el documento se rellena después campo a campo, igual que en el editor.
Referencia completa de este endpointSolicitudcurl "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" } }'Respuesta{ "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": [ { "name": "None declared", "present": false } ] } }4.Comprobarlo antes de publicar
La validación no escribe nada. Informa de qué bloquearía una publicación y qué es solo una advertencia, de modo que la integración lo sabe antes de la llamada que importa.
Referencia completa de este endpointSolicitudcurl "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 } }'Respuesta{ "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.", "writable_via_api": true } ] }5.Publicarlo
Al publicar, el pasaporte queda legible para cualquiera que lo escanee. La llamada se rechaza si falta un campo obligatorio, si no hay GTIN o si el plan ya no tiene plazas de publicación libres.
Referencia completa de este endpointSolicitudcurl "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)"Respuesta{ "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": "03453120000011", "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": [ { "name": "None declared", "present": false } ], "gtin": "03453120000011" }, "warnings": [ { "code": "environmental_claim_detected", "message": "This passport contains environmental claim language (carbon neutral). 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" } ] }6.Obtener el enlace público
Devuelve la página pública, el GS1 Digital Link y el destino exacto que codifica un código QR impreso: el valor que se entrega a la imprenta de etiquetas.
Referencia completa de este endpointSolicitudcurl "https://passportcraft.com/api/v1/organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41/links" \ -H "Authorization: Bearer $PASSPORTCRAFT_API_KEY"Respuesta{ "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": "03453120000011", "serial_number": null, "public_url": "https://passportcraft.com/passport/2c1f9e07-3b4d-4a18-9f6c-5e0a7b8d3c41", "qr_target": "https://passportcraft.com/01/03453120000011", "gs1_digital_link": { "uri": "https://passportcraft.com/01/03453120000011", "gtin14": "03453120000011", "serial": null, "linkset_url": "https://passportcraft.com/01/03453120000011?linkType=linkset", "unavailable_reason": null }, "resolves_publicly": true, "not_resolvable_reason": null }
Por dónde seguir
- Convenciones — reintentos, paginación y escrituras condicionales.
- Errores — el código con el que ramificar cuando una llamada es rechazada.
- Compatibilidad — qué puede cambiar sin aviso y qué no.