Autenticación
Autenticación
Una clave secreta en la cabecera Authorization es la vía de acceso a sus propios datos. No hay otra vía de entrada, y ninguna solicitud se autentica nunca mediante una cookie de sesión. Los endpoints de categoría son la excepción: describen los campos que pedimos, no los datos de nadie, y responden sin clave.
Claves
Una clave se muestra una sola vez, en el momento de crearla. Guárdela donde los servidores puedan leerla y un navegador no.
- pc_sk_live_…
- pc_sk_test_…
La prueba y la producción siguen separadas
El modo va inscrito en la propia credencial en lugar de pasarse como parámetro, así que una clave de prueba no puede leer ni modificar sus pasaportes reales. Una solicitud mal encaminada falla en vez de llegar al catálogo equivocado. Los pasaportes de prueba se eliminan 90 días después de la última modificación del pasaporte en sí.
Enviar la clave
Autenticación Bearer sobre HTTPS. No se acepta ninguna otra, y una solicitud sin la cabecera se rechaza antes de llegar a ninguno de sus registros.
curl "https://passportcraft.com/api/v1/whoami" \
-H "Authorization: Bearer pc_sk_live_…"Las credenciales en el navegador no están admitidas de forma deliberada. Una clave vive en un servidor; una clave en código de front-end es una clave ya publicada.
Ámbitos
Una clave lleva un conjunto fijo de ámbitos, elegido al crearla. Una solicitud sin el ámbito que exige su endpoint se rechaza, y el rechazo nombra el permiso que faltaba.
documents:read
documents:write
filings:write
keys:admin
passports:read
- get
/organizations/{organization}/capabilitiesDescribir qué puede hacer esta clave por esta organización. - get
/organizations/{organization}/passportsListar pasaportes. - get
/organizations/{organization}/publish-approvals/{id}Consultar una aprobación de publicación. - get
/organizations/{organization}/passports/{id}Obtener un pasaporte. - post
/organizations/{organization}/passports/{id}/validateComprobar un pasaporte contra el esquema de su categoría sin guardar. - get
/organizations/{organization}/passports/{id}/linksObtener las URL públicas y los GS1 Digital Links. gs1_digital_links incluye todas las variantes con variant_id, size y colour. La URI del GTIN principal aparece una vez con los datos de su variante; una URI principal con número de serie permanece separada. - get
/organizations/{organization}/passports/{id}/affichageLeer el estado del etiquetado ambiental francés. - get
/organizations/{organization}/passports/{id}/variantsListar variantes de talla y color. - get
/organizations/{organization}/passports/{id}/variants/reviewLee las tallas y colores que una persona revisa antes de publicar, con su huella. - get
/organizations/{organization}/importsListar los trabajos de importación. - get
/organizations/{organization}/imports/{id}Obtener un trabajo de importación y su progreso.
passports:write
- post
/organizations/{organization}/passportsCrear un pasaporte. - patch
/organizations/{organization}/passports/{id}Aplicar un JSON Merge Patch a un pasaporte. - post
/organizations/{organization}/passports/{id}/publishPublicar un pasaporte. - post
/organizations/{organization}/passports/{id}/unpublishDespublicar un pasaporte. - post
/organizations/{organization}/passports/{id}/trashEnviar un pasaporte a la papelera. - post
/organizations/{organization}/passports/{id}/restoreRestaurar un pasaporte desde la papelera. - post
/organizations/{organization}/passports/{id}/variantsCrear variantes de talla y color. - delete
/organizations/{organization}/passports/{id}/variants/{variantId}Eliminar una variante. Las credenciales del conector no permiten eliminar variantes. - post
/organizations/{organization}/passports/{id}/variants/removeEliminar variantes por GTIN. - post
/organizations/{organization}/importsIniciar una importación masiva asíncrona.
units:read
units:write
No requiere ámbito
Basta con una credencial válida. Estos endpoints no devuelven nada que pertenezca a una organización concreta.
No requiere credencial
Se puede leer sin clave. Estos endpoints describen el producto en sí — qué categorías existen y qué campos pide cada una — de modo que la respuesta es la misma para todo el mundo. Una clave se sigue aceptando, y una clave revocada o caducada se sigue rechazando. Sin clave, se le mide con el contador anónimo de 60 solicitudes por minuto y dirección de cliente.
Una sola clave para varias organizaciones
Una clave pertenece a una organización, y solo puede actuar sobre otra organización donde tenga una concesión. Una organización que gestiona clientes puede conceder a sus claves acceso a cada cliente, con los permisos elegidos por cliente. Cada solicitud nombra una organización en su ruta y actúa solo sobre esa organización.
Dar a una clave acceso a un cliente
Llame a POST /organizations/{organization}/grants con el identificador del cliente en la ruta, y el key_id de la clave y los ámbitos que se conceden en el cuerpo. La clave que hace la llamada necesita keys:admin en su propia organización. A un cliente solo se le pueden conceder ámbitos que la clave ya tenga en su propia organización, y filings:write exige además que se confirme antes la autorización escrita del cliente.
curl "https://passportcraft.com/api/v1/organizations/{client}/grants" \
-X POST \
-H "Authorization: Bearer $PASSPORTCRAFT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"key_id": "K3n9Qw2P", "scopes": ["passports:read", "passports:write"]}'Cuando el acceso termina
DELETE /organizations/{organization}/grants/{keyId} termina una concesión, y la clave sigue funcionando en cualquier otra organización sobre la que tenga una concesión. Un cliente también puede quitar el acceso de una clave desde su propia configuración. Poner fin a la colaboración entre un cliente y su organización termina de golpe todas las concesiones sobre ese cliente. A partir de entonces, cada solicitud para ese cliente responde 404 organization_not_found_or_not_granted, la misma respuesta que para una organización que no existe. Para distinguir los dos casos, llame a GET /organizations: una organización sobre la que ha perdido el acceso deja de aparecer en la lista.
Cada entrada de GET /organizations tiene display_name, el nombre de la organización, y link_status, que vale "accepted" para un cliente que gestiona su organización y null para su propia organización.
Claves live para una organización que gestiona clientes
Una organización que gestiona clientes puede crear una clave live cuando su propio plan, o el plan de al menos uno de sus clientes, es un plan Pro o Scale de pago. Un plan en prueba, o con un pago pendiente, no cuenta. Cada solicitud se sigue comprobando contra el plan de la organización nombrada en su ruta.
Ejemplo: un planificador de tareas, diez clientes
Un trabajo nocturno llama a GET /organizations para listar las organizaciones sobre las que su clave puede actuar, y luego sincroniza cada cliente por separado. Un cliente que se marcha desaparece de la lista, así que el trabajo deja de llamarlo en vez de registrar un 404 cada noche.
const base = 'https://passportcraft.com/api/v1'
const headers = { 'Authorization': 'Bearer ' + process.env.PASSPORTCRAFT_API_KEY }
const { data } = await (await fetch(base + '/organizations', { headers })).json()
const clients = data.filter((connection) => connection.link_status === 'accepted')
for (const client of clients) {
// One organization per request, always named in the path.
await syncCatalogue(client.organization_id, client.display_name)
}