Crear pase
Headers
| Header | Valor |
|---|---|
X-API-Key | Tu API key |
Content-Type | application/json |
Apple Wallet — Event Ticket con QR
Campos de pass_data (Apple)
| Campo | Tipo | Descripción |
|---|---|---|
serial_number | string | Requerido. Identificador único del pase |
organization_name | string | Requerido. Nombre de la organización |
description | string | Requerido. Descripción del pase |
style | string | eventTicket, boardingPass, coupon, storeCard, generic (default) |
background_color | string | Color de fondo CSS, e.g. "rgb(30, 60, 120)" |
foreground_color | string | Color de texto |
label_color | string | Color de labels |
logo_text | string | Texto junto al logo |
barcodes | array | Barcodes: PKBarcodeFormatQR, PKBarcodeFormatPDF417, PKBarcodeFormatAztec, PKBarcodeFormatCode128 |
header_fields | array | Campos en la parte superior |
primary_fields | array | Campos principales (grandes) |
secondary_fields | array | Campos secundarios |
auxiliary_fields | array | Campos auxiliares |
back_fields | array | Campos en el reverso del pase |
Estructura de campos (Apple)
Cada campo enheader_fields, primary_fields, secondary_fields, auxiliary_fields y back_fields tiene esta estructura:
| Propiedad | Tipo | Descripción |
|---|---|---|
key | string | Requerido. Identificador único del campo |
value | string | Requerido. Valor visible en el pase |
label | string | Etiqueta sobre el valor |
changeMessage | string | Mensaje de notificación al actualizar. Usa %@ para insertar el nuevo valor |
textAlignment | string | PKTextAlignmentLeft, PKTextAlignmentCenter, PKTextAlignmentRight |
changeMessage y notificaciones push:
Para que el usuario reciba una notificación visible en la pantalla de bloqueo al actualizar un pase, el campo debe incluir changeMessage. Sin este atributo, el pase se actualiza silenciosamente.
Pase actualizado — Partido actualizado: Dom 2:30pm · Cancha 5 vs García/López |icon_base64| string | Icon PNG @1x (29×29 pt) | |icon_2x_base64| string | Icon PNG @2x (58×58 px) — recomendado | |icon_3x_base64| string | Icon PNG @3x (87×87 px) | |logo_base64| string | Logo PNG @1x (160×50 pt) | |logo_2x_base64| string | Logo PNG @2x (320×100 px) — recomendado | |logo_3x_base64| string | Logo PNG @3x (480×150 px) | |strip_base64| string | Strip PNG @1x (375×144 pt) — banda de acento con info dinámica | |strip_2x_base64| string | Strip PNG @2x (750×288 px) — recomendado | |strip_3x_base64| string | Strip PNG @3x (1125×432 px) | |thumbnail_base64| string | Thumbnail PNG (90×90 pt / 180×180 @2x) | |relevant_date| string | Fecha W3C para relevancia | |expiration_date| string | Fecha de expiración W3C | |locations| array |[{"latitude": 19.43, "longitude": -99.13, "relevantText": "Cerca del evento"}]|
Crear pase desde template
Si tienes un template configurado, solo necesitastemplate_id + los overrides:
pass_type y style se infieren del template. Los campos del template se mergean con los overrides (el request gana).
Respuesta (202)
GET /v1/jobs/{job_id} para obtener el resultado:
Descarga directa
.pkpass con Content-Type: application/vnd.apple.pkpass.
Google Wallet
Paso 1: Crear clase (una por torneo/evento)
Actualizar clase
Si cambia la sede, fechas o nombre del torneo:Consultar clase
Paso 2: Crear pase (uno por jugador)
| Campo del objeto | Descripción |
|---|---|
ticketHolderName | Nombre del jugador (visible en el frente) |
ticketType | Categoría del jugador |
ticketNumber | Dorsal o ID del jugador |
textModulesData | Campos dinámicos (próximo partido, resultado, etc.) |
eventName, venue y dateTime del frente vienen de la clase (no del objeto).
Resultado:
object_id debe ser único. Si se reutiliza un ID ya creado, Google rechaza el save link.
Actualizar pase
Apple Wallet
Acepta campos encamelCase (auxiliaryFields) o snake_case (auxiliary_fields). Incluir changeMessage para notificación visible en lock screen.
Google Wallet
Incluirnotify_message para enviar notificación visible al usuario.
Respuesta (202)
Estado del pase
Respuesta (200) — Apple Wallet
installed_devices muestra cuántos dispositivos lo tienen activo.
Respuesta (200) — Google Wallet
| Campo | Descripción |
|---|---|
google_status | Estado del objeto en Google: ACTIVE, COMPLETED, EXPIRED, INACTIVE, o not_found si fue borrado |
has_users | true si al menos un usuario tiene el pase guardado en Google Wallet |
is_installed | Resumen: true si hay evidencia de que el pase está en un dispositivo |
Webhook de device registration (Apple)
Axelo puede notificar a tu backend cuando un usuario instala o elimina un pase de Apple Wallet.Configuración
En el dashboard admin → detalle del tenant → sección “Wallet Webhook”, configura la URL destino. O via API:Payload que recibe tu webhook
| Campo | Descripción |
|---|---|
action | "register" cuando el usuario agrega el pase, "unregister" cuando lo elimina |
pass_id | ID del pase en Axelo |
serial_number | Serial del pase en Apple Wallet |
device_id | Identificador del dispositivo (deviceLibraryIdentifier de Apple) |
timestamp | Hora UTC del evento |
GET /v1/passes/{id}/status para consultar bajo demanda.
Guía de diseño
Colores del sistema
| Token | Hex | Uso |
|---|---|---|
| Navy | #0B1F3A | backgroundColor base de todos los pases |
| Blue | #1A56DB | CTA, links, acento Torneos Pro default |
| Sky | #3B82F6 | Acento secundario, iconos |
| White | #FFFFFF | foregroundColor y labelColor |
Color de acento por torneo
EllabelColor en Apple y hexBackgroundColor en Google se usan para el acento del torneo:
| Acento | Hex | Uso típico |
|---|---|---|
| Amber | #F59E0B | Torneos de verano |
| Green | #22C55E | Corporativos |
| Sky | #3B82F6 | Series oficiales (default) |
| Red | #EF4444 | Premium / invitacionales |
| Purple | #A855F7 | Femenino / alternativos |
Strip image (Apple)
Lastrip.png es la banda de acento que muestra la hora del próximo partido. Se genera dinámicamente con el accent del torneo y se re-envía en cada update:
- Dimensiones: 375×144 @1x, 750×288 @2x, 1125×432 @3x
- Contenido: fondo con gradient del accent + hora del partido + pista + rival
- Enviar como:
strip_base64(ostrip_2x_base64para retina) - Regenerar: cada vez que cambia el próximo partido
Catálogo de push notifications
| Evento | Trigger | Mensaje ejemplo |
|---|---|---|
match.upcoming | 30 min antes del partido | ”Tu partido empieza en 30 min — Pista 4 · 09:30 · vs López” |
match.result.recorded | Organizador registra resultado | ”Resultado registrado · 6-3, 6-4 — Pasas a cuartos” |
player.advanced | Jugador avanza de ronda | ”¡Felicitaciones! Avanzaste a semifinales” |
tournament.finished | Final registrada | ”Torneo finalizado · 2º lugar” |
changeMessage en los campos dinámicos. Para Google, incluir notify_message en el PUT.
Errores
| Código | Causa |
|---|---|
400 | pass_type inválido o pass_data faltante |
401 | API key inválida |
402 | Saldo insuficiente (1 token por pase) |
403 | Canal wallet no habilitado para tu tenant |
404 | Pase no encontrado |