Cómo Integrar Verificación OTP por SMS en tu App: Guía para Desarrolladores

Integra la API OTP de SMS Masivos: 3 endpoints (/otp/send, /otp/verify, /otp/resend) con código curl listo, parámetros y precios para devs en México.

Cómo Integrar Verificación OTP por SMS en tu App: Guía para Desarrolladores

La verificación OTP por SMS envía un código de un solo uso al celular del usuario para confirmar su identidad. Tres endpoints especializados (POST /otp/send, /otp/verify, /otp/resend) gestionan el ciclo completo: generación, validación y reenvío, con entrega garantizada en menos de 5 segundos y fallback a WhatsApp o Voz cuando el SMS no llega.

Si tu sistema todavía usa email para confirmar identidades, estás perdiendo usuarios antes del primer login. El SMS llega aunque el dispositivo no tenga WiFi, funciona en cualquier teléfono sin apps adicionales y el código aparece en la pantalla de bloqueo sin que el usuario haga nada. Para un backend en México que necesita verificar usuarios en tiempo real, es la opción más directa.

En esta guía vas a ver los tres endpoints de la API OTP de SMS Masivos, los parámetros exactos de cada llamada, cómo manejar el fallback a WhatsApp y Voz, y cuánto cuesta integrarlo en producción.

Por qué el SMS supera al email para verificación de identidad

El problema con el email como canal OTP no es el código: es el canal. Los filtros de spam interceptan mensajes automáticos, las bandejas de entrada están llenas de ruido y el usuario tiene que salir de tu app para buscar el código en otra pantalla. Con SMS, el mensaje llega en segundos y el código aparece donde el usuario ya está mirando.

Según el RFC 6238 del IETF, los códigos sensibles al tiempo requieren un canal de entrega con latencia predecible y baja. El SMS en México cumple esa condición: entrega en menos de 5 segundos, confirmada en las especificaciones técnicas de la plataforma. Ningún cliente de correo puede garantizar eso.

Para flujos de signup, login con autenticación de dos factores o confirmación de pago, el SMS reduce la fricción de verificación en el primer intento. No hay paso intermedio: el código llega, el usuario lo ve, lo ingresa. Sin abrir Outlook, sin buscar en spam, sin esperar que el servidor SMTP procese la cola.

Para entender más sobre cómo funciona el mecanismo de los códigos OTP, consulta qué son las contraseñas OTP y cómo funcionan.

Los tres endpoints que forman el flujo OTP

La API OTP de SMS Masivos tiene un diseño modular: cada etapa del flujo de verificación tiene su propio endpoint. La generación del código, su almacenamiento y la lógica de expiración corren en la plataforma. No tienes que mantener estado en tu base de datos para rastrear qué código enviaste a qué número.

Mapa del flujo

EndpointAcciónCuándo se llama
POST /otp/sendGenera y envía el código OTP al número indicadoAl iniciar el flujo (login, signup, confirmación de pago)
POST /otp/verifyValida el código que ingresó el usuario en tu UICuando el usuario envía el código
POST /otp/resendReenvía por WhatsApp o Voz si el SMS no llegóCuando el usuario toca "No recibí" en tu app

Autenticación: header apikey: TU_API_KEY en todas las peticiones. No es Authorization: Bearer. La base URL es https://api.smsmasivos.com.mx. Sin prefijo /api/v2/.

Paso 1: Envía el código con POST /otp/send

Este endpoint inicia el flujo. La plataforma genera el código único, lo almacena con su tiempo de expiración configurado y lo envía al número indicado. Tu backend solo llama el endpoint: el resto lo hace la API.

curl -X POST https://api.smsmasivos.com.mx/otp/send \
  -H "apikey: TU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phone_number": "5512345678",
    "country_code": "52",
    "company": "Tu Empresa",
    "template": "a",
    "code_length": 6,
    "code_type": "numeric"
  }'

Respuesta exitosa:

