Zoosial
docs
InicioWallet (Apple Wallet)
Volver al sitio Volver al Dashboard
Zoosial
Buscar en docs...
⌘K
APIs

Wallet (Apple Wallet)

Emite tarjetas de fidelidad/cashback que tu cliente agrega a Apple Wallet con un tap — sin instalar ninguna app. Un Program es el diseño de tu tarjeta (una marca, un tipo de recompensa); un Pass es la tarjeta ya emitida para un cliente concreto, con su saldo.

Google Wallet todavía no existe — googleUrl siempre vuelve null.

Modelo: Program → Pass

Creas un Program por diseño de tarjeta (ej. "Cashback Café Aroma"). Cada cliente final recibe un Pass dentro de ese program, con su propio saldo de puntos/cashback/sellos. La autenticación normal (Authorization: Bearer, ver Autenticación) aplica a todo lo de esta página excepto las dos rutas marcadas públicas más abajo.

Crear y editar el diseño

POST
/wallet/programs
Crea un program. name es lo único obligatorio — el resto trae valores por defecto razonables. → { program }
PATCH
/wallet/programs/:id
Edita el diseño de un program ya creado. Manda solo los campos que cambias (los demás quedan igual). Los pases ya instalados se refrescan solos en el iPhone del cliente en cuanto guardas.
GET
/wallet/programs · /wallet/programs/:id
Lista o detalle. Nunca incluyen certificados ni llaves privadas, aunque el program use certificateMode:'own'.

Campos de POST/PATCHtodo lo que Apple deja personalizar en un pase storeCard lo expone esta API, es el mismo motor que usa el editor visual del Dashboard:

