Passer au contenu

API Apple Wallet PassKit

L’API PassKit Designer vous permet de créer, mettre à jour, télécharger et gérer les passes Apple Wallet par programmation. Elle prend en charge les mêmes opérations que le constructeur de passes dans le Panneau de Configuration. Utilisez-la pour émettre des cartes de fidélité, des coupons, des billets d’événement, des cartes d’embarquement et des cartes de magasin, et pour envoyer des mises à jour en direct aux passes déjà installés sur les appareils de vos utilisateurs.

URL de base

Anchor link to
https://apple-passkit.svc-nue.pushwoosh.com

Tous les points de terminaison sont servis via HTTPS. Les requêtes et les réponses utilisent application/json sauf indication contraire.

Authentification

Anchor link to

Chaque requête doit inclure un en-tête Authorization avec votre jeton d’accès à l’API Pushwoosh :

Authorization: Token <api-token>

Le compte propriétaire du jeton doit être propriétaire de l’application référencée par applicationCode. Une requête pour une application appartenant à un autre compte renvoie 403 Forbidden.

Conventions

Anchor link to
  • Nommage des champs : Les champs JSON utilisent le lowerCamelCase (par exemple, passTypeIdentifier, serialNumber, backgroundColor).
  • Champs non remplis : les réponses incluent tous les champs, même lorsqu’ils sont vides ou nuls.
  • Données binaires : les champs bytes tels que pkpassData et l’image data sont des chaînes encodées en Base64 en JSON.
  • Numéros de série : le serialNumber est toujours attribué par le serveur lors de la création d’un pass. Toute valeur que vous envoyez à la création est ignorée ; il identifie le pass pour toutes les opérations ultérieures.

Réponses d’erreur

Anchor link to

L’API mappe les codes de statut internes aux codes de statut HTTP :

Statut HTTPSignification
400 Bad RequestArgument invalide — un champ obligatoire est manquant ou malformé.
401 UnauthorizedEn-tête Authorization manquant ou invalide.
403 ForbiddenL’application n’appartient pas au compte de l’appelant.
404 Not FoundLe pass, le modèle ou l’application n’a pas été trouvé.
503 Service UnavailableLe service est à pleine capacité ou temporairement indisponible.

Points de terminaison

Anchor link to
MéthodeCheminDescription
POST/api/pass/validateValider une configuration de pass
POST/api/pass/createCréer un nouveau .pkpass
POST/api/pass/update/{serialNumber}Mettre à jour un pass existant et notifier les appareils
GET/api/passesLister tous les passes pour une application
GET/api/pass/{applicationCode}/{serialNumber}Obtenir un seul pass
GET/api/pass/{applicationCode}/{serialNumber}/downloadTélécharger le .pkpass d’un pass existant
DELETE/api/pass/{applicationCode}/{serialNumber}Supprimer un pass
GET/api/pass/{serialNumber}/registrationsLister les appareils enregistrés pour un pass
GET/api/configObtenir la configuration PassKit de l’application
GET/api/templatesLister les modèles de passes disponibles
GET/api/templates/{filename}Obtenir un seul modèle

Créer un pass

Anchor link to

Génère, signe et stocke un nouveau pass, puis renvoie son numéro de série attribué par le serveur.

POST /api/pass/create

Corps de la requête

Anchor link to
ParamètreTypeRequisDescription
passobjetOuiL’objet pass décrivant le pass.
imagestableau d’objetsNonImages du pass (icône, logo, etc.). icon et logo sont requis pour un pass valide.
userIdchaîneOuiL’ID utilisateur Pushwoosh auquel le pass est émis.
applicationCodechaîneOuiLe code d’application Pushwoosh.
Exemple de requête
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" }
]
}
ChampTypeDescription
serialNumberchaîneIdentité unique attribuée par le serveur du pass créé. Utilisez-la pour récupérer le pass (Obtenir un pass) ou télécharger le .pkpass (Télécharger un pass).
messagechaîneMessage de résultat.
Exemple de réponse
Anchor link to
{
"serialNumber": "a1b2c3d4-1234-5678-9abc-def012345678",
"message": "Pass created successfully"
}