{
  "success": true,
  "message": "Código enviado",
  "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}

Respuesta con error (número inválido o fuera de cobertura):

{
  "success": false,
  "message": "phone_number inválido o fuera de cobertura",
  "code": "verification_send_01"
}

Parámetros obligatorios: phone_number, country_code, company y template.

  • phone_number: 10 dígitos en formato nacional (sin +52 ni 00). Cobertura exclusiva en México.
  • country_code: código de país sin + ni 00. Para México: "52".
  • company: nombre de tu empresa que aparece en el cuerpo del SMS.
  • template: identifica la plantilla de mensaje configurada en tu cuenta.
  • code_length (opcional): longitud del código. Por defecto: 6 dígitos.

El parámetro code_type acepta tres valores: "numeric" para códigos de solo números, "alphanumeric" para combinación de letras y números, y "letters" para códigos de solo letras. Para la mayoría de flujos, "numeric" reduce fricción porque el usuario lo ingresa desde el teclado numérico sin cambiar de vista.

Paso 2: Verifica el código con POST /otp/verify

Cuando el usuario ingresa el código en tu pantalla, tu backend llama a este endpoint. La respuesta confirma si el código es válido, si ya expiró o si el número de intentos se agotó. No necesitas implementar tu propio contador.

curl -X POST https://api.smsmasivos.com.mx/otp/verify \
  -H "apikey: TU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phone_number": "5512345678",
    "company": "Tu Empresa",
    "verification_code": "482916"
  }'

Respuesta: código válido:

{
  "success": true,
  "data": { "verified": true },
  "message": "Código válido"
}

Respuesta: código expirado:

{
  "success": false,
  "message": "El código ha expirado",
  "code": "verification_check_01"
}

Respuesta: intentos agotados:

{
  "success": false,
  "message": "Número de intentos agotado",
  "code": "verification_check_02"
}

El parámetro es verification_code, no code ni otp_code. Si la validación falla, la API devuelve el motivo específico: código incorrecto, código expirado o intentos agotados. Con esa respuesta tu UI puede mostrar el mensaje correcto al usuario sin adivinanzas.

Paso 3: Gestiona el reenvío con POST /otp/resend

No todos los SMS llegan al primer intento. Portabilidad numérica, señal intermitente, operadores con congestión. El endpoint /otp/resend cubre ese escenario con fallback a WhatsApp y Voz.

Una regla importante: el reenvío siempre lo dispara una acción del usuario, no un timer automático del sistema. El flujo correcto en tu UI es un botón "No recibí" visible después de los primeros 15-20 segundos, no un countdown automático que dispara el reenvío sin que el usuario lo pida.

# Primera opción: reenvío por WhatsApp
# (el usuario toca "No recibí" por primera vez)
curl -X POST https://api.smsmasivos.com.mx/otp/resend \
  -H "apikey: TU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phone_number": "5512345678",
    "country_code": "52",
    "company": "Tu Empresa",
    "whatsapp": true
  }'
# Segunda opción: reenvío por Voz robótica
# (el usuario toca "No recibí" por segunda vez)
curl -X POST https://api.smsmasivos.com.mx/otp/resend \
  -H "apikey: TU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phone_number": "5512345678",
    "country_code": "52",
    "company": "Tu Empresa",
    "voice": true
  }'

Respuesta exitosa (ambos canales):

{
  "success": true,
  "message": "Código reenviado"
}

El flujo de escalación recomendado: SMS en el primer intento, WhatsApp si el usuario reporta que no llegó, Voz robótica si WhatsApp tampoco llegó. La voz robótica dicta el código por llamada al número del usuario. La lógica de cuándo ofrecer cada canal la controlas tú en tu frontend con dos interacciones del mismo botón "No recibí".

Personaliza el código: tipo, longitud y plantillas

Cuatro parámetros definen el comportamiento del código que genera la API:

  • Tipo (code_type): numérico, alfanumérico o solo letras. El tipo numérico minimiza errores de transcripción porque el usuario no tiene que cambiar de teclado.
  • Longitud (code_length): define cuántos caracteres tiene el código. Códigos de 4 dígitos tienen menor fricción para confirmaciones de baja sensibilidad; 6-8 dígitos son estándar para accesos y transacciones de mayor valor.
  • Plantilla (template): el texto del SMS que rodea al código. Puedes tener múltiples plantillas configuradas en tu cuenta para distintos flujos: signup, recuperación de contraseña, confirmación de pago. Cada llamada a /otp/send especifica cuál usar.
  • Canal de fallback: SMS por defecto, WhatsApp o Voz en /otp/resend según la acción del usuario.

El tiempo de expiración del código también es configurable en tu cuenta. Para flujos de pago donde la seguridad es crítica, expiraciones cortas de 2-3 minutos son el estándar. Para signup donde hay más fricción de usuario, 5-10 minutos reducen abandono sin sacrificar demasiada seguridad.

Para los esquemas de respuesta completos y los códigos de error, revisa la documentación técnica de la API. Para una guía orientada a casos de uso por industria, consulta la guía de códigos de verificación para empresas.

Cuánto cuesta integrar OTP por SMS

El costo va por volumen mensual de SMS enviados. Sin cuota de activación ni licencia de API.

Precio por envío SMS (aplica a OTP, MXN + IVA)

