Autenticazione
Autenticazione
Una chiave segreta nell'intestazione Authorization è la via d'accesso ai Suoi dati. Non esiste altra via d'ingresso e nessuna richiesta viene mai autenticata da un cookie di sessione. Gli endpoint di categoria fanno eccezione: descrivono i campi che chiediamo, non i dati di nessuno, e rispondono senza chiave.
Chiavi
Una chiave viene mostrata una sola volta, nel momento in cui viene creata. La conservi dove i server possono leggerla e un browser no.
- pc_sk_live_…
- pc_sk_test_…
Prova e produzione restano separate
Il modo è iscritto nella credenziale stessa anziché passato come parametro, perciò una chiave di prova non può né leggere né modificare i Suoi passaporti reali. Una richiesta mal indirizzata fallisce invece di raggiungere il catalogo sbagliato. I passaporti di prova vengono eliminati 90 giorni dopo l'ultima modifica del passaporto stesso.
Inviare la chiave
Autenticazione Bearer su HTTPS. Nient'altro viene accettato, e una richiesta priva dell'intestazione viene rifiutata prima di raggiungere un qualsiasi Suo record.
curl "https://passportcraft.com/api/v1/whoami" \
-H "Authorization: Bearer pc_sk_live_…"Le credenziali nel browser non sono supportate, e non lo sono per scelta. Una chiave vive su un server; una chiave nel codice front-end è una chiave già pubblicata.
Ambiti
Una chiave porta un insieme fisso di ambiti, scelto al momento della creazione. Una richiesta priva dell'ambito richiesto dal proprio endpoint viene rifiutata, e il rifiuto nomina il permesso mancante.
documents:read
documents:write
keys:admin
passports:read
- get
/organizations/{organization}/capabilitiesDescrivere che cosa questa chiave può fare per questa organizzazione. - get
/organizations/{organization}/passportsElencare i passaporti. - get
/organizations/{organization}/publish-approvals/{id}Leggere una approvazione di pubblicazione. - get
/organizations/{organization}/passports/{id}Recuperare un passaporto. - post
/organizations/{organization}/passports/{id}/validateVerificare un passaporto rispetto allo schema della sua categoria, senza salvare. - get
/organizations/{organization}/passports/{id}/linksRecuperare 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. - get
/organizations/{organization}/passports/{id}/affichageLeggere lo stato dell’etichettatura ambientale francese. - get
/organizations/{organization}/passports/{id}/variantsElencare le varianti di taglia e colore. - get
/organizations/{organization}/passports/{id}/variants/reviewLegge le taglie e i colori che una persona verifica prima della pubblicazione, con la loro impronta. - get
/organizations/{organization}/importsElencare i lavori di importazione. - get
/organizations/{organization}/imports/{id}Recuperare un lavoro di importazione e il suo avanzamento.
passports:write
- post
/organizations/{organization}/passportsCreare un passaporto. - patch
/organizations/{organization}/passports/{id}Applicare un JSON Merge Patch a un passaporto. - post
/organizations/{organization}/passports/{id}/publishPubblicare un passaporto. - post
/organizations/{organization}/passports/{id}/unpublishRitirare un passaporto. - post
/organizations/{organization}/passports/{id}/trashSpostare un passaporto nel cestino. - post
/organizations/{organization}/passports/{id}/restoreRipristinare un passaporto dal cestino. - post
/organizations/{organization}/passports/{id}/variantsCreare varianti di taglia e colore. - delete
/organizations/{organization}/passports/{id}/variants/{variantId}Eliminare una variante. Le credenziali del connettore non consentono di eliminare varianti. - post
/organizations/{organization}/passports/{id}/variants/removeRimuovere varianti tramite GTIN. - post
/organizations/{organization}/importsAvviare un’importazione massiva asincrona.
units:read
units:write
Nessun ambito richiesto
Basta una credenziale valida. Questi endpoint non restituiscono nulla che appartenga a una singola organizzazione.
Nessuna credenziale richiesta
Leggibile senza chiave. Questi endpoint descrivono il prodotto stesso — quali categorie esistono e quali campi chiede ciascuna — quindi la risposta è la stessa per chiunque legga. Una chiave viene comunque accettata, e una chiave revocata o scaduta viene comunque rifiutata. Senza chiave si viene misurati sul contatore anonimo di 60 richieste al minuto per indirizzo client.
Una sola chiave per più organizzazioni
Una chiave appartiene a un'organizzazione e può agire su un'altra organizzazione solo dove dispone di una concessione. Un'organizzazione che gestisce clienti può concedere alle proprie chiavi l'accesso a ciascun cliente, con permessi scelti per ogni cliente. Ogni richiesta indica un'organizzazione nel proprio percorso e agisce solo su quell'organizzazione.
Dare a una chiave l'accesso a un cliente
Richiami POST /organizations/{organization}/grants con l'identificativo del cliente nel percorso, e il key_id della chiave e gli ambiti da concedere nel corpo. La chiave usata per la chiamata deve disporre di keys:admin nella propria organizzazione. A un cliente possono essere concessi solo ambiti che la chiave possiede già nella propria organizzazione, e filings:write richiede inoltre che l'autorizzazione scritta del cliente sia prima confermata.
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"]}'Quando l'accesso termina
DELETE /organizations/{organization}/grants/{keyId} pone fine a una concessione, e la chiave continua a funzionare su ogni altra organizzazione su cui dispone di una concessione. Un cliente può anche rimuovere l'accesso di una chiave dalle proprie impostazioni. Porre fine alla collaborazione fra un cliente e la Sua organizzazione pone fine in un colpo solo a tutte le concessioni su quel cliente. Da quel momento, ogni richiesta per il cliente riceve come risposta 404 organization_not_found_or_not_granted, la stessa risposta prevista per un'organizzazione inesistente. Per distinguere i due casi, richiami GET /organizations: un'organizzazione di cui ha perso l'accesso non compare più nell'elenco.
Ogni voce di GET /organizations riporta display_name, il nome dell'organizzazione, e link_status, che vale "accepted" per un cliente gestito dalla Sua organizzazione e null per la Sua stessa organizzazione.
Chiavi live per un'organizzazione che gestisce clienti
Un'organizzazione che gestisce clienti può creare una chiave live quando il proprio piano, o il piano di almeno uno dei propri clienti, è un piano Pro o Scale a pagamento. Un piano in prova, o con un pagamento in arretrato, non conta. Ogni richiesta viene comunque verificata rispetto al piano dell'organizzazione indicata nel percorso.
Esempio: un pianificatore, dieci clienti
Un job notturno richiama GET /organizations per elencare le organizzazioni su cui la propria chiave può agire, poi sincronizza ogni cliente separatamente. Un cliente che se ne va esce dall'elenco, così il job smette di richiamarlo invece di registrare un 404 ogni notte.
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)
}