Valider un pass

Anchor link to

Vérifie une configuration de pass par rapport aux spécifications d’Apple sans créer de fichier. Utile avant d’appeler la création.

POST /api/pass/validate

Corps de la requête

Anchor link to
ParamètreTypeRequisDescription
passobjetOuiL’objet pass à valider.
ChampTypeDescription
validbooléenIndique si le pass passe la validation.
errorstableau de chaînesProblèmes bloquants qui doivent être corrigés.
warningstableau de chaînesAvis non bloquants.

Mettre à jour un pass

Anchor link to

Régénère le pass avec un nouveau contenu, le re-signe, incrémente son tag de mise à jour et envoie une notification push silencieuse à chaque appareil qui a enregistré le pass. iOS récupère et installe ensuite la version mise à jour en arrière-plan.

POST /api/pass/update/{serialNumber}

Paramètres de chemin

Anchor link to
ParamètreTypeDescription
serialNumberchaîneLe numéro de série retourné lors de la création du pass.

Corps de la requête

Anchor link to
ParamètreTypeRequisDescription
updatesobjetOuiL’objet pass complet avec le nouveau contenu.
applicationCodechaîneOuiLe code d’application Pushwoosh.

Le serialNumber (du chemin) et le jeton d’authentification du pass sont conservés par le serveur, peu importe ce que vous envoyez.

ChampTypeDescription
successbooléenIndique si la mise à jour a réussi.
updateTagentierNouveau tag de mise à jour (un horodatage Unix).
messagechaîneMessage de résultat.

Lister les passes

Anchor link to

Renvoie une liste paginée et triée des passes stockés pour une application.

GET /api/passes?applicationCode=XXXXX-XXXXX&page=0&perPage=20

Paramètres de requête

Anchor link to
ParamètreTypeRequisDescription
applicationCodechaîneOuiLe code d’application Pushwoosh.
orderBychaîneNonChamp de tri : UPDATED (par défaut) ou CREATED.
orderDirectionchaîneNonSens de tri : DESC (par défaut, le plus récent en premier) ou ASC.
pageentierNonIndex de page basé sur zéro. Par défaut 0.
perPageentierNonTaille de la page. 0 ou omis utilise la valeur par défaut du serveur.
ChampTypeDescription
passestableau d’objetsLa page actuelle des enregistrements de pass.
pageentierL’index de la page retournée.
perPageentierLa taille de page utilisée pour cette réponse.
totalentierNombre total de passes pour l’application sur toutes les pages.
Exemple de réponse
Anchor link to
{
"passes": [ /* pass records */ ],
"page": 0,
"perPage": 20,
"total": 137
}

Obtenir un pass

Anchor link to

Renvoie un seul pass stocké, y compris son objet pass complet.

GET /api/pass/{applicationCode}/{serialNumber}

Paramètres de chemin

Anchor link to
ParamètreTypeDescription
applicationCodechaîneLe code d’application Pushwoosh.
serialNumberchaîneLe numéro de série du pass.

Renvoie { "pass": { ... } }, un seul enregistrement de pass.

Télécharger un pass

Anchor link to

Renvoie le fichier .pkpass stocké d’un pass existant.

GET /api/pass/{applicationCode}/{serialNumber}/download

ChampTypeDescription
pkpassDatachaîne (Base64)Le fichier .pkpass.
filenamechaîneNom de fichier suggéré.

Supprimer un pass

Anchor link to

Supprime un enregistrement de pass et son fichier .pkpass stocké.

DELETE /api/pass/{applicationCode}/{serialNumber}

ChampTypeDescription
successbooléenIndique si le pass a été supprimé.
messagechaîneMessage de résultat.

