OTP SMS API · Empresa Mexicana

OTP por SMS que sí llega, en México.

El código entra en menos de 5 segundos, vía rutas directas a los 4 carriers mexicanos. Si no llega, rescatas la conversión por WhatsApp o Voz.

8 créditos sin costo, sin tarjeta ni contrato.

Telcel Movistar AT&T Altán <5 seg
9:41 🇲🇽 Telcel 5G 97%
SM

SMS Masivos

+52 55 9162-4427

428291

Tu código de acceso es 428291. No lo compartas. Mi App.

3 seg
✓ Entregado · Ruta directa Telcel

3 endpoints. 15 minutos. Listo.

Sin webhooks ni configuraciones extra: la lógica de generación y validación ya viene integrada.

Respuesta real de la API

# Paso 1: Solicitar código

POST /otp/send

phone, country_code, company_name, template

Entregado

# Paso 2: Usuario ingresa el código en tu app

Tu frontend captura el input...

Código capturado

# Paso 3: Validar código

POST /otp/verify

Acceso autorizado

# Si tu usuario da clic en "No recibí"

POST /otp/resend { phone, whatsapp: true }

Reintentado

# 2do clic, fallback final

POST /otp/resend { phone, voice: true }

Voz

// Paso 1: Solicitar código

const res = await fetch('/otp/send', {

method: 'POST',

body: JSON.stringify({

phone: '+52 55 1234 5678',

country_code: 'MX',

company_name: 'Mi App',

template: 'default',

})

});

// Paso 3: Validar código ingresado

await fetch('/otp/verify', {

method: 'POST',

body: JSON.stringify({ phone: '...', code: '428291' })

});

// Si usuario da clic en "No recibí": fallback WhatsApp

await fetch('/otp/resend', {

method: 'POST',

body: JSON.stringify({ phone: '...', whatsapp: true })

});

// 2do clic: fallback final con voz

fetch('/otp/resend', { method: 'POST', body: JSON.stringify({ phone: '...', voice: true }) });

import requests

# Paso 1: Solicitar código

requests.post('/otp/send', json={

'phone': '+52 55 1234 5678',

'country_code': 'MX',

'company_name': 'Mi App',

'template': 'default',

})

# Paso 3: Validar código ingresado

requests.post('/otp/verify',

json={'phone': '...', 'code': '428291'})

# Si usuario da clic en "No recibí": fallback WhatsApp

requests.post('/otp/resend',

json={'phone': '...', 'whatsapp': True})

# 2do clic: fallback final con voz

requests.post('/otp/resend', json={'phone': '...', 'voice': True})

// Paso 1: Solicitar código

$ch = curl_init('/otp/send');

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([

'phone' => '+52 55 1234 5678',

'country_code' => 'MX',

'company_name' => 'Mi App',

'template' => 'default',

]));

curl_exec($ch);

// Paso 3: Validar código

$r = curl_init('/otp/verify');

curl_setopt($r, CURLOPT_POSTFIELDS,

json_encode(['phone' => '...', 'code' => '428291']));

curl_exec($r);

// Si usuario da clic en "No recibí": fallback WhatsApp

$re = curl_init('/otp/resend');

curl_setopt($re, CURLOPT_POSTFIELDS,

json_encode(['phone' => '...', 'whatsapp' => true]));

curl_exec($re);

// 2do clic: fallback final con voz: ['phone' => '...', 'voice' => true]

// Paso 1: Envía el código

resp, _ := http.Post("/otp/send", "application/json",

strings.NewReader(`{"phone":"+52 55 1234 5678","country_code":"MX","company_name":"Mi App","template":"default"}`))

Entregado

// Paso 2: Usuario ingresa el código en tu app

Código capturado

// Paso 3: Validar código

http.Post("/otp/verify", "application/json",

strings.NewReader(`{"phone":"...","code":"428291"}`))

Acceso autorizado

// Si tu usuario da clic en "No recibí"

