Saltar al contenido

API PassKit de Apple Wallet

La API PassKit Designer le permite crear, actualizar, descargar y gestionar pases de Apple Wallet de forma programática. Admite las mismas operaciones que realiza el creador de pases en el Panel de Control. Úsela para emitir tarjetas de fidelidad, cupones, entradas para eventos, tarjetas de embarque y tarjetas de tienda, y para enviar actualizaciones en tiempo real a los pases ya instalados en los dispositivos de sus usuarios.

https://apple-passkit.svc-nue.pushwoosh.com

Todos los endpoints se sirven a través de HTTPS. Las solicitudes y respuestas utilizan application/json a menos que se indique lo contrario.

Autenticación

Anchor link to

Cada solicitud debe incluir un encabezado Authorization con su token de acceso a la API de Pushwoosh:

Authorization: Token <api-token>

La cuenta propietaria del token debe ser la propietaria de la aplicación a la que hace referencia applicationCode. Una solicitud para una aplicación que pertenece a otra cuenta devuelve 403 Forbidden.

Convenciones

Anchor link to
  • Nomenclatura de campos: Los campos JSON utilizan lowerCamelCase (por ejemplo, passTypeIdentifier, serialNumber, backgroundColor).
  • Campos no rellenados: las respuestas incluyen todos los campos, incluso cuando están vacíos o tienen valor cero.
  • Datos binarios: los campos de bytes como pkpassData y los data de imagen son cadenas codificadas en Base64 en JSON.
  • Números de serie: el serialNumber siempre es asignado por el servidor cuando se crea un pase. Cualquier valor que envíe al crear será ignorado; este identifica el pase para todas las operaciones posteriores.

Respuestas de error

Anchor link to

La API asigna códigos de estado internos a códigos de estado HTTP:

Estado HTTPSignificado
400 Bad RequestArgumento no válido: falta un campo obligatorio o está mal formado.
401 UnauthorizedEncabezado Authorization ausente o no válido.
403 ForbiddenLa aplicación no pertenece a la cuenta del solicitante.
404 Not FoundNo se encontró el pase, la plantilla o la aplicación.
503 Service UnavailableEl servicio está al máximo de su capacidad o no está disponible temporalmente.
MétodoRutaDescripción
POST/api/pass/validateValidar una configuración de pase
POST/api/pass/createCrear un nuevo .pkpass
POST/api/pass/update/{serialNumber}Actualizar un pase existente y notificar a los dispositivos
GET/api/passesListar todos los pases para una aplicación
GET/api/pass/{applicationCode}/{serialNumber}Obtener un único pase
GET/api/pass/{applicationCode}/{serialNumber}/downloadDescargar el .pkpass de un pase existente
DELETE/api/pass/{applicationCode}/{serialNumber}Eliminar un pase
GET/api/pass/{serialNumber}/registrationsListar dispositivos registrados para un pase
GET/api/configObtener la configuración de PassKit de la aplicación
GET/api/templatesListar plantillas de pases disponibles
GET/api/templates/{filename}Obtener una única plantilla

Crear un pase

Anchor link to

Genera, firma y almacena un nuevo pase, y luego devuelve su número de serie asignado por el servidor.

POST /api/pass/create

Cuerpo de la solicitud

Anchor link to
ParámetroTipoRequeridoDescripción
passobjetoEl objeto de pase que describe el pase.
imagesarray de objetosNoImágenes del pase (icono, logo, etc.). icon y logo son necesarios para un pase válido.
userIdstringEl User ID de Pushwoosh al que se emite el pase.
applicationCodestringEl código de aplicación de Pushwoosh.
Ejemplo de solicitud
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" }
]
}
CampoTipoDescripción
serialNumberstringIdentidad única asignada por el servidor del pase creado. Úselo para obtener el pase (Obtener un pase) o descargar el .pkpass (Descargar un pase).
messagestringMensaje de resultado.
Ejemplo de respuesta
Anchor link to
{
"serialNumber": "a1b2c3d4-1234-5678-9abc-def012345678",
"message": "Pass created successfully"
}

Validar un pase

Anchor link to

Comprueba la configuración de un pase con las especificaciones de Apple sin crear un archivo. Es útil antes de llamar a crear.

POST /api/pass/validate

Cuerpo de la solicitud

Anchor link to
ParámetroTipoRequeridoDescripción
passobjetoEl objeto de pase a validar.
CampoTipoDescripción
validbooleanIndica si el pase supera la validación.
errorsarray de stringsProblemas bloqueantes que deben ser corregidos.
warningsarray de stringsAdvertencias no bloqueantes.

Actualizar un pase

Anchor link to

Regenera el pase con nuevo contenido, lo vuelve a firmar, incrementa su etiqueta de actualización y envía una notificación push silenciosa a cada dispositivo que registró el pase. iOS luego recupera e instala la versión actualizada en segundo plano.

POST /api/pass/update/{serialNumber}