Obtenir les enregistrements de pass

Anchor link to

Liste les appareils qui ont ajouté le pass et sont enregistrés pour les mises à jour.

GET /api/pass/{serialNumber}/registrations?applicationCode=XXXXX-XXXXX

Renvoie { "registrations": [ ... ] }, où chaque élément a :

ChampTypeDescription
deviceLibraryIdentifierchaîneIdentifiant de la bibliothèque d’appareils Apple.
pushTokenchaîneLe jeton push du pass pour l’appareil.

Obtenir la configuration

Anchor link to

Renvoie la configuration PassKit résolue pour une application à partir de son certificat.

GET /api/config?applicationCode=XXXXX-XXXXX

ChampTypeDescription
teamIdentifierchaîneID d’équipe Apple du certificat.
passTypeIdentifierchaîneID de type de pass du certificat.
organizationNamechaîneNom de l’organisation du certificat.
hasCertificatebooléenIndique si un certificat est configuré.
webServiceUrlchaîneURL de base du service web de pass. Les clients construisent un lien d’installation en ajoutant /v1/passes/{passType}/{serial}?token={authToken}.

Listez les modèles de passes disponibles, ou récupérez-en un en tant qu’objet pass que vous pouvez utiliser comme point de départ.

GET /api/templates — renvoie { "templates": [ { "filename", "name", "description", "style" } ] }.

GET /api/templates/{filename} — renvoie { "template": { ...objet pass... } }.

Partager un pass sous forme de code QR

Anchor link to

Pour permettre aux utilisateurs d’ajouter un pass en scannant un code QR (ou en appuyant sur un lien), encodez l’URL d’installation du pass dans un code QR. L’URL est construite à partir des valeurs que vous récupérez déjà de l’API :

{webServiceUrl}/v1/passes/{passTypeIdentifier}/{serialNumber}?token={authenticationToken}
Partie de l’URLOù l’obtenir
webServiceUrlGET /api/configwebServiceUrl
passTypeIdentifierenregistrement de passpass.passTypeIdentifier (de la liste/obtention)
serialNumberenregistrement de passserialNumber
authenticationTokenenregistrement de passpass.authenticationToken

Exemple :

https://apple-passkit.svc-nue.pushwoosh.com/v1/passes/pass.com.acme.loyalty/a1b2c3d4-1234-5678-9abc-def012345678?token=AbC123XyZ

Générez cette URL sous forme de code QR avec n’importe quelle bibliothèque QR. Lorsqu’un utilisateur la scanne, son appareil ouvre le lien, télécharge le dernier .pkpass, et Wallet l’invite à l’ajouter, ce qui enregistre également l’appareil pour les mises à jour.

Référence d’objet

Anchor link to

Objet Pass

Anchor link to
ChampTypeDescription
formatVersionentierVersion du format du pass. Par défaut 1.
passTypeIdentifierchaîneID de type de pass Apple (pass.com.yourcompany.passtype). Par défaut à partir du certificat.
serialNumberchaîneAttribué par le serveur à la création ; identifie le pass.
teamIdentifierchaîneID d’équipe Apple. Par défaut à partir du certificat.
organizationNamechaîneOrganisation affichée sur le pass. Par défaut à partir du certificat.
descriptionchaîneDescription lisible par l’homme (requise par Apple).
boardingPass / coupon / eventTicket / storeCard / genericobjetLe style du pass. Exactement un doit être défini. Voir les groupes de champs.
backgroundColorchaîneCouleur de fond, rgb(r, g, b).
foregroundColorchaîneCouleur de premier plan (texte), rgb(r, g, b).
labelColorchaîneCouleur de l’étiquette du champ, rgb(r, g, b).
logoTextchaîneTexte affiché à côté du logo.
suppressStripShinebooléenDésactiver l’effet de brillance sur l’image de la bande.
barcodestableauCodes-barres affichés sur le pass.
locationstableauEmplacements qui rendent le pass pertinent.
beaconstableauBalises qui rendent le pass pertinent.
relevantDatechaîneDate ISO 8601 à laquelle le pass devient pertinent.
maxDistanceentierDistance maximale (mètres) pour la pertinence de l’emplacement.
expirationDatechaîneDate d’expiration ISO 8601.
voidedbooléenMarque le pass comme nul.
groupingIdentifierchaîneRegroupe les passes associés (billets d’événement/cartes d’embarquement).
userInfoobjet (map)Données d’application clé/valeur arbitraires.

