Saltar al contenido principal

Guía para builders

OTP gratis para tu SaaS:
códigos de acceso por WhatsApp, SMS o email, sin coste por código

Twilio Verify cobra 0,05 $ por cada código validado, más el SMS. Para un side project o un SaaS que empieza, puedes enviar los mismos códigos desde tu propio número de WhatsApp, tu móvil Android o tu correo con una llamada gratis a la API. Aquí tienes el código, el prompt para tu herramienta de código con IA y el punto en que un servicio de verificación de pago empieza a compensar.

¿Con prisa? Resume este artículo con una IA

La respuesta corta

¿Se pueden enviar códigos OTP gratis?

Sí. Tu backend genera el código, guarda su hash y lo envía con una llamada POST /message a Unlimited Messaging, que lo entrega desde tu propio número de WhatsApp, la SIM de tu móvil Android o tu correo. El plan gratis no cobra por código ni tiene tope de mensajes. El truco: una breve firma en cada mensaje y un ritmo de envío humano que no encaja con picos enormes.

La vía habitual es una API de verificación. Twilio Verify cobra 0,05 $ por verificación correcta más el coste del canal: 0,0083 $ por SMS en EE. UU., unos 58 $ por 1.000 accesos. Montarlo tú sobre una API de SMS pura sale más barato por mensaje (0,0083 $ más un recargo del operador en EE. UU.), pero exige el registro A2P 10DLC antes del primer SMS.

Para un SaaS indie, la lógica del código es lo fácil: unas 30 líneas para enviar y verificar, aquí abajo. Lo que cuesta dinero es la entrega. Enviar desde cuentas que ya tienes elimina esa partida: WhatsApp desde tu número (sin plantilla de autenticación de Meta), SMS con tu tarifa, email desde Gmail o el correo de tu dominio.

Esta página es la guía práctica. Si buscas los argumentos de WhatsApp frente al SMS (entrega, SIM swap, SMS pumping), lee el artículo sobre OTP por WhatsApp enlazado abajo. Precios consultados en las páginas de cada proveedor el 9 de noviembre de 2026.

Relacionado: por qué el OTP por WhatsApp supera a los códigos SMS, una API de SMS gratis desde tu móvil y enviar desde Gmail con una contraseña de aplicación.

Ilustración: un código de verificación de seis dígitos bajo un candado, con el titular «Códigos sin pagar por código».

La factura

¿Cuánto cuesta un OTP con las API habituales?

Por código y para 1.000 accesos correctos al mes, números de EE. UU. Verify solo cobra las verificaciones correctas; el SMS puro cobra cada envío.

¿Cuánto cuesta un OTP con las API habituales?
Coste por código1.000 códigos al mesQué tienes que configurar
Twilio Verify, SMS0,05 $ + 0,0083 $ por SMSUnos 58 $Cuenta de Twilio, servicio Verify; protección antifraude incluida
Twilio Verify, WhatsApp0,05 $ + la tarifa de autenticación de MetaDesde unos 53 $Remitente de WhatsApp aprobado por Meta
API de SMS de Twilio, tu propio código0,0083 $ + recargo del operador (0,0035 $ a 0,005 $)Unos 12 $ a 13 $Registro A2P 10DLC de marca y campaña
Resend, códigos por email0 $ en el plan gratis0 $ mientras no pases de 100 emails al díaRegistros DNS en tu dominio
Unlimited Messaging Free0 € en WhatsApp, SMS y email0 €Vincula tu número, móvil o correo; los códigos llevan una breve firma
Unlimited Messaging Medium19 € al mes fijos, sin coste por código19 €Misma configuración, sin firma

Precios de Twilio Verify, SMS y WhatsApp en las páginas de precios de Twilio y de Resend en resend.com/pricing, consultados el 9 de noviembre de 2026. La tarifa de autenticación de Meta depende del país del destinatario (Twilio indica utility y authentication desde 0,0034 $). Los SMS enviados con Unlimited Messaging se descuentan de tu propia tarifa móvil.

La receta

¿Cómo se construye la verificación OTP en cuatro pasos?

La misma lógica sirve para SMS, WhatsApp y email; solo cambia el canal de la petición.

  1. 01

    Generar y guardar

    Crea un código de 6 dígitos con un generador aleatorio criptográfico y guarda solo su hash, con una caducidad de unos 5 minutos y un contador de intentos.

  2. 02

    Enviar en una llamada

    POST /message con to: { phone } o { email } y el canal que eligió el usuario: WHATSAPP, SMS o EMAIL.

  3. 03

    Verificar

    Calcula el hash de lo que escribió el usuario, compara en tiempo constante, rechaza los códigos caducados y bloquea tras 5 fallos. Borra el código cuando se use.

  4. 04

    Limitar la frecuencia

    Un código nuevo por minuto y usuario, y unos pocos por hora e IP. Frena el SMS pumping y evita que tu número parezca de spam.

dígitos, suficientes con bloqueo a los 5 intentos
6dígitos, suficientes con bloqueo a los 5 intentos
vida típica de un código
5 minvida típica de un código
llamada a la API para enviar por cualquier canal
1llamada a la API para enviar por cualquier canal

El código

¿Cómo es el código de envío y verificación?

Dos route handlers en TypeScript (estilo Next.js App Router; la misma lógica vale para Express, Hono o una edge function de Supabase). Sustituye db por tu propio almacenamiento.

POST /api/otp/sendTypeScript
// app/api/otp/send/route.ts
import { createHash, randomInt } from 'node:crypto';
import { db } from '@/lib/db'; // your own storage