http.Post("/otp/resend", "application/json",

strings.NewReader(`{"phone":"...","whatsapp":true}`))

Reintentado

// 2do clic, fallback final

http.Post("/otp/resend", "application/json", strings.NewReader(`{"phone":"...","voice":true}`))

Voz

// Paso 1: Solicitar código

HttpClient client = HttpClient.newHttpClient();

HttpRequest req = HttpRequest.newBuilder(URI.create("/otp/send"))

.POST(BodyPublishers.ofString("{\"phone\":\"+52 55 1234 5678\",\"country_code\":\"MX\",\"company_name\":\"Mi App\",\"template\":\"default\"}")).build();

client.send(req, BodyHandlers.ofString());

Entregado

// Paso 2: Usuario ingresa el código en tu app

Código capturado

// Paso 3: Validar código

client.send(HttpRequest.newBuilder(URI.create("/otp/verify"))

.POST(BodyPublishers.ofString("{\"phone\":\"...\",\"code\":\"428291\"}")).build(), BodyHandlers.ofString());

Acceso autorizado

// Si tu usuario da clic en "No recibí"

client.send(HttpRequest.newBuilder(URI.create("/otp/resend"))

.POST(BodyPublishers.ofString("{\"phone\":\"...\",\"whatsapp\":true}")).build(), BodyHandlers.ofString());

Reintentado

// 2do clic, fallback final

client.send(HttpRequest.newBuilder(URI.create("/otp/resend"))

.POST(BodyPublishers.ofString("{\"phone\":\"...\",\"voice\":true}")).build(), BodyHandlers.ofString());

Voz

// Paso 1: Solicitar código

var res = await client.PostAsJsonAsync("/otp/send", new {

phone = "+52 55 1234 5678", country_code = "MX",

company_name = "Mi App", template = "default"

});

Entregado

// Paso 2: Usuario ingresa el código en tu app

Código capturado

// Paso 3: Validar código

await client.PostAsJsonAsync("/otp/verify", new { phone = "...", code = "428291" });

Acceso autorizado

// Si tu usuario da clic en "No recibí"

await client.PostAsJsonAsync("/otp/resend", new { phone = "...", whatsapp = true });

Reintentado

// Último intento: llamada de voz

await client.PostAsJsonAsync("/otp/resend", new { phone = "...", voice = true });

Voz

# Paso 1: Solicitar código

uri = URI('/otp/send')

Net::HTTP.post(uri, {

phone: '+52 55 1234 5678', country_code: 'MX',

company_name: 'Mi App', template: 'default'

}.to_json, 'Content-Type' => 'application/json')

Entregado

# Paso 2: Usuario ingresa el código en tu app

Código capturado

# Paso 3: Validar código

Net::HTTP.post(URI('/otp/verify'), { phone: '...', code: '428291' }.to_json)

Acceso autorizado

# Si tu usuario da clic en "No recibí"

Net::HTTP.post(URI('/otp/resend'), { phone: '...', whatsapp: true }.to_json)

Reintentado

# 2do clic, fallback final

Net::HTTP.post(URI('/otp/resend'), { phone: '...', voice: true }.to_json)

Voz

Las APIs globales tratan México como Tier-2.

Un agregador internacional introduce latencia, drop rate y falta de visibilidad. Tu tasa de registro lo paga.

Drop rate invisible

Las rutas de agregador reportan "enviado" aunque nunca llegó al carrier: dashboard verde, pantalla en blanco para tu usuario.

Latencia variable

El código llega en 8-20 segundos variables: el usuario asume que está roto y abandona.

Sin factura fiscal MX

Las APIs internacionales no emiten CFDI 4.0. Para cualquier empresa mexicana, eso es gasto de infraestructura que no puedes deducir.

SMS Masivos tiene rutas directas a los 4 carriers.

Sin intermediarios: ruta directa, entrega garantizada en menos de 5 segundos.

Si el SMS no llega, dale al botón. Listo.