CampoTipoNotas
namestringSolo en POST, obligatorio.
type'cashback'|'points'|'stamps'Solo en POST (default 'cashback') — inmutable, PATCH lo ignora si lo mandas.
certificateMode'shared'|'own'Solo en POST (default 'shared') — inmutable. Ver certificado propio abajo.
labelstringNombre del negocio en el pase (organizationName). Si lo omites, usa name.
primaryColorhex, #0F172AFondo de la tarjeta (default un azul oscuro).
foregroundColorhexTexto principal (default #FFFFFF).
labelColorhexEtiquetas pequeñas de cada campo (default #C8C8C8).
secondaryColorhex o ''Activa un degradado vertical (franja detrás del valor). '' quita un degradado ya guardado. Ver nota sobre el degradado.
logoUrlURL httpsSe descarga y se convierte a los tamaños que exige Apple al vuelo. Debe ser https:// (no http). Si falla la descarga, el pase se genera igual con un placeholder de color sólido.
headerTextstringTexto pequeño arriba de todo (ej. "Gracias por tu visita").
primaryLabelstringLabel bajo el valor grande. Si lo omites: "CASHBACK"/"PUNTOS"/"SELLOS" según type.
secondaryLabelstringSolo relevante con type:'cashback' — label del campo secundario de puntos.
auxiliaryLabel / auxiliaryValuestringCampo extra opcional (ej. "Nivel" / "Oro"). Los dos juntos o ninguno.
backTextstringMensaje en el reverso de la tarjeta (ej. términos, "válido en todas las sucursales").
valueFormat'number'|'money'Cómo se lee el valor grande. Si lo omites: 'money' para cashback, 'number' para points/stamps.
currency'MXN'|'USD'|'EUR'Solo aplica con valueFormat:'money' (default 'MXN').
Apple no permite imagen de fondo completa en tarjetas storeCard — solo admite imagen en la franja superior (strip.png), el resto del pase es siempre un color sólido. Con secondaryColor activo, esa franja lleva un degradado vertical de primaryColor a secondaryColor, y el color sólido del resto de la tarjeta pasa a ser secondaryColor — así el borde inferior de la franja se funde con el resto de la tarjeta (queda una sola costura, arriba, en vez de dos).

Certificado (shared vs. own)

certificateMode:'shared' (default) usa el certificado de Zoosial — el program nace appleStatus:'active' de una vez, sin pasos extra. 'own' es para negocios que quieren su propia marca Apple (Pass Type ID propio):

POST
/wallet/programs/:id/apple/connect
Genera el par de llaves (la privada nunca sale del servidor) y devuelve { csr, instructions[] } — el CSR se sube en tu cuenta Apple Developer.
POST
/wallet/programs/:id/apple/certificate
{ passTypeId, teamId, certificatePem } — sube el .cer que te dio Apple. → { status, expiresAt } (fecha real leída del certificado).
GET
/wallet/programs/:id/apple/status
{ status('pending_connection'|'csr_generated'|'active'), passTypeId?, expiresAt? }

Emitir y entregar pases

POST
/wallet/passes
{ programId, customerId, customerName, points?, cashback? } → { pass, appleUrl, googleUrl }. appleUrl ya trae el token de descarga (?t=) — es el link completo para "Agregar a Apple Wallet", listo para mandar por WhatsApp/SMS o convertir en QR. 409 si customerId ya tiene un pase en ese program.
GET
/wallet/programs/:id/passes
{ passes: [{ pass, appleUrl }] } — todos los pases del program, con el link de descarga ya armado.
GETDELETE
/wallet/passes/:id
Detalle, o dar de baja (el pase ya instalado se queda visible pero deja de actualizarse — no se puede reactivar).
GET
/wallet/passes/:id/download?t=… público
Bytes del .pkpass firmado. La abre el teléfono del cliente final, sin cuenta de Zoosial — es el link que le mandas (o su QR). El ?t= es obligatorio y solo lo tiene la respuesta de creación.
No hay un endpoint que devuelva un QR — appleUrl es una URL normal, genera el QR del lado de tu app (cualquier librería de QR sirve, es solo texto). El Dashboard de Zoosial lo hace así mismo, en el navegador.

Movimientos (ledger)

POST
/wallet/passes/:id/transactions
{ type('points'|'cashback'), amount, reason?, reference? } → { transaction }. amount negativo para descontar/redimir; 400 si el movimiento deja el saldo en negativo. El pase instalado se refresca solo en el iPhone del cliente en segundo plano (no bloquea la respuesta).
GET
/wallet/passes/:id/transactions[?limit=]
Historial completo — cada movimiento queda auditado, no solo el saldo final.

De cero a un pase entregado

bash
# 1. Crea el program (diseño de la tarjeta)
curl -X POST https://zoosial.com/wallet/programs \
  -H "Authorization: Bearer $SC_API_KEY" -H "Content-Type: application/json" \
  -d '{
    "name": "Café Aroma", "type": "cashback",
    "primaryColor": "#3E2723", "secondaryColor": "#6D4C41",
    "foregroundColor": "#FFFFFF", "logoUrl": "https://cafearoma.mx/logo.png",
    "primaryLabel": "CASHBACK", "valueFormat": "money", "currency": "MXN"
  }'
# -> { "program": { "id": "prog_…", … } }

# 2. Emite un pase para un cliente
curl -X POST https://zoosial.com/wallet/passes \
  -H "Authorization: Bearer $SC_API_KEY" -H "Content-Type: application/json" \
  -d '{ "programId": "prog_…", "customerId": "cli-102", "customerName": "Ana López", "cashback": 0 }'
# -> { "pass": {...}, "appleUrl": "https://zoosial.com/wallet/passes/pass_…/download?t=…", "googleUrl": null }

# 3. Entrega appleUrl al cliente (QR, WhatsApp, SMS) -- al abrirlo en su iPhone,
#    Safari ofrece "Agregar a Apple Wallet" solo, sin cuenta de Zoosial.

# 4. Más tarde, registra una compra
curl -X POST https://zoosial.com/wallet/passes/pass_…/transactions \
  -H "Authorization: Bearer $SC_API_KEY" -H "Content-Type: application/json" \
  -d '{ "type": "cashback", "amount": 45.50, "reason": "compra en tienda" }'
# El pase instalado en el iPhone de Ana se actualiza solo, sin que vuelva a escanear nada.

Actualización automática (PassKit Web Service)

/wallet/apple-service/v1/* es el protocolo de Apple que hace que el saldo se refresque solo en el Wallet del cliente. No lo llama tu integración — lo llama Apple Wallet directo, con la credencial que ya trae incrustada cada pase. No hace falta implementar nada de esto: basta con llamar a POST .../transactions o PATCH /wallet/programs/:id y el push sale solo.

En esta página
Modelo: Program → Pass Crear y editar el diseño Certificado (shared vs. own) Emitir y entregar pases Movimientos (ledger) De cero a un pase entregado Actualización automática (PassKit Web Service)
¿Tienes dudas?
Nuestro equipo responde en menos de 2h
Contactar soporte