export async function POST(req: Request) {
  const { phone } = await req.json();
  const code = String(randomInt(0, 1_000_000)).padStart(6, '0');

  await db.otp.save(phone, {
    hash: createHash('sha256').update(code).digest('hex'),
    expiresAt: Date.now() + 5 * 60_000,
    attempts: 0,
  });

  await fetch('https://api.unlimitedmessaging.app/message', {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${process.env.UM_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      to: { phone },
      channels: [{ channel: 'WHATSAPP' }],
      text: `${code} es tu código de verificación de Acme. Caduca en 5 minutos.`,
    }),
  });

  return Response.json({ sent: true });
}
Genera el código, guarda su hash 5 minutos y lo envía por WhatsApp. Usa el canal 'SMS', o to: { email } con 'EMAIL', para los otros canales.
POST /api/otp/verifyTypeScript
// app/api/otp/verify/route.ts
import { createHash, timingSafeEqual } from 'node:crypto';
import { db } from '@/lib/db';

export async function POST(req: Request) {
  const { phone, code } = await req.json();
  const row = await db.otp.get(phone);

  if (!row || row.expiresAt < Date.now() || row.attempts >= 5) {
    return Response.json({ ok: false }, { status: 400 });
  }

  const hash = createHash('sha256').update(String(code)).digest('hex');
  if (!timingSafeEqual(Buffer.from(hash), Buffer.from(row.hash))) {
    await db.otp.incrementAttempts(phone);
    return Response.json({ ok: false }, { status: 401 });
  }

  await db.otp.delete(phone);
  return Response.json({ ok: true });
}
Comprueba caducidad e intentos, compara los hashes en tiempo constante y borra el código tras el éxito.
Prompt para Lovable, Bolt, v0, Cursor o Claude CodePrompt
Añade a esta app códigos de verificación (OTP) por teléfono y email con Unlimited Messaging. Lee UM_API_KEY solo del entorno del servidor. Crea dos rutas de servidor. 1) POST /api/otp/send: recibe { phone } o { email } y channel ('WHATSAPP', 'SMS' o 'EMAIL'); genera un código de 6 dígitos con crypto.randomInt, guarda su hash SHA-256 con caducidad de 5 minutos y un contador de intentos, permite un código nuevo por minuto y usuario; envíalo con POST https://api.unlimitedmessaging.app/message, cabecera Authorization: Bearer UM_API_KEY, cuerpo { to: { phone } o { email }, channels: [{ channel }], subject (solo email), text: '<código> es tu código de verificación. Caduca en 5 minutos.' }. 2) POST /api/otp/verify: compara los hashes con crypto.timingSafeEqual, rechaza códigos caducados, bloquea tras 5 fallos y borra el código si es correcto. Añade una interfaz sencilla: elegir WhatsApp, SMS o email, escribir el destino y luego un campo de 6 dígitos. Referencia: https://unlimitedmessaging.app/llms-full.txt
Pégalo en tu herramienta de código con IA. Necesita una clave API de Unlimited Messaging guardada como secreto del servidor y un número de WhatsApp, un móvil Android o un correo vinculados.

El canal

WhatsApp, SMS o email: ¿qué canal debe llevar el código?

Deja que el usuario elija cuando puedas. Cada canal tiene un alcance y un límite distintos.

WhatsApp, SMS o email: ¿qué canal debe llevar el código?
WhatsAppSMSEmail
El usuario necesitaUna cuenta de WhatsApp en ese númeroCualquier número móvilUn correo que pueda abrir
Se envía desdeTu número de WhatsApp vinculadoLa SIM de tu móvil AndroidTu Gmail o el correo de tu dominio
Coste con Unlimited MessagingSin coste por mensajeTu tarifa móvilSin coste por mensaje
Límite de ritmoRitmo humano, envíos espaciados30 SMS cada 30 minutos (Android)500 al día en Gmail, 2.000 en Workspace
Ideal paraUsuarios internacionales, acceso por teléfonoUsuarios sin WhatsApp, números localesVerificar registros, acceso con código mágico

Juego limpio

¿Cuándo no basta una solución OTP gratis?

La entrega gratis desde tus propias cuentas encaja con un side project o un SaaS que empieza. Estos son los casos en que una API de verificación de pago se gana lo que cuesta.

  1. Picos del día de lanzamiento

    Android pide confirmación a partir de 30 SMS en 30 minutos, y los WhatsApp salen a ritmo humano. Cientos de códigos por minuto son cosa de Twilio Verify o un servicio parecido.

  2. Una firma en el plan gratis

    En el plan gratis, cada código termina con "Sent with UnlimitedMessaging.app". El plan Medium a 19 € al mes la quita.

  3. WhatsApp no es oficial

    Tu número se vincula como un dispositivo, así que no hay plantilla de autenticación de Meta ni botón de copiar código. El abuso puede hacer que bloqueen el número: limita cada envío.

  4. Sin escudo antifraude incluido

    Los servicios Verify detectan por ti el SMS pumping y los registros de bots. Con tus propias cuentas, los límites de frecuencia y un CAPTCHA en la ruta de envío son cosa tuya.

  5. 2FA de alta seguridad

    El NIST SP 800-63B clasifica el OTP por la red telefónica como autenticador restringido. Para cuentas de administración, ofrece una app de autenticación (TOTP) o passkeys, que no necesitan ningún mensaje.

FAQ

Preguntas sobre API OTP gratis

Ilian, ingeniero de software senior

Escrito por

· Ingeniero de software senior

Ingeniero de software senior, funda y dirige varias empresas tecnológicas. Diseña productos en torno a las API de mensajería, la automatización y la integración de la IA, y comparte aquí lo que aprende construyendo.

Ver el perfil de LinkedInActualizado el

Códigos de acceso hoy mismo, sin pagar por código.

Vincula tu número de WhatsApp, tu móvil Android o tu correo, crea una clave API y envía tu primer código de verificación gratis.