Apple Wallet PassKit API
Mit der PassKit Designer API können Sie Apple Wallet-Pässe programmgesteuert erstellen, aktualisieren, herunterladen und verwalten. Sie unterstützt dieselben Vorgänge, die der Pass-Builder im Control Panel durchführt. Verwenden Sie sie, um Kundenkarten, Gutscheine, Veranstaltungstickets, Bordkarten und Kundenkarten auszustellen und um Live-Updates an Pässe zu senden, die bereits auf den Geräten Ihrer Benutzer installiert sind.
Basis-URL
Anchor link tohttps://apple-passkit.svc-nue.pushwoosh.comAlle Endpunkte werden über HTTPS bereitgestellt. Anfragen und Antworten verwenden application/json, sofern nicht anders angegeben.
Authentifizierung
Anchor link toJede Anfrage muss einen Authorization-Header mit Ihrem Pushwoosh API-Zugriffstoken enthalten:
Authorization: Token <api-token>Das Konto, dem das Token gehört, muss auch Eigentümer der Anwendung sein, auf die sich der applicationCode bezieht. Eine Anfrage für eine Anwendung, die zu einem anderen Konto gehört, gibt 403 Forbidden zurück.
Konventionen
Anchor link to- Feldnamen: JSON-Felder verwenden
lowerCamelCase(zum BeispielpassTypeIdentifier,serialNumber,backgroundColor). - Nicht ausgefüllte Felder: Antworten enthalten alle Felder, auch wenn sie leer sind oder den Wert Null haben.
- Binärdaten:
bytes-Felder wiepkpassDataund Bild-datasind Base64-kodierte Zeichenketten in JSON. - Seriennummern: Die
serialNumberwird immer vom Server zugewiesen, wenn ein Pass erstellt wird. Jeder Wert, den Sie bei der Erstellung senden, wird ignoriert; sie identifiziert den Pass für alle späteren Operationen.
Fehlerantworten
Anchor link toDie API bildet interne Statuscodes auf HTTP-Statuscodes ab:
| HTTP-Status | Bedeutung |
|---|---|
400 Bad Request | Ungültiges Argument – ein erforderliches Feld fehlt oder ist fehlerhaft. |
401 Unauthorized | Fehlender oder ungültiger Authorization-Header. |
403 Forbidden | Die Anwendung gehört nicht zum Konto des Aufrufers. |
404 Not Found | Der Pass, die Vorlage oder die Anwendung wurde nicht gefunden. |
503 Service Unavailable | Der Dienst ist ausgelastet oder vorübergehend nicht verfügbar. |
Endpunkte
Anchor link to| Methode | Pfad | Beschreibung |
|---|---|---|
POST | /api/pass/validate | Eine Pass-Konfiguration validieren |
POST | /api/pass/create | Einen neuen .pkpass erstellen |
POST | /api/pass/update/{serialNumber} | Einen bestehenden Pass aktualisieren und Geräte benachrichtigen |
GET | /api/passes | Alle Pässe für eine Anwendung auflisten |
GET | /api/pass/{applicationCode}/{serialNumber} | Einen einzelnen Pass abrufen |
GET | /api/pass/{applicationCode}/{serialNumber}/download | Den .pkpass eines bestehenden Passes herunterladen |
DELETE | /api/pass/{applicationCode}/{serialNumber} | Einen Pass löschen |
GET | /api/pass/{serialNumber}/registrations | Für einen Pass registrierte Geräte auflisten |
GET | /api/config | Die PassKit-Konfiguration der Anwendung abrufen |
GET | /api/templates | Verfügbare Pass-Vorlagen auflisten |
GET | /api/templates/{filename} | Eine einzelne Vorlage abrufen |
Einen Pass erstellen
Anchor link toErzeugt, signiert und speichert einen neuen Pass und gibt dann seine vom Server zugewiesene Seriennummer zurück.
POST /api/pass/create
Anfragekörper
Anchor link to| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
pass | object | Ja | Das Pass-Objekt, das den Pass beschreibt. |
images | array of objects | Nein | Pass-Bilder (Symbol, Logo usw.). icon und logo sind für einen gültigen Pass erforderlich. |
userId | string | Ja | Die Pushwoosh User ID, für die der Pass ausgestellt wird. |
applicationCode | string | Ja | Der Pushwoosh-Anwendungscode. |
Beispiel für eine Anfrage
Anchor link to{ "applicationCode": "XXXXX-XXXXX", "userId": "user-123", "pass": { "description": "Acme loyalty card", "logoText": "Acme", "backgroundColor": "rgb(60, 65, 76)", "foregroundColor": "rgb(255, 255, 255)", "labelColor": "rgb(255, 255, 255)", "storeCard": { "primaryFields": [ { "key": "balance", "label": "BALANCE", "value": "1200 pts" } ], "secondaryFields": [ { "key": "member", "label": "MEMBER", "value": "Jane Doe" } ] }, "barcodes": [ { "format": "PKBarcodeFormatQR", "message": "1234567890", "messageEncoding": "iso-8859-1" } ] }, "images": [ { "imageType": "icon", "data": "<base64>", "contentType": "image/png" }, { "imageType": "logo", "data": "<base64>", "contentType": "image/png" } ]}Antwort
Anchor link to| Feld | Typ | Beschreibung |
|---|---|---|
serialNumber | string | Vom Server zugewiesene eindeutige Identität des erstellten Passes. Verwenden Sie sie, um den Pass abzurufen (Einen Pass abrufen) oder den .pkpass herunterzuladen (Einen Pass herunterladen). |
message | string | Ergebnismeldung. |
Beispiel für eine Antwort
Anchor link to{ "serialNumber": "a1b2c3d4-1234-5678-9abc-def012345678", "message": "Pass created successfully"}Einen Pass validieren
Anchor link toÜberprüft eine Pass-Konfiguration anhand der Spezifikationen von Apple, ohne eine Datei zu erstellen. Nützlich vor dem Aufruf von create.
POST /api/pass/validate
Anfragekörper
Anchor link to| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
pass | object | Ja | Das zu validierende Pass-Objekt. |
Antwort
Anchor link to| Feld | Typ | Beschreibung |
|---|---|---|
valid | boolean | Ob der Pass die Validierung besteht. |
errors | array of strings | Blockierende Probleme, die behoben werden müssen. |
warnings | array of strings | Nicht blockierende Hinweise. |
Einen Pass aktualisieren
Anchor link toGeneriert den Pass mit neuem Inhalt neu, signiert ihn erneut, erhöht sein Update-Tag und sendet eine stille Push-Benachrichtigung an jedes Gerät, das den Pass registriert hat. iOS ruft dann die aktualisierte Version ab und installiert sie im Hintergrund.
POST /api/pass/update/{serialNumber}
Pfadparameter
Anchor link to| Parameter | Typ | Beschreibung |
|---|---|---|
serialNumber | string | Die Seriennummer, die bei der Erstellung des Passes zurückgegeben wurde. |
Anfragekörper
Anchor link to| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
updates | object | Ja | Das vollständige Pass-Objekt mit dem neuen Inhalt. |
applicationCode | string | Ja | Der Pushwoosh-Anwendungscode. |
Die serialNumber (aus dem Pfad) und das Authentifizierungstoken des Passes werden vom Server beibehalten, unabhängig davon, was Sie senden.
Antwort
Anchor link to| Feld | Typ | Beschreibung |
|---|---|---|
success | boolean | Ob das Update erfolgreich war. |
updateTag | integer | Neues Update-Tag (ein Unix-Zeitstempel). |
message | string | Ergebnismeldung. |
Pässe auflisten
Anchor link toGibt eine paginierte, sortierte Liste der für eine Anwendung gespeicherten Pässe zurück.
GET /api/passes?applicationCode=XXXXX-XXXXX&page=0&perPage=20
Abfrageparameter
Anchor link to| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
applicationCode | string | Ja | Der Pushwoosh-Anwendungscode. |
orderBy | string | Nein | Sortierfeld: UPDATED (Standard) oder CREATED. |
orderDirection | string | Nein | Sortierrichtung: DESC (Standard, neueste zuerst) oder ASC. |
page | integer | Nein | Nullbasierter Seitenindex. Standard ist 0. |
perPage | integer | Nein | Seitengröße. 0 oder weggelassen verwendet den Server-Standard. |
Antwort
Anchor link to| Feld | Typ | Beschreibung |
|---|---|---|
passes | array of objects | Die aktuelle Seite der Pass-Datensätze. |
page | integer | Der zurückgegebene Seitenindex. |
perPage | integer | Die für diese Antwort verwendete Seitengröße. |
total | integer | Gesamtzahl der Pässe für die Anwendung über alle Seiten hinweg. |
Beispiel für eine Antwort
Anchor link to{ "passes": [ /* pass records */ ], "page": 0, "perPage": 20, "total": 137}Einen Pass abrufen
Anchor link toGibt einen einzelnen gespeicherten Pass zurück, einschließlich seines vollständigen Pass-Objekts.
GET /api/pass/{applicationCode}/{serialNumber}
Pfadparameter
Anchor link to| Parameter | Typ | Beschreibung |
|---|---|---|
applicationCode | string | Der Pushwoosh-Anwendungscode. |
serialNumber | string | Die Seriennummer des Passes. |
Antwort
Anchor link toGibt { "pass": { ... } } zurück, einen einzelnen Pass-Datensatz.
Einen Pass herunterladen
Anchor link toGibt die gespeicherte .pkpass-Datei eines vorhandenen Passes zurück.
GET /api/pass/{applicationCode}/{serialNumber}/download
Antwort
Anchor link to| Feld | Typ | Beschreibung |
|---|---|---|
pkpassData | string (Base64) | Die .pkpass-Datei. |
filename | string | Vorgeschlagener Dateiname. |
Einen Pass löschen
Anchor link toEntfernt einen Pass-Datensatz und seine gespeicherte .pkpass-Datei.
DELETE /api/pass/{applicationCode}/{serialNumber}
Antwort
Anchor link to| Feld | Typ | Beschreibung |
|---|---|---|
success | boolean | Ob der Pass gelöscht wurde. |
message | string | Ergebnismeldung. |
Pass-Registrierungen abrufen
Anchor link toListet die Geräte auf, die den Pass hinzugefügt haben und für Updates registriert sind.
GET /api/pass/{serialNumber}/registrations?applicationCode=XXXXX-XXXXX
Antwort
Anchor link toGibt { "registrations": [ ... ] } zurück, wobei jedes Element Folgendes enthält:
| Feld | Typ | Beschreibung |
|---|---|---|
deviceLibraryIdentifier | string | Apple-Gerätebibliotheks-Identifikator. |
pushToken | string | Das Pass-Push-Token für das Gerät. |
Konfiguration abrufen
Anchor link toGibt die PassKit-Konfiguration zurück, die für eine Anwendung aus ihrem Zertifikat aufgelöst wurde.
GET /api/config?applicationCode=XXXXX-XXXXX
Antwort
Anchor link to| Feld | Typ | Beschreibung |
|---|---|---|
teamIdentifier | string | Apple Team ID aus dem Zertifikat. |
passTypeIdentifier | string | Pass Type ID aus dem Zertifikat. |
organizationName | string | Organisationsname aus dem Zertifikat. |
hasCertificate | boolean | Ob ein Zertifikat konfiguriert ist. |
webServiceUrl | string | Basis-URL des Pass-Webdienstes. Clients erstellen einen Installationslink, indem sie /v1/passes/{passType}/{serial}?token={authToken} anhängen. |
Vorlagen
Anchor link toListen Sie die verfügbaren Pass-Vorlagen auf oder rufen Sie eine als Pass-Objekt ab, das Sie als Ausgangspunkt verwenden können.
GET /api/templates – gibt { "templates": [ { "filename", "name", "description", "style" } ] } zurück.
GET /api/templates/{filename} – gibt { "template": { ...pass object... } } zurück.
Einen Pass als QR-Code teilen
Anchor link toUm Benutzern das Hinzufügen eines Passes durch Scannen eines QR-Codes (oder Tippen auf einen Link) zu ermöglichen, kodieren Sie die Installations-URL des Passes in einen QR-Code. Die URL wird aus Werten erstellt, die Sie bereits von der API zurückerhalten:
{webServiceUrl}/v1/passes/{passTypeIdentifier}/{serialNumber}?token={authenticationToken}| URL-Teil | Woher beziehen |
|---|---|
webServiceUrl | GET /api/config → webServiceUrl |
passTypeIdentifier | Pass-Datensatz → pass.passTypeIdentifier (aus Liste/Abruf) |
serialNumber | Pass-Datensatz → serialNumber |
authenticationToken | Pass-Datensatz → pass.authenticationToken |
Beispiel:
https://apple-passkit.svc-nue.pushwoosh.com/v1/passes/pass.com.acme.loyalty/a1b2c3d4-1234-5678-9abc-def012345678?token=AbC123XyZRendern Sie diese URL mit einer beliebigen QR-Bibliothek als QR-Code. Wenn ein Benutzer ihn scannt, öffnet sein Gerät den Link, lädt den neuesten .pkpass herunter und Wallet fordert ihn auf, ihn hinzuzufügen – was auch das Gerät für Updates registriert.
Objektreferenz
Anchor link toPass-Objekt
Anchor link to| Feld | Typ | Beschreibung |
|---|---|---|
formatVersion | integer | Pass-Formatversion. Standard ist 1. |
passTypeIdentifier | string | Apple Pass Type ID (pass.com.yourcompany.passtype). Standardwert aus dem Zertifikat. |
serialNumber | string | Wird vom Server bei der Erstellung zugewiesen; identifiziert den Pass. |
teamIdentifier | string | Apple Team ID. Standardwert aus dem Zertifikat. |
organizationName | string | Organisation, die auf dem Pass angezeigt wird. Standardwert aus dem Zertifikat. |
description | string | Von Menschen lesbare Beschreibung (von Apple gefordert). |
boardingPass / coupon / eventTicket / storeCard / generic | object | Der Pass-Stil. Genau einer muss gesetzt sein. Siehe Feldgruppen. |
backgroundColor | string | Hintergrundfarbe, rgb(r, g, b). |
foregroundColor | string | Vordergrundfarbe (Text), rgb(r, g, b). |
labelColor | string | Farbe der Feldbeschriftung, rgb(r, g, b). |
logoText | string | Text, der neben dem Logo angezeigt wird. |
suppressStripShine | boolean | Deaktiviert den Glanzeffekt auf dem Streifenbild. |
barcodes | array | Barcodes, die auf dem Pass angezeigt werden. |
locations | array | Orte, die den Pass relevant machen. |
beacons | array | Beacons, die den Pass relevant machen. |
relevantDate | string | ISO 8601-Datum, an dem der Pass relevant wird. |
maxDistance | integer | Maximale Entfernung (in Metern) für die Ortsrelevanz. |
expirationDate | string | ISO 8601-Ablaufdatum. |
voided | boolean | Markiert den Pass als ungültig. |
groupingIdentifier | string | Gruppiert zusammengehörige Pässe (Veranstaltungstickets/Bordkarten). |
userInfo | object (map) | Beliebige Schlüssel/Wert-App-Daten. |
Feldgruppen-Objekt
Anchor link toJeder Pass-Stil (boardingPass, coupon, eventTicket, storeCard, generic) gruppiert Felder in Bereiche:
| Feld | Typ | Beschreibung |
|---|---|---|
headerFields | array | Wird in der Kopfzeile des Passes angezeigt (sichtbar, wenn in Wallet gestapelt). |
primaryFields | array | Die prominentesten Felder. |
secondaryFields | array | Unterhalb der primären Felder. |
auxiliaryFields | array | Zusätzliche Felder unterhalb der sekundären. |
backFields | array | Wird auf der Rückseite des Passes angezeigt. |
boardingPass hat zusätzlich transitType (PKTransitTypeAir, PKTransitTypeTrain, PKTransitTypeBus, PKTransitTypeBoat oder PKTransitTypeGeneric).
Feld-Objekt
Anchor link to| Feld | Typ | Beschreibung |
|---|---|---|
key | string | Eindeutiger Feldschlüssel innerhalb des Passes. |
label | string | Feldbeschriftung. |
value | string | Feldwert (Text oder Zahl als Zeichenkette). |
changeMessage | string | Nachricht, die angezeigt wird, wenn sich der Wert ändert (verwenden Sie %@ als Platzhalter). |
textAlignment | string | PKTextAlignment-Wert. |
dateStyle / timeStyle | string | PKDateStyle für Datums-/Zeitformatierung. |
isRelative | boolean | Das Datum relativ zu jetzt anzeigen. |
numberStyle | string | PKNumberStyle für Zahlenformatierung. |
currencyCode | string | ISO 4217-Währungscode. |
dataDetectorTypes | array of strings | Datendetektoren, die auf den Wert angewendet werden sollen. |
Barcode-Objekt
Anchor link to| Feld | Typ | Beschreibung |
|---|---|---|
format | string | PKBarcodeFormatQR, PKBarcodeFormatPDF417, PKBarcodeFormatAztec oder PKBarcodeFormatCode128. |
message | string | Im Barcode kodierte Daten. |
messageEncoding | string | Textkodierung, typischerweise iso-8859-1. |
altText | string | Text, der unter dem Barcode angezeigt wird. |
Orts-Objekt
Anchor link to| Feld | Typ | Beschreibung |
|---|---|---|
latitude | number | Breitengrad. |
longitude | number | Längengrad. |
altitude | number | Höhe in Metern. |
relevantText | string | Text, der auf dem Sperrbildschirm in der Nähe dieses Ortes angezeigt wird. |
Beacon-Objekt
Anchor link to| Feld | Typ | Beschreibung |
|---|---|---|
proximityUuid | string | iBeacon Proximity-UUID. |
major | integer | Major-Wert. |
minor | integer | Minor-Wert. |
relevantText | string | Text, der auf dem Sperrbildschirm in der Nähe dieses Beacons angezeigt wird. |
Pass-Bild-Objekt
Anchor link to| Feld | Typ | Beschreibung |
|---|---|---|
imageType | string | Eines von icon, logo, strip, background, footer, thumbnail. icon und logo sind erforderlich. |
data | string (Base64) | Bild-Bytes. |
contentType | string | MIME-Typ, zum Beispiel image/png. |
Pass-Datensatz-Objekt
Anchor link toWird von list/get-Endpunkten zurückgegeben.
| Feld | Typ | Beschreibung |
|---|---|---|
serialNumber | string | Seriennummer des Passes. |
passTypeIdentifier | string | Pass Type ID. |
organizationName | string | Organisationsname. |
description | string | Pass-Beschreibung. |
createdAt | string | Erstellungszeitstempel (RFC 3339). |
updatedAt | string | Zeitstempel der letzten Aktualisierung (RFC 3339). |
updateTag | integer | Aktuelles Update-Tag. |
pass | object | Das vollständige Pass-Objekt zur Bearbeitung. |
userId | string | Pushwoosh User ID, für die der Pass ausgestellt wurde. |