Objet groupe de champs

Anchor link to

Chaque style de pass (boardingPass, coupon, eventTicket, storeCard, generic) regroupe les champs en zones :

ChampTypeDescription
headerFieldstableauAffiché dans l’en-tête du pass (visible lorsqu’il est empilé dans Wallet).
primaryFieldstableauChamps les plus importants.
secondaryFieldstableauSous les champs primaires.
auxiliaryFieldstableauChamps supplémentaires sous les secondaires.
backFieldstableauAffiché au dos du pass.

boardingPass a en plus transitType (PKTransitTypeAir, PKTransitTypeTrain, PKTransitTypeBus, PKTransitTypeBoat, ou PKTransitTypeGeneric).

Objet champ

Anchor link to
ChampTypeDescription
keychaîneClé de champ unique dans le pass.
labelchaîneÉtiquette du champ.
valuechaîneValeur du champ (texte ou nombre sous forme de chaîne).
changeMessagechaîneMessage affiché lorsque la valeur change (utilisez %@ comme espace réservé).
textAlignmentchaîneValeur PKTextAlignment.
dateStyle / timeStylechaînePKDateStyle pour le formatage de la date/heure.
isRelativebooléenAfficher la date par rapport à maintenant.
numberStylechaînePKNumberStyle pour le formatage des nombres.
currencyCodechaîneCode de devise ISO 4217.
dataDetectorTypestableau de chaînesDétecteurs de données à appliquer à la valeur.

Objet code-barres

Anchor link to
ChampTypeDescription
formatchaînePKBarcodeFormatQR, PKBarcodeFormatPDF417, PKBarcodeFormatAztec, ou PKBarcodeFormatCode128.
messagechaîneDonnées encodées dans le code-barres.
messageEncodingchaîneEncodage du texte, généralement iso-8859-1.
altTextchaîneTexte affiché sous le code-barres.

Objet emplacement

Anchor link to
ChampTypeDescription
latitudenombreLatitude.
longitudenombreLongitude.
altitudenombreAltitude en mètres.
relevantTextchaîneTexte affiché sur l’écran de verrouillage à proximité de cet emplacement.

Objet balise

Anchor link to
ChampTypeDescription
proximityUuidchaîneUUID de proximité iBeacon.
majorentierValeur majeure.
minorentierValeur mineure.
relevantTextchaîneTexte affiché sur l’écran de verrouillage à proximité de cette balise.

Objet image de pass

Anchor link to
ChampTypeDescription
imageTypechaîneUn parmi icon, logo, strip, background, footer, thumbnail. icon et logo sont requis.
datachaîne (Base64)Octets de l’image.
contentTypechaîneType MIME, par exemple image/png.

Objet enregistrement de pass

Anchor link to

Retourné par les points de terminaison de liste/obtention.

ChampTypeDescription
serialNumberchaîneNuméro de série du pass.
passTypeIdentifierchaîneID de type de pass.
organizationNamechaîneNom de l’organisation.
descriptionchaîneDescription du pass.
createdAtchaîneHorodatage de création (RFC 3339).
updatedAtchaîneHorodatage de la dernière mise à jour (RFC 3339).
updateTagentierTag de mise à jour actuel.
passobjetL’objet pass complet, pour l’édition.
userIdchaîneID utilisateur Pushwoosh auquel le pass a été émis.