Saltar al contenido principal

Verificar Email v2

Endpoint para verificar el código enviado por email y finalizar el registro v2 creando la cuenta.


🔄 Qué hace este endpoint

Este endpoint:
1) Verifica el código contra la sesión en Redis
2) Si es válido, consume la sesión y ejecuta completeRegister()
3) Devuelve respuesta de email verificado + estado success


POST/auth/register/verify?token={token}

Verifica el código de email y finaliza el registro v2 creando el usuario

📋 Parámetros

tokenstringrequerido

Token de sesión devuelto por /auth/v2/register (query param)

codestringrequerido

Código de 6 dígitos enviado por email

📤 Respuesta

{
"code": 3001,
"message": "Email verified successfully.",
"data": {
  "status": "success"
}
}

🧠 Comportamiento real (según backend)

Redis keys involucradas

Durante el registro v2, el backend crea (TTL 10 minutos):

  • session:{token}{ email, password, codeReferral }
  • sessionCode:{token}"123456"
  • emailToSession:{email}{token}

En verificación, el backend:

  • valida session:{token} exista
  • valida sessionCode:{token} exista
  • compara el código
  • setea verify:{token} = 'true' con TTL 5 minutos
  • luego el controller borra:
    • session:{token}
    • emailToSession:{email}
  • y ejecuta completeRegister(email, password, codeReferral, { ip, userAgent })

⏱️ Tiempos y expiración (IMPORTANTE)

⏱️ TTL reales

  • El token y el código del registro v2 viven 10 minutos (Redis TTL).
    - La marca verify:{token} se guarda por 5 minutos.
    - No hay TTL de 24 horas en este flujo.

✅ Respuesta exitosa

Email verificado y usuario creado

Código 3001 - El código es válido, se crea el usuario y el registro queda finalizado.

{
"code": 3001,
"message": "Email verified successfully.",
"data": {
"status": "success"
}
}

Qué sucede internamente:

  • Se valida el código (sessionCode:{token})
  • Se consumen/limpian las claves de sesión
  • Se ejecuta completeRegister(...) (creación de usuario + wallets + KYC + auto-trust del dispositivo)

❌ Errores

Datos faltantes o formato inválido

Código 4006 - Falta token, falta code, o code no cumple /^\d{6}$/.

{
"code": 4006,
"message": "Missing required data."
}

Token inválido / sesión no existe

Código 4015 - No existe session:{token} en Redis (expiró o es inválido).

{
"code": 4015,
"message": "Invalid token."
}

Acción sugerida: reiniciar registro con /auth/v2/register.

Código expirado / no existe en sesión

Código 4004 - No existe sessionCode:{token} (expiró o fue limpiado).

{
"code": 4004,
"message": "The verification token is invalid."
}

Acción sugerida: reiniciar registro con /auth/v2/register.

Código incorrecto

Código 4005 - El código no coincide con el almacenado.

{
"code": 4005,
"message": "Invalid verification code."
}

Acción sugerida: reintentar con el código correcto (mientras no expire el TTL de 10 minutos).

Error interno

Código 5001 - Error al completar registro (por ejemplo guardado de usuario).

{
"code": 5001,
"message": "Failed to save user to the database."
}

💻 Ejemplos

JavaScript/TypeScript

const verifyEmailV2 = async (token, code) => {
const response = await fetch(
`https://api.swapbits.co/auth/v2/register/verify?token=${token}`,
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ code })
}
);

const result = await response.json();

if (result.code === 3001) {
// ✅ Usuario creado y registro finalizado
sessionStorage.removeItem('registrationToken');
window.location.href = '/login?registered=true';
}

return result;
};

cURL

curl -X POST 'https://api.swapbits.co/auth/v2/register/verify?token=registration-token-uuid' \
-H 'Content-Type: application/json' \
-d '{ "code": "123456" }'

⚡ Quick Test

POSThttps://api.swapbits.co/auth/v2/register/verify?token=registration-token-uuid
curl -X POST 'https://api.swapbits.co/auth/v2/register/verify?token=registration-token-uuid' \
  -H 'Content-Type: application/json' \
  -d '{"code":"123456"}'

🔗 Enlaces Relacionados