Authenticatie
Authenticatie
Een geheime sleutel in de Authorization-header is de weg naar uw eigen gegevens. Een andere ingang is er niet, en geen enkel verzoek wordt ooit via een sessiecookie geauthenticeerd. De categorie-endpoints vormen de uitzondering: ze beschrijven de velden waar wij om vragen, niet de gegevens van wie dan ook, en ze antwoorden zonder sleutel.
Sleutels
Een sleutel wordt één keer getoond, op het moment van aanmaken. Bewaar hem waar de servers hem kunnen lezen en een browser niet.
- pc_sk_live_…
- pc_sk_test_…
Test en productie blijven gescheiden
De modus zit in de sleutel zelf en wordt niet als parameter meegegeven, dus een testsleutel kan uw echte paspoorten noch lezen noch wijzigen. Een verkeerd geadresseerd verzoek mislukt in plaats van in de verkeerde catalogus terecht te komen. Testpaspoorten worden 90 dagen na de laatste wijziging aan het paspoort zelf verwijderd.
De sleutel meesturen
Bearer-authenticatie over HTTPS. Iets anders wordt niet geaccepteerd, en een verzoek zonder de header wordt geweigerd voordat het een van uw records bereikt.
curl "https://passportcraft.com/api/v1/whoami" \
-H "Authorization: Bearer pc_sk_live_…"Inloggegevens in de browser worden bewust niet ondersteund. Een sleutel hoort op een server; een sleutel in front-endcode is een gepubliceerde sleutel.
Scopes
Een sleutel draagt een vaste verzameling scopes, gekozen bij het aanmaken. Een verzoek zonder de scope die het endpoint verlangt wordt geweigerd, en de weigering noemt de ontbrekende toestemming.
documents:read
documents:write
filings:write
keys:admin
passports:read
- get
/organizations/{organization}/capabilitiesBeschrijven wat deze sleutel voor deze organisatie mag doen. - get
/organizations/{organization}/passportsPaspoorten opsommen. - get
/organizations/{organization}/publish-approvals/{id}Eén publicatiegoedkeuring ophalen. - get
/organizations/{organization}/passports/{id}Eén paspoort ophalen. - post
/organizations/{organization}/passports/{id}/validateEen paspoort tegen het schema van zijn categorie controleren zonder op te slaan. - get
/organizations/{organization}/passports/{id}/linksOpenbare URL’s en GS1 Digital Links opvragen. gs1_digital_links bevat alle varianten met variant_id, size en colour. De URI van de eigen hoofd-GTIN verschijnt eenmaal met de variantgegevens; een hoofd-URI met serienummer blijft apart. - get
/organizations/{organization}/passports/{id}/affichageDe stand van de Franse milieuaanduiding lezen. - get
/organizations/{organization}/passports/{id}/variantsMaat- en kleurvarianten opvragen. - get
/organizations/{organization}/passports/{id}/variants/reviewLeest de maten en kleuren die een persoon vóór publicatie controleert, met hun vingerafdruk. - get
/organizations/{organization}/importsImporttaken opsommen. - get
/organizations/{organization}/imports/{id}Eén importtaak en de voortgang ervan ophalen.
passports:write
- post
/organizations/{organization}/passportsEen paspoort aanmaken. - patch
/organizations/{organization}/passports/{id}Een JSON Merge Patch op een paspoort toepassen. - post
/organizations/{organization}/passports/{id}/publishEen paspoort publiceren. - post
/organizations/{organization}/passports/{id}/unpublishEen paspoort terugtrekken. - post
/organizations/{organization}/passports/{id}/trashEen paspoort naar de prullenbak verplaatsen. - post
/organizations/{organization}/passports/{id}/restoreEen paspoort uit de prullenbak herstellen. - post
/organizations/{organization}/passports/{id}/variantsMaat- en kleurvarianten aanmaken. - delete
/organizations/{organization}/passports/{id}/variants/{variantId}Eén variant verwijderen. Connectorgegevens geven geen recht om varianten te verwijderen. - post
/organizations/{organization}/passports/{id}/variants/removeVarianten op GTIN verwijderen. - post
/organizations/{organization}/importsEen asynchrone bulkimport starten.
units:read
units:write
Geen scope vereist
Een geldige sleutel volstaat. Deze endpoints geven niets terug dat bij één organisatie hoort.
Geen sleutel vereist
Leesbaar zonder sleutel. Deze endpoints beschrijven het product zelf — welke categorieën er zijn en welke velden elk van hen vraagt — het antwoord is daardoor voor elke lezer hetzelfde. Een sleutel wordt nog steeds geaccepteerd, en een ingetrokken of verlopen sleutel wordt nog steeds geweigerd. Zonder sleutel geldt de anonieme teller van 60 verzoeken per minuut per clientadres.
Eén sleutel voor meerdere organisaties
Een sleutel hoort bij één organisatie en kan alleen voor een andere organisatie handelen waar hij een vrijgave heeft. Een organisatie die klanten beheert, kan haar sleutels toegang geven tot elke klant, met per klant gekozen rechten. Elk verzoek noemt in zijn pad één organisatie en werkt alleen op die organisatie.
Een sleutel toegang geven tot een klant
Roep POST /organizations/{organization}/grants aan met de identificatie van de klant in het pad, en de key_id van de sleutel en de toe te kennen scopes in de body. De aanroepende sleutel heeft keys:admin nodig in zijn eigen organisatie. Aan een klant kunnen alleen scopes worden toegekend die de sleutel al in zijn eigen organisatie heeft, en filings:write vereist bovendien dat de schriftelijke machtiging van de klant eerst wordt bevestigd.
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"]}'Wanneer de toegang eindigt
DELETE /organizations/{organization}/grants/{keyId} beëindigt één vrijgave, en de sleutel blijft werken voor elke andere organisatie waarvoor hij een vrijgave heeft. Een klant kan de toegang van een sleutel ook intrekken, in zijn eigen instellingen. Als de samenwerking tussen een klant en uw organisatie eindigt, eindigen daarmee in één keer alle vrijgaves voor die klant. Daarna beantwoordt elk verzoek voor de klant met 404 organization_not_found_or_not_granted, hetzelfde antwoord als voor een organisatie die niet bestaat. Roep GET /organizations aan om de twee te onderscheiden: een organisatie waartoe u de toegang bent kwijtgeraakt, staat er niet meer bij.
Elke vermelding in GET /organizations bevat display_name, de naam van de organisatie, en link_status, met als waarde "accepted" voor een klant die uw organisatie beheert en null voor uw eigen organisatie.
Live sleutels voor een organisatie die klanten beheert
Een organisatie die klanten beheert, kan een live sleutel aanmaken zodra haar eigen abonnement, of dat van minstens één van haar klanten, een betaald Pro- of Scale-abonnement is. Een abonnement in de proefperiode, of met een openstaande betaling, telt niet mee. Elk verzoek wordt nog steeds getoetst aan het abonnement van de organisatie die in het pad wordt genoemd.
Voorbeeld: één planner, tien klanten
Een nachtelijke taak roept GET /organizations aan om de organisaties op te sommen waarvoor zijn sleutel mag handelen, en synchroniseert daarna elke klant apart. Een klant die vertrekt, valt uit de lijst, zodat de taak stopt met die klant aan te roepen in plaats van elke nacht een 404 te loggen.
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)
}