QvaPay API
Push

Registrar un dispositivo

POST y DELETE /push/tokens registran o revocan el token de push de un dispositivo o navegador.

POST /push/tokens

Registra (o actualiza) el token de push del dispositivo para el usuario de la sesión. Idempotente por token: el último inicio de sesión gana, así que un token que estaba en otra cuenta pasa a la nueva. Con device_id, el token anterior de ese mismo dispositivo se revoca.

Autenticación

Bearer Token (Authorization: Bearer {token}). No exige KYC.

Request

CampoTipoObligatorioNotas
platformios | android | websídebe coincidir con el cliente (x-qvapay-client-platform)
tokenstring (16–512)sítoken APNs (hex), token FCM o endpoint de la suscripción Web Push
keys{ p256dh, auth }solo webclaves de la suscripción Web Push
device_idstring ≤ 64noid estable de la instalación generado por la app
app_version, os_version, modelstringno
localestring ≤ 10noes
timezoneIANAnoAmerica/Havana; sirve para la ventana de silencio de las campañas
apns_environmentproduction | sandboxsolo iOSproduction por defecto; obligatorio sandbox en builds de desarrollo
curl -X POST https://api.qvapay.com/push/tokens \
  -H "Authorization: Bearer {token}" \
  -H "x-qvapay-client-platform: android" \
  -H "Content-Type: application/json" \
  -d '{ "platform": "android", "token": "fcm-registration-token", "device_id": "8f2c…", "app_version": "3.6.1", "os_version": "14", "locale": "es", "timezone": "America/Havana" }'

Response

201 al crear, 200 al actualizar.

{ "id": "5123", "platform": "android", "status": "active", "created": true }
CódigoMotivo
400 PLATFORM_MISMATCHla plataforma no coincide con el cliente
400datos inválidos (details lista los campos)
429demasiadas solicitudes (10/min por usuario)
503 PUSH_UNAVAILABLEservicio no disponible

DELETE /push/tokens

Revoca el token del dispositivo (cerrar sesión). Indica token, device_id o all: true.

curl -X DELETE https://api.qvapay.com/push/tokens \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{ "device_id": "8f2c…" }'
{ "revoked": 1 }