Consultar Estado de Verificación (OTP)
Devuelve el estado actual de la verificación de un número sin efectos secundarios: no envía mensajes, no consume intentos, no reinicia nada. Úsalo para decidir qué mostrar en tu UI (habilitar el botón de reenvío, mostrar intentos restantes, etc.).
get
/v2/otp/statusConsulta de solo lectura: no envía mensajes, no consume intentos, no altera el estado. Ideal para construir tu UI de verificación:
resend_available_inte dice cuándo habilitar el botón de "Reenviar código" (0= ya disponible).attempts_remainingte dice cuántos intentos mostrarle al usuario.statete dice qué pantalla corresponde: captura de código (pending), éxito (verified), pedir código nuevo (expired,locked) o iniciar flujo (none).
Los parámetros van como query string (es un GET).
Parámetros de query
phone_numberstringrequerido
Número cuyo estado quieres consultar.
country_codestringrequerido
Código de país, numérico. Para México
52.Respuesta
200Estado actual de la verificación
successbooleanrequerido
stateenumrequerido
Estado actual de la verificación para el número:
none: no hay verificación activa.pending: hay un código vigente esperando verificación.verified: el número ya fue verificado.expired: el código venció sin verificarse.locked: se agotaron los 7 intentos de verificación de la ronda.
enum:nonependingverifiedexpiredlocked
messagestring
hintstring
Sugerencia accionable según el estado.
nextarray<string>
Endpoints sugeridos como siguiente paso según el estado.
expires_atstring | null
Expiración del código vigente (
YYYY-MM-DD HH:mm:ss). null si no hay verificación activa.attempts_remaininginteger
Intentos de verificación restantes para el código vigente.
resend_available_ininteger
Segundos restantes del cooldown de reenvío.
0 = ya puedes reenviar.request_idstring
UUID para seguimiento de la petición.
400Parámetro faltante o inválido
successbooleanrequerido
stateenum
Estado actual de la verificación (presente cuando es relevante para el error).
enum:nonependingverifiedexpiredlocked
errorstringrequerido
Slug estable del error, para manejo programático:
| Slug | HTTP | Significado |
|---|---|---|
otp_missing_param |
400 |
Falta un parámetro obligatorio. |
otp_invalid_param |
400 |
Un parámetro es inválido o no aplica a este endpoint. |
otp_invalid_channel |
400 |
channel debe ser sms, whatsapp o voice. |
otp_message_invalid |
400 |
El message personalizado no cumple las reglas (placeholders, GSM-7, 160). |
otp_incorrect_code |
401 |
El código no coincide. |
otp_insufficient_credits |
402 |
Saldo insuficiente para enviar. |
otp_not_found |
404 |
No hay verificación activa para el número. |
otp_already_verified |
409 |
El número ya está verificado. |
otp_code_expired |
410 |
El código expiró. |
otp_throttled |
429 |
Cooldown de reenvío activo (espera resend_available_in). |
otp_max_attempts |
429 |
Se agotaron los 7 intentos de verificación de la ronda. |
otp_internal |
500 |
Error inesperado. |
otp_send_failed |
502 |
El mensaje no pudo enviarse. |
messagestringrequerido
Descripción del error en español.
hintstring
Sugerencia accionable para resolverlo.
nextarray<string>
Endpoints sugeridos como siguiente paso.
expires_atstring
Expiración del código vigente, cuando aplica.
attempts_remaininginteger
Intentos de verificación restantes, cuando aplica.
resend_available_ininteger
Segundos restantes del cooldown de reenvío, cuando aplica (errores
otp_throttled).codestring
Solo en
otp_insufficient_credits: siempre sms_07, el código estándar de saldo insuficiente de toda la API.request_idstring
UUID para seguimiento de la petición.
500Error interno inesperado
successbooleanrequerido
stateenum
Estado actual de la verificación (presente cuando es relevante para el error).
enum:nonependingverifiedexpiredlocked
errorstringrequerido
Slug estable del error, para manejo programático:
| Slug | HTTP | Significado |
|---|---|---|
otp_missing_param |
400 |
Falta un parámetro obligatorio. |
otp_invalid_param |
400 |
Un parámetro es inválido o no aplica a este endpoint. |
otp_invalid_channel |
400 |
channel debe ser sms, whatsapp o voice. |
otp_message_invalid |
400 |
El message personalizado no cumple las reglas (placeholders, GSM-7, 160). |
otp_incorrect_code |
401 |
El código no coincide. |
otp_insufficient_credits |
402 |
Saldo insuficiente para enviar. |
otp_not_found |
404 |
No hay verificación activa para el número. |
otp_already_verified |
409 |
El número ya está verificado. |
otp_code_expired |
410 |
El código expiró. |
otp_throttled |
429 |
Cooldown de reenvío activo (espera resend_available_in). |
otp_max_attempts |
429 |
Se agotaron los 7 intentos de verificación de la ronda. |
otp_internal |
500 |
Error inesperado. |
otp_send_failed |
502 |
El mensaje no pudo enviarse. |
messagestringrequerido
Descripción del error en español.
hintstring
Sugerencia accionable para resolverlo.
nextarray<string>
Endpoints sugeridos como siguiente paso.
expires_atstring
Expiración del código vigente, cuando aplica.
attempts_remaininginteger
Intentos de verificación restantes, cuando aplica.
resend_available_ininteger
Segundos restantes del cooldown de reenvío, cuando aplica (errores
otp_throttled).codestring
Solo en
otp_insufficient_credits: siempre sms_07, el código estándar de saldo insuficiente de toda la API.request_idstring
UUID para seguimiento de la petición.
Los errores de autenticación (auth_*) vienen de la capa común de la API y llegan con HTTP 200 y el detalle en el body — consulta Errores y límites.