Saltar al contenido principal
Todas las llamadas (salvo registro y login) requieren una credencial en el header Authorization:
También se acepta X-API-Key: <token> como header alternativo.

Tipos de credencial

Se obtiene con POST /v1/auth/register o POST /v1/auth/login y dura 24 horas. Pensada para apps con usuarios que inician sesión. Junto al access_token recibes un refresh token para renovar la sesión sin pedir la contraseña de nuevo — ver renovación de sesión.
Las cuentas empresa pueden tener varios miembros con roles — ver miembros de una empresa más abajo.
Si la política de la cuenta exige OTP en el login, la respuesta trae otp_required: true con un pending_token en vez de la sesión: el segundo paso se completa en POST /v1/auth/login/otp con el código recibido por SMS/WhatsApp. Flujo completo en seguridad y 2FA.
También puedes ofrecer registro e inicio de sesión con Google, Apple, Microsoft o Facebook (sin contraseña) — ver login social.

Renovación de sesión (refresh tokens)

El access_token dura 24 horas; el refresh_token (rt_…) permite obtener un par nuevo sin re-login durante 30 días, renovables en cada uso hasta un máximo de 90 días desde el login original. Es de un solo uso: cada canje devuelve un refresh_token nuevo y el anterior queda invalidado (rotación).
Reglas de seguridad que tu front debe conocer:
  • Rotación estricta: al canjear, el access token anterior de ese dispositivo queda revocado al instante (solo hay un access token vivo por cadena). Reemplaza siempre AMBOS tokens con los de la respuesta.
  • Reúso = robo: si un refresh token ya canjeado vuelve a presentarse, la cadena completa del dispositivo se revoca (tokens y sesiones) y queda un evento refresh_token_reuse en GET /v1/me/security/events. El usuario debe iniciar sesión de nuevo.
  • Muere con la sesión: cerrar sesión (DELETE /v1/me/sessions/{id}), POST /v1/me/sessions/revoke-all o un cambio/reset de contraseña invalidan también los refresh tokens asociados.
  • Cualquier rechazo responde 401 invalid_refresh_token — ante ese error, manda al usuario al login.
  • Guarda el refresh token en almacenamiento seguro (Keychain/Keystore en móvil; en web, preferir memoria + re-login o cookie httpOnly de tu backend). Las API keys pk_ no usan refresh: no expiran.
Cuando el access token esté por vencer (usa expires_at) o al recibir un 401 en una llamada normal. Evita refrescar en paralelo desde varios lugares: si dos canjes del mismo token llegan a la vez, uno gana y el otro recibe 401 sin castigo — pero un canje de un token YA rotado revoca la cadena.
El tope absoluto de la cadena es 90 días desde el login original: aunque refresques a diario, al llegar al límite el refresh devuelve 401 y el usuario debe autenticarse de nuevo (con su contraseña, passkey o login social).
No aplica: las API keys pk_ no expiran ni tienen sesión. El refresh es solo para sesiones JWT de usuarios humanos.

Nivel de acceso

Tu credencial (JWT de sesión o API key) opera tu propia cuenta: saldos, payouts, payins, transferencias, crypto, KYC/KYB y webhooks propios. Si un endpoint responde 403 account_required o 403 org_admin_required, esa operación corresponde a otro nivel de credencial — contacta al equipo de CBPay.

Tu perfil de cuenta

PATCH /v1/me acepta display_name, tax_id, phone y country (envía solo los que cambian). El email, status y kyc_status no se autogestionan: los resuelve el administrador.

Miembros de una empresa

Las cuentas empresa pueden tener varios usuarios con login propio y distinto nivel de permiso:
En una cuenta persona, POST /v1/members responde 403 company_only.

Buenas prácticas

  • Guarda las API keys en un gestor de secretos; nunca en el código ni en el navegador.
  • Usa una key por ambiente/servicio (label descriptivo) para poder rotar sin downtime.
1

Rotación sin downtime

Emite la key nueva con POST /v1/api-keys (label nuevo).
2

Despliega

Actualiza tu servicio para usar la key nueva.
3

Retira la antigua

Pide al equipo de CBPay revocar la key anterior una vez que el tráfico migró.
  • Las sesiones JWT son para front-ends; para procesos automatizados usa siempre API keys.
Última modificación el 13 de julio de 2026