/v1/me/* y /v1/auth/*, y requiere
una sesión de usuario (JWT); las API keys no aplican.
Datos del perfil e identidad verificada
PATCH /v1/me actualiza los datos del perfil (display_name, tax_id,
phone, country). Pero con la verificación de identidad (KYC/KYB)
aprobada, el nombre, el tax ID y el país se rellenan automáticamente
desde la identidad verificada — lo que confirmó la verificación, no lo
autodeclarado — y quedan inmutables por este endpoint:
phone sigue editable en todo
momento con su propio flujo de verificación (OTP al número anterior cuando
la política lo exige).
Contraseña
1
Cambiarla (con sesión)
POST /v1/me/password con current_password y new_password. Si tu cuenta
se creó por login social y aún no tiene contraseña, dejas current_password
vacío para fijar la primera. Al cambiarla se revocan todas las demás
sesiones y la respuesta trae una sesión nueva.2
Recuperarla (sin sesión)
POST /v1/auth/password/forgot con org y email. Siempre responde 200
con el mismo cuerpo, exista o no la cuenta (no filtra si el email está
registrado). El código llega al email; con channel:"sms" llega al teléfono
verificado.POST /v1/auth/password/reset con code y new_password. Revoca todas
las sesiones.Email de login
El email se puede cambiar, pero siempre se verifica el email nuevo: el código llega a la dirección nueva y solo al confirmarlo se aplica el cambio. Esto evita que alguien apunte el login a un buzón que no controla.1
Iniciar el cambio
POST /v1/me/email/change con new_email. Si la política 2FA lo exige, envía
también el header X-OTP-Token de la acción email_change.2
Confirmar con el código
POST /v1/me/email/confirm con el code recibido en el email nuevo. Se avisa
al email anterior del cambio.Cambiar tu email no rompe tus inicios de sesión sociales ya vinculados
(Google, Apple, etc.): se identifican por el proveedor, no por el email.
Alias y QR para recibir
Cada cuenta tiene dos identificadores públicos permanentes para que te envíen dinero entre cuentas CBPay:- Alias — lo eliges una sola vez con
PUT /v1/me/alias(4-20 caracteresa-z 0-9 . _ -, sin palabras reservadas). No se puede cambiar. - QR de perfil —
GET /v1/me/qrdevuelve elqr_token, el payloadcbpay:pay?to=<token>y un PNG listo para mostrar. Solo sirve para recibir, por eso no cambia nunca.
GET /v1/resolve?alias=taylor.code (o ?qr=<token>), que devuelve tu nombre,
tipo y avatar. Y las transferencias aceptan el destino directo:
to_qr_token funciona igual (acepta el token o el payload cbpay:pay?to=…).
Foto de perfil
PUT /v1/me/avatar con los bytes de la imagen (JPEG, PNG o WebP, máx 512 KB;
el tipo se detecta del contenido). DELETE /v1/me/avatar la quita y
GET /v1/avatars/{accountID} la sirve para las vistas previas.
La respuesta trae avatar_url: cuando la imagen queda publicada en el CDN
público es una URL absoluta que carga sin autenticación (ideal para el
front — úsala directo en un <img>); GET /v1/avatars/{accountID} responde
en ese caso con un 302 hacia la misma URL.
Doble autenticación (2FA)
CBPay protege acciones sensibles con un código de un solo uso. Tú eliges, por acción, si se exige y por qué canal:
Con
GET /v1/otp/preferences ves tu política efectiva (y qué exige tu
organización, que es el piso: puedes endurecer, no bajar de ahí). Con
PUT /v1/otp/preferences la ajustas. Relajar tu 2FA (desactivar una acción
o bajar de canal) pide primero verificar tu factor actual.
App autenticadora (TOTP)
1
Enrolar
POST /v1/me/totp/enroll devuelve el otpauth:// y un QR. Escanéalo en tu app.2
Confirmar
POST /v1/me/totp/confirm con el primer código. Te entrega 10 códigos de
respaldo de un solo uso — guárdalos, se muestran una sola vez.POST /v1/me/totp/recovery-codes o quita la app con
DELETE /v1/me/totp (ambos piden un código vigente).
Passkeys
Los passkeys te dejan entrar sin contraseña usando la biometría del dispositivo (Face ID, Touch ID, Windows Hello, o una llave de seguridad).1
Registrar
POST /v1/me/passkeys/register/begin → pasa options.publicKey a
navigator.credentials.create() → POST /v1/me/passkeys/register/finish con
el resultado y un nombre (“MacBook de Taylor”).2
Iniciar sesión
POST /v1/auth/passkey/login/begin con org → navigator.credentials.get()
→ POST /v1/auth/passkey/login/finish. Como el passkey ya son dos factores
(dispositivo + biometría), este login no pide un segundo código.GET/DELETE /v1/me/passkeys. No puedes quitar
tu único método de acceso.
Los passkeys y el registro de passkeys dependen de que tu organización tenga
configurado su dominio; si no, responden
passkeys_unavailable.Sesiones y actividad
GET /v1/me/sessionslista tus sesiones activas (dispositivo, IP, método de login, cuál es la actual).DELETE /v1/me/sessions/{id}cierra una;POST /v1/me/sessions/revoke-allcierra todas menos la actual.GET /v1/me/security/events?from=&to=es el historial de seguridad de tu cuenta: logins, cambios de contraseña o email, factores agregados o quitados.
Errores frecuentes
¿Puedo cambiar mi alias o mi QR más adelante?
¿Puedo cambiar mi alias o mi QR más adelante?
No. Ambos son permanentes por diseño: son tu identidad estable para recibir
dinero. El QR solo permite recibir, así que compartirlo no es un riesgo.
Perdí el teléfono con mi app autenticadora
Perdí el teléfono con mi app autenticadora
Usa uno de tus códigos de respaldo (los que recibiste al confirmar TOTP)
en cualquier verificación o login. Si no los tienes, recupera el acceso con
otro factor (passkey o contraseña + otro canal) y regenera todo.
¿Cambiar el email me desconecta de Google/Apple?
¿Cambiar el email me desconecta de Google/Apple?
No. Los inicios de sesión sociales se identifican por el proveedor, no por el
email, así que siguen funcionando.