Parámetros de ruta

Anchor link to
ParámetroTipoDescripción
serialNumberstringEl número de serie devuelto cuando se creó el pase.

Cuerpo de la solicitud

Anchor link to
ParámetroTipoRequeridoDescripción
updatesobjetoEl objeto de pase completo con el nuevo contenido.
applicationCodestringEl código de aplicación de Pushwoosh.

El serialNumber (de la ruta) y el token de autenticación del pase son conservados por el servidor independientemente de lo que envíe.

CampoTipoDescripción
successbooleanIndica si la actualización tuvo éxito.
updateTagintegerNueva etiqueta de actualización (una marca de tiempo de Unix).
messagestringMensaje de resultado.

Listar pases

Anchor link to

Devuelve una lista paginada y ordenada de los pases almacenados para una aplicación.

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

Parámetros de consulta

Anchor link to
ParámetroTipoRequeridoDescripción
applicationCodestringEl código de aplicación de Pushwoosh.
orderBystringNoCampo de ordenación: UPDATED (por defecto) o CREATED.
orderDirectionstringNoDirección de ordenación: DESC (por defecto, los más nuevos primero) o ASC.
pageintegerNoÍndice de página basado en cero. Por defecto es 0.
perPageintegerNoTamaño de la página. 0 u omitido utiliza el valor por defecto del servidor.
CampoTipoDescripción
passesarray de objetosLa página actual de registros de pases.
pageintegerEl índice de página devuelto.
perPageintegerEl tamaño de página utilizado para esta respuesta.
totalintegerNúmero total de pases para la aplicación en todas las páginas.
Ejemplo de respuesta
Anchor link to
{
"passes": [ /* pass records */ ],
"page": 0,
"perPage": 20,
"total": 137
}

Obtener un pase

Anchor link to

Devuelve un único pase almacenado, incluyendo su objeto de pase completo.

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

Parámetros de ruta

Anchor link to
ParámetroTipoDescripción
applicationCodestringEl código de aplicación de Pushwoosh.
serialNumberstringEl número de serie del pase.

Devuelve { "pass": { ... } }, un único registro de pase.

Descargar un pase

Anchor link to

Devuelve el archivo .pkpass almacenado de un pase existente.

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

CampoTipoDescripción
pkpassDatastring (Base64)El archivo .pkpass.
filenamestringNombre de archivo sugerido.

Eliminar un pase

Anchor link to

Elimina un registro de pase y su archivo .pkpass almacenado.

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

CampoTipoDescripción
successbooleanIndica si el pase fue eliminado.
messagestringMensaje de resultado.

Obtener registros de pases

Anchor link to

Lista los dispositivos que han añadido el pase y están registrados para recibir actualizaciones.

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

Devuelve { "registrations": [ ... ] }, donde cada elemento tiene:

CampoTipoDescripción
deviceLibraryIdentifierstringIdentificador de la biblioteca de dispositivos de Apple.
pushTokenstringEl token push del pase para el dispositivo.

Obtener configuración

Anchor link to

Devuelve la configuración de PassKit resuelta para una aplicación a partir de su certificado.

GET /api/config?applicationCode=XXXXX-XXXXX

CampoTipoDescripción
teamIdentifierstringID de equipo de Apple del certificado.
passTypeIdentifierstringID de tipo de pase del certificado.
organizationNamestringNombre de la organización del certificado.
hasCertificatebooleanIndica si hay un certificado configurado.
webServiceUrlstringURL base del servicio web del pase. Los clientes construyen un enlace de instalación añadiendo /v1/passes/{passType}/{serial}?token={authToken}.

Plantillas

Anchor link to

Liste las plantillas de pases disponibles, o recupere una como un objeto de pase que puede usar como punto de partida.

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

GET /api/templates/{filename} — devuelve { "template": { ...objeto de pase... } }.

Compartir un pase como un código QR

Anchor link to

Para permitir que los usuarios añadan un pase escaneando un código QR (o tocando un enlace), codifique la URL de instalación del pase en un código QR. La URL se construye a partir de los valores que ya obtiene de la API:

{webServiceUrl}/v1/passes/{passTypeIdentifier}/{serialNumber}?token={authenticationToken}
Parte de la URLDónde obtenerlo
webServiceUrlGET /api/configwebServiceUrl
passTypeIdentifierregistro de pasepass.passTypeIdentifier (de listar/obtener)
serialNumberregistro de paseserialNumber
authenticationTokenregistro de pasepass.authenticationToken

Ejemplo:

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

Renderice esta URL como un código QR con cualquier biblioteca de QR. Cuando un usuario lo escanea, su dispositivo abre el enlace, descarga el último .pkpass y Wallet le pide que lo añada, lo que también registra el dispositivo para recibir actualizaciones.

Referencia de objetos

Anchor link to

Objeto de pase

