Authentifizierung
Authentifizierung
Ein geheimer Schlüssel im Authorization-Header ist der Weg zu Ihren eigenen Daten. Einen anderen Weg hinein gibt es nicht, und keine Anfrage wird jemals über ein Sitzungs-Cookie authentifiziert. Die Kategorie-Endpunkte sind die Ausnahme: Diese beschreiben die Felder, nach denen wir fragen, und nicht die Daten irgendeines Kunden — und sie antworten ohne Schlüssel.
Schlüssel
Ein Schlüssel wird genau einmal angezeigt, im Moment seiner Erzeugung. Bewahren Sie ihn dort auf, wo die Server ihn lesen können und ein Browser nicht.
- pc_sk_live_…
- pc_sk_test_…
Test und Live bleiben getrennt
Der Modus steckt im Zugangsschlüssel selbst und wird nicht als Parameter übergeben. Ein Test-Schlüssel kann Ihre echten Produktpässe daher weder lesen noch ändern: eine fehlgeleitete Anfrage scheitert, statt im falschen Katalog zu landen. Test-Produktpässe werden 90 Tage nach der letzten Änderung am Pass selbst gelöscht.
Den Schlüssel senden
Bearer-Authentifizierung über HTTPS. Etwas anderes wird nicht akzeptiert, und eine Anfrage ohne den Header wird abgelehnt, bevor sie einen Ihrer Datensätze erreicht.
curl "https://passportcraft.com/api/v1/whoami" \
-H "Authorization: Bearer pc_sk_live_…"Zugangsdaten im Browser werden bewusst nicht unterstützt. Ein Schlüssel gehört auf einen Server, und ein Schlüssel im Frontend-Code ist ein veröffentlichter Schlüssel.
Scopes
Ein Schlüssel trägt eine feste Menge an Scopes, die bei seiner Erzeugung gewählt wird. Eine Anfrage ohne den vom Endpunkt verlangten Scope wird abgelehnt, und die Ablehnung benennt die fehlende Berechtigung.
documents:read
documents:write
filings:write
keys:admin
passports:read
- get
/organizations/{organization}/capabilitiesBeschreiben, was dieser Schlüssel für diese Organisation tun darf. - get
/organizations/{organization}/passportsProduktpässe auflisten. - get
/organizations/{organization}/publish-approvals/{id}Eine Veröffentlichungsfreigabe abrufen. - get
/organizations/{organization}/passports/{id}Einen Produktpass abrufen. - post
/organizations/{organization}/passports/{id}/validateEinen Produktpass gegen sein Kategorieschema prüfen, ohne zu speichern. - get
/organizations/{organization}/passports/{id}/linksÖffentliche URLs und GS1 Digital Links abrufen. gs1_digital_links enthält alle Varianten mit variant_id, size und colour. Die URI der eigenen Haupt-GTIN erscheint einmal mit den Variantendaten; eine Haupt-URI mit Seriennummer bleibt separat. - get
/organizations/{organization}/passports/{id}/affichageDen Stand der französischen Umweltkennzeichnung lesen. - get
/organizations/{organization}/passports/{id}/variantsGrößen- und Farbvarianten auflisten. - get
/organizations/{organization}/passports/{id}/variants/reviewLiest die Größen und Farben, die eine Person vor der Veröffentlichung prüft, samt ihrem Fingerabdruck. - get
/organizations/{organization}/importsImportaufträge auflisten. - get
/organizations/{organization}/imports/{id}Einen Importauftrag samt Fortschritt abrufen.
passports:write
- post
/organizations/{organization}/passportsEinen Produktpass erstellen. - patch
/organizations/{organization}/passports/{id}Einen JSON Merge Patch auf einen Produktpass anwenden. - post
/organizations/{organization}/passports/{id}/publishEinen Produktpass veröffentlichen. - post
/organizations/{organization}/passports/{id}/unpublishEinen Produktpass zurückziehen. - post
/organizations/{organization}/passports/{id}/trashEinen Produktpass in den Papierkorb verschieben. - post
/organizations/{organization}/passports/{id}/restoreEinen Produktpass aus dem Papierkorb wiederherstellen. - post
/organizations/{organization}/passports/{id}/variantsGrößen- und Farbvarianten erstellen. - delete
/organizations/{organization}/passports/{id}/variants/{variantId}Eine Variante löschen. Connector-Zugangsdaten dürfen keine Varianten löschen. - post
/organizations/{organization}/passports/{id}/variants/removeVarianten anhand ihrer GTIN entfernen. - post
/organizations/{organization}/importsEinen asynchronen Massenimport starten.
units:read
units:write
Kein Scope erforderlich
Ein gültiger Zugangsschlüssel genügt. Diese Endpunkte geben nichts zurück, was zu einer einzelnen Organisation gehört.
Kein Zugangsschlüssel erforderlich
Ohne Schlüssel lesbar. Diese Endpunkte beschreiben das Produkt selbst — welche Kategorien es gibt und nach welchen Feldern jede von ihnen fragt — die Antwort ist deshalb für jeden Leser dieselbe. Ein Schlüssel wird weiterhin akzeptiert, und ein widerrufener oder abgelaufener Schlüssel wird weiterhin abgelehnt. Ohne Schlüssel gilt der anonyme Zähler von 60 Anfragen pro Minute je Client-Adresse.
Ein Schlüssel für mehrere Organisationen
Ein Schlüssel gehört zu einer Organisation und kann nur dort für eine andere Organisation handeln, wo er eine Freigabe besitzt. Eine Organisation, die Kunden verwaltet, kann ihren Schlüsseln Zugriff auf jeden Kunden gewähren, mit Berechtigungen, die pro Kunde gewählt werden. Jede Anfrage nennt eine Organisation in ihrem Pfad und wirkt sich nur auf diese Organisation aus.
Einem Schlüssel Zugriff auf einen Kunden geben
Rufen Sie POST /organizations/{organization}/grants auf, mit der Kennung des Kunden im Pfad und der key_id des Schlüssels sowie den zu gewährenden Scopes im Body. Der aufrufende Schlüssel benötigt keys:admin in seiner eigenen Organisation. Einem Kunden können nur Scopes gewährt werden, die der Schlüssel bereits in seiner eigenen Organisation besitzt, und filings:write erfordert außerdem, dass die schriftliche Vollmacht des Kunden zuerst bestätigt wird.
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"]}'Wenn der Zugriff endet
DELETE /organizations/{organization}/grants/{keyId} beendet eine Freigabe; der Schlüssel funktioniert bei jeder anderen Organisation, für die er eine Freigabe besitzt, weiterhin. Ein Kunde kann den Zugriff eines Schlüssels auch in seinen eigenen Einstellungen entfernen. Endet die Zusammenarbeit zwischen einem Kunden und Ihrer Organisation, enden damit alle Freigaben für diesen Kunden gleichzeitig. Danach beantwortet jede Anfrage für den Kunden mit 404 organization_not_found_or_not_granted — derselben Antwort wie für eine Organisation, die es nicht gibt. Um die beiden zu unterscheiden, rufen Sie GET /organizations auf: Eine Organisation, zu der Sie den Zugriff verloren haben, wird dort nicht mehr aufgeführt.
Jeder Eintrag in GET /organizations enthält display_name, den Namen der Organisation, sowie link_status. Der Wert ist "accepted" für einen Kunden, den Ihre Organisation verwaltet, und null für Ihre eigene Organisation.
Live-Schlüssel für eine Organisation, die Kunden verwaltet
Eine Organisation, die Kunden verwaltet, kann einen Live-Schlüssel erstellen, wenn ihr eigener Tarif oder der Tarif mindestens eines ihrer Kunden ein bezahlter Pro- oder Scale-Tarif ist. Ein Tarif in der Testphase oder mit einer offenen Zahlung zählt nicht. Jede Anfrage wird weiterhin gegen den Tarif der im Pfad genannten Organisation geprüft.
Beispiel: ein Scheduler, zehn Kunden
Ein nächtlicher Job ruft GET /organizations auf, um die Organisationen aufzulisten, für die sein Schlüssel handeln darf, und synchronisiert dann jeden Kunden einzeln. Verlässt ein Kunde die Liste, fällt er einfach heraus, sodass der Job aufhört, ihn aufzurufen, statt jede Nacht ein 404 zu protokollieren.
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)
}