Volumen mensualPrecio por SMSEjemplo: 1,000 envíos
Desde 500$0.90 MXN + IVA$1,044 MXN + IVA
Desde 1,000$0.77 MXN + IVA$893 MXN + IVA
Desde 10,000$0.68 MXN + IVA$789 MXN + IVA

El volumen mínimo de compra es 500 SMS. El saldo no expira: los créditos que compras hoy siguen disponibles meses después si no los consumes todos.

Un dato práctico: el costo real por verificación exitosa puede ser mayor al precio unitario si algunos usuarios necesitan reenvío. Para calcular tu presupuesto real, multiplica el precio por SMS por el volumen esperado más un margen conservador para intentos que requieran reenvío a WhatsApp o Voz.

Obtén tu API Key y prueba el endpoint OTP en 5 minutos

SMS Masivos es una plataforma mexicana de mensajería empresarial con 15 años en México, conexión directa a los 5 principales carriers en México, tasa de entrega del 99% y saldo que no expira. Su API OTP está diseñada específicamente para flujos de autenticación en apps y sistemas de backend.

Preguntas frecuentes sobre la integración OTP

¿Necesito un desarrollador para integrar la API OTP?

Sí. La API OTP requiere que tu backend haga peticiones HTTP REST. No es una solución no-code: necesitas a alguien que pueda hacer llamadas a endpoints desde tu servidor. Un desarrollador con experiencia básica en APIs REST lo integra en menos de un día de trabajo.

¿Funciona para números de celular fuera de México?

No. La cobertura es exclusiva en México. Si tu app tiene usuarios en otros países y necesitas verificación OTP internacional, esa limitación debes evaluarla antes de integrar.

¿Qué pasa si el código expira mientras el usuario lo busca?

El endpoint /otp/verify devuelve un error de expiración específico. En tu UI puedes mostrar el tiempo restante con un contador visual o simplemente un botón "Solicitar nuevo código" que llame a /otp/send de nuevo. La plataforma invalida automáticamente el código anterior cuando se emite uno nuevo.

¿El reenvío por WhatsApp es un mensaje de marketing o transaccional?

Transaccional. El fallback de OTP por WhatsApp usa la API de WhatsApp Business para mensajes transaccionales, con ventana de entrega diferente a los mensajes de marketing. El contenido del OTP ya está configurado en la plataforma: no necesitas crear una plantilla adicional en tu cuenta de WhatsApp Business.

¿Puedo usar la misma cuenta para múltiples apps o flujos?

Sí. El parámetro template en /otp/send te permite seleccionar qué plantilla de mensaje usar por llamada. Puedes configurar plantillas distintas para signup, recuperación de contraseña y confirmación de pago, y elegir cuál usar según el flujo de tu app.

Si tu empresa ya usa SMS masivos para marketing y quieres añadir verificación OTP al mismo stack, ve la página completa de verificación OTP con detalles técnicos y casos de uso. Para contexto general sobre autenticación de dos factores por SMS, el post qué son las contraseñas OTP cubre la teoría detrás del mecanismo.

Obtén tu API Key y conecta el endpoint OTP hoy

Herramientas recomendadas

Estas son algunas de las herramientas que te pueden ayudar

Envíos Masivos

Envía un mensaje a todos tus clientes al mismo tiempo, tú decides el mensaje que le quieres dar, la fecha y la hora de envío.

Los mensajes pueden ir personalizados con el nombre y datos de tu cliente para que parezca que te tomó tiempo redactarlos cuando en realidad solo requieres un par de minutos.

Conoce los envíos masivos SMS
Arrow - Elements Webflow Library - BRIX Templates
Envíos Masivos
Envíos Masivos
Envíos Masivos

API REST

Conecta tus propios sistemas a través de nuestra API en cuestión de minutos y logra que manden SMS y WhatsApp.

Ideal para activar la funcionalidad de envío de mensajes a CRMs, sistemas ERP, aplicaciones móviles, entre muchos otros.Usa nuestras librerías con varios lenguajes de programación para un inicio sin complicaciones.

Conoce nuestra API
Arrow - Elements Webflow Library - BRIX Templates
API REST
API REST
API REST

Envíos por WhatsApp

Envía mensajes transaccionales desde tus sistemas a través de WhatsApp e inicia una conversación con tus clientes que puedes continuar en tu propio teléfono si te responden.

Ideal para mensajes de confirmación de registro y compra, recordatorios de pago, notificaciones, entre muchos otros.

Conoce los envíos por WhatsApp
Arrow - Elements Webflow Library - BRIX Templates
Envíos por WhatsApp
Envíos por WhatsApp
Envíos por WhatsApp