Anchor link to
CampoTipoDescripción
formatVersionintegerVersión del formato del pase. Por defecto es 1.
passTypeIdentifierstringID de tipo de pase de Apple (pass.com.yourcompany.passtype). Toma el valor por defecto del certificado.
serialNumberstringAsignado por el servidor al crear; identifica el pase.
teamIdentifierstringID de equipo de Apple. Toma el valor por defecto del certificado.
organizationNamestringOrganización que se muestra en el pase. Toma el valor por defecto del certificado.
descriptionstringDescripción legible por humanos (requerida por Apple).
boardingPass / coupon / eventTicket / storeCard / genericobjetoEl estilo del pase. Exactamente uno debe estar configurado. Consulte grupos de campos.
backgroundColorstringColor de fondo, rgb(r, g, b).
foregroundColorstringColor de primer plano (texto), rgb(r, g, b).
labelColorstringColor de la etiqueta del campo, rgb(r, g, b).
logoTextstringTexto que se muestra junto al logo.
suppressStripShinebooleanDesactivar el efecto de brillo en la imagen de la tira.
barcodesarrayCódigos de barras que se muestran en el pase.
locationsarrayUbicaciones que hacen que el pase sea relevante.
beaconsarrayBeacons que hacen que el pase sea relevante.
relevantDatestringFecha ISO 8601 en la que el pase se vuelve relevante.
maxDistanceintegerDistancia máxima (metros) para la relevancia de la ubicación.
expirationDatestringFecha de caducidad ISO 8601.
voidedbooleanMarca el pase como nulo.
groupingIdentifierstringAgrupa pases relacionados (entradas de eventos/tarjetas de embarque).
userInfoobjeto (mapa)Datos de la aplicación de clave/valor arbitrarios.

Objeto de grupo de campos

Anchor link to

Cada estilo de pase (boardingPass, coupon, eventTicket, storeCard, generic) agrupa campos en áreas:

CampoTipoDescripción
headerFieldsarraySe muestra en el encabezado del pase (visible cuando está apilado en Wallet).
primaryFieldsarrayCampos más prominentes.
secondaryFieldsarrayDebajo de los campos primarios.
auxiliaryFieldsarrayCampos adicionales debajo de los secundarios.
backFieldsarraySe muestra en el reverso del pase.

boardingPass tiene adicionalmente transitType (PKTransitTypeAir, PKTransitTypeTrain, PKTransitTypeBus, PKTransitTypeBoat, o PKTransitTypeGeneric).

Objeto de campo

Anchor link to
CampoTipoDescripción
keystringClave de campo única dentro del pase.
labelstringEtiqueta del campo.
valuestringValor del campo (texto o número como cadena).
changeMessagestringMensaje que se muestra cuando el valor cambia (use %@ como marcador de posición).
textAlignmentstringValor de PKTextAlignment.
dateStyle / timeStylestringPKDateStyle para el formato de fecha/hora.
isRelativebooleanMostrar la fecha relativa a ahora.
numberStylestringPKNumberStyle para el formato de número.
currencyCodestringCódigo de moneda ISO 4217.
dataDetectorTypesarray de stringsDetectores de datos para aplicar al valor.

Objeto de código de barras

Anchor link to
CampoTipoDescripción
formatstringPKBarcodeFormatQR, PKBarcodeFormatPDF417, PKBarcodeFormatAztec, o PKBarcodeFormatCode128.
messagestringDatos codificados en el código de barras.
messageEncodingstringCodificación de texto, típicamente iso-8859-1.
altTextstringTexto que se muestra debajo del código de barras.

Objeto de ubicación

Anchor link to
CampoTipoDescripción
latitudenumberLatitud.
longitudenumberLongitud.
altitudenumberAltitud en metros.
relevantTextstringTexto que se muestra en la pantalla de bloqueo cerca de esta ubicación.

Objeto de beacon

Anchor link to
CampoTipoDescripción
proximityUuidstringUUID de proximidad de iBeacon.
majorintegerValor principal (major).
minorintegerValor secundario (minor).
relevantTextstringTexto que se muestra en la pantalla de bloqueo cerca de este beacon.

Objeto de imagen del pase

Anchor link to
CampoTipoDescripción
imageTypestringUno de icon, logo, strip, background, footer, thumbnail. icon y logo son obligatorios.
datastring (Base64)Bytes de la imagen.
contentTypestringTipo MIME, por ejemplo image/png.

Objeto de registro de pase

Anchor link to

Devuelto por los endpoints de listar/obtener.

CampoTipoDescripción
serialNumberstringNúmero de serie del pase.
passTypeIdentifierstringID de tipo de pase.
organizationNamestringNombre de la organización.
descriptionstringDescripción del pase.
createdAtstringMarca de tiempo de creación (RFC 3339).
updatedAtstringMarca de tiempo de la última actualización (RFC 3339).
updateTagintegerEtiqueta de actualización actual.
passobjetoEl objeto de pase completo, para editar.
userIdstringEl User ID de Pushwoosh al que se emitió el pase.