Un clic activa el reintento por WhatsApp o Voz desde el mismo endpoint. Sin lógica de timers ni colas que mantener.

1. SMS

Envío inmediato por ruta directa al carrier

Inicial

2. WhatsApp

Clic en "No recibí" reenvía por WhatsApp

1er clic

3. Voz

Si tampoco llega, voz robótica dicta el código

2do clic

Usuario verificado

Registro completado. Tasa de conversión protegida.

Mismo endpoint /otp/resend, cambias un boolean.

Con la confianza de empresas en México

15+

años en el mercado

4

carriers directos en MX

CFDI

4.0 en cada compra

MX

soporte en español

Clientes referencia: Nissan, Soriana, Holcim, HP

Prueba la entrega real antes de pagar.

8 créditos sin costo para probar la entrega real antes de decidir.

Trial sin costo

8

créditos sin costo

Sin tarjeta de crédito
Rescue automático incluido
Acceso completo a la API y docs
Facturación fiscal desde la primera compra
Activar API Key Gratis
Precios transparentes

Calcula tu costo al instante

Sin renta mensual. Compras créditos que no expiran: entre más volumen, menor el precio unitario. Créditos prepago, sin fecha de vencimiento.

Calculadora

¿Cuántos SMS vas a enviar?

SMS

Mínimo 500 SMS. Más de 400,000 cotiza volumen.

Tu costo total
$450.00
MXN + IVA
Precio / SMS
$0.90
Escalón
500+
Recargar 500 SMS ahora

Envía vía API REST, CSV o integración con Shopify, WooCommerce y Zapier

Alto volumen: desde $0.23 / SMS con recargas 200,000+
Baja hasta $0.13 / SMS en volúmenes muy altos

¿Por qué SMS Masivos?

Compara lo que importa para una empresa mexicana que verifica usuarios en producción.

Carriers en México

SMS Masivos

Directo a Telcel, Movistar, AT&T, Altán

Otro proveedor

Ruta de agregador

Velocidad de entrega

SMS Masivos

Menos de 5 segundos

Otro proveedor

10-30+ segundos

Rescue automático vía API

SMS Masivos

SMS a WhatsApp a Voz

Otro proveedor

Solo SMS

CFDI 4.0

SMS Masivos

Incluido

Otro proveedor

No disponible

Visibilidad real, no solo "enviado / no enviado"

Tasa de verificación por carrier, tiempo de entrega y patrones de abuso.

Datos ilustrativos
Analytics · Últimas 24 h
en vivo

OTPs enviados

12,483

↑ 3.2% vs ayer

Tasa de entrega

99.1%

rutas directas

Tiempo promedio

3.2 seg

mediana nacional

Rescues activos

247

reintento WA / Voz

Datos ilustrativos. Tu dashboard muestra métricas reales de tu cuenta en tiempo real.

Preguntas frecuentes

¿Cuánto tarda la integración?

Entre 15 y 30 minutos con acceso a los docs: 3 endpoints (send, verify, resend). La lógica de generación y validación ya está integrada.

¿Necesito tarjeta de crédito para el trial?

No. Tu cuenta incluye 8 créditos sin costo para probar la entrega real en México.

¿Emiten CFDI 4.0?

Sí, automático en cada recarga. Aceptamos tarjeta, SPEI, PayPal y OXXO. Sin conversión de divisas.

¿Funciona con todos los carriers mexicanos?

Sí, con ruta directa: Telcel, Movistar, AT&T, Altán y MVNOs. Sin agregador global, sin Tier-2.

¿Qué pasa si el SMS no llega?

Se activa el rescue automático: conexión alterna al carrier, luego WhatsApp y, si hace falta, voz. Mismo endpoint, sin desarrollo adicional.

Activa tu API key sin costo

8 créditos sin costo. Rutas directas y rescue SMS, WhatsApp o Voz.

Obtener API Key Gratis Ver los endpoints
Sin tarjeta de crédito
CFDI 4.0 automático
Soporte en español, horario México
Obtener API Key Gratis