Guide builder
OTP gratuit pour votre SaaS :
codes de connexion par WhatsApp, SMS ou email, sans frais par code
Twilio Verify facture 0,05 $ chaque code validé, plus le SMS. Pour un side project ou un SaaS qui démarre, vous pouvez envoyer les mêmes codes depuis votre propre numéro WhatsApp, votre téléphone Android ou votre boîte mail, en un appel d'API gratuit. Voici le code, le prompt pour votre outil de code IA, et le moment où un service de vérification payant devient rentable.
Pressé ? Résumez cet article avec une IA
La réponse courte
Peut-on envoyer des codes OTP gratuitement ?
Oui. Votre backend génère le code, stocke son empreinte et l'envoie en un appel POST /message à Unlimited Messaging, qui le livre depuis votre propre numéro WhatsApp, la SIM de votre téléphone Android ou votre boîte mail. Le plan gratuit n'a ni frais par code ni plafond de messages. Le piège : une courte mention sur chaque message, et un rythme d'envoi humain qui ne convient pas aux énormes pics.
La voie habituelle, c'est une API de vérification. Twilio Verify facture 0,05 $ par vérification réussie plus le coût du canal : 0,0083 $ par SMS aux États-Unis, soit environ 58 $ pour 1 000 connexions. Le faire soi-même sur une API SMS brute coûte moins cher par message (0,0083 $ plus des frais opérateur aux États-Unis) mais impose l'enregistrement A2P 10DLC avant le premier SMS.
Pour un SaaS indépendant, la logique du code est la partie facile : une trentaine de lignes pour l'envoi et la vérification, ci-dessous. Ce qui coûte, c'est la livraison. Envoyer depuis des comptes que vous avez déjà supprime cette ligne : WhatsApp depuis votre numéro (sans modèle d'authentification Meta), SMS sur votre forfait, email depuis Gmail ou la boîte de votre domaine.
Cette page est le guide pratique. Si vous voulez les arguments pour WhatsApp face au SMS (taux de livraison, SIM swap, SMS pumping), lisez l'article sur l'OTP WhatsApp en lien ci-dessous. Prix relevés sur les pages des fournisseurs le 9 novembre 2026.
À lire aussi : pourquoi l'OTP WhatsApp bat les codes SMS, une API SMS gratuite depuis votre téléphone et envoyer depuis Gmail avec un mot de passe d'application.

La facture
Combien coûte un OTP avec les API habituelles ?
Par code et pour 1 000 connexions réussies par mois, numéros américains. Verify ne facture que les vérifications réussies ; le SMS brut facture chaque envoi.
| Coût par code | 1 000 codes par mois | Ce qu'il faut mettre en place | |
|---|---|---|---|
| Twilio Verify, SMS | 0,05 $ + 0,0083 $ par SMS | Environ 58 $ | Compte Twilio, service Verify ; protection anti-fraude incluse |
| Twilio Verify, WhatsApp | 0,05 $ + frais d'authentification Meta | À partir d'environ 53 $ | Expéditeur WhatsApp approuvé par Meta |
| API SMS Twilio, votre propre code | 0,0083 $ + frais opérateur (0,0035 $ à 0,005 $) | Environ 12 $ à 13 $ | Enregistrement A2P 10DLC de la marque et de la campagne |
| Resend, codes par email | 0 $ sur le plan gratuit | 0 $ tant que vous restez sous 100 emails par jour | Enregistrements DNS sur votre domaine |
| Unlimited Messaging Free | 0 € sur WhatsApp, SMS et email | 0 € | Liez votre numéro, téléphone ou boîte mail ; les codes portent une courte mention |
| Unlimited Messaging Medium | 19 € par mois forfaitaire, sans frais par code | 19 € | Même configuration, mention retirée |
Prix Twilio Verify, SMS et WhatsApp relevés sur les pages tarifs de Twilio, Resend sur resend.com/pricing, le 9 novembre 2026. Les frais d'authentification Meta dépendent du pays du destinataire (Twilio indique utility et authentication à partir de 0,0034 $). Les SMS envoyés via Unlimited Messaging sont décomptés de votre propre forfait.
La recette
Comment construire une vérification OTP en quatre étapes ?
La même logique marche pour SMS, WhatsApp et email ; seul le canal de la requête change.
- 01
Générer et stocker
Créez un code à 6 chiffres avec un générateur aléatoire cryptographique, ne stockez que son empreinte, avec une expiration d'environ 5 minutes et un compteur de tentatives.
- 02
Envoyer en un appel
POST /message avec to: { phone } ou { email } et le canal choisi par l'utilisateur : WHATSAPP, SMS ou EMAIL.
- 03
Vérifier
Hachez ce que l'utilisateur a saisi, comparez en temps constant, refusez les codes expirés et bloquez après 5 erreurs. Supprimez le code une fois utilisé.
- 04
Limiter le débit
Un nouveau code par minute et par utilisateur, quelques-uns par heure et par IP. Cela bloque le SMS pumping et évite que votre numéro ressemble à un spammeur.
- chiffres, suffisant avec un blocage à 5 essais
- 6chiffres, suffisant avec un blocage à 5 essais
- durée de vie typique d'un code
- 5 mindurée de vie typique d'un code
- appel d'API pour envoyer sur n'importe quel canal
- 1appel d'API pour envoyer sur n'importe quel canal
Le code
À quoi ressemble le code d'envoi et de vérification ?
Deux route handlers en TypeScript (style Next.js App Router ; la même logique s'adapte à Express, Hono ou une edge function Supabase). Remplacez db par votre propre stockage.
// 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} est votre code de vérification Acme. Il expire dans 5 minutes.`,
}),
});
return Response.json({ sent: true });
}// 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 });
}Ajoute à cette application des codes de vérification (OTP) par téléphone et email avec Unlimited Messaging. Lis UM_API_KEY uniquement dans l'environnement serveur. Crée deux routes serveur. 1) POST /api/otp/send : reçoit { phone } ou { email } et channel ('WHATSAPP', 'SMS' ou 'EMAIL') ; génère un code à 6 chiffres avec crypto.randomInt, stocke son empreinte SHA-256 avec une expiration de 5 minutes et un compteur de tentatives, autorise un nouveau code par minute et par utilisateur ; envoie-le avec POST https://api.unlimitedmessaging.app/message, en-tête Authorization: Bearer UM_API_KEY, corps { to: { phone } ou { email }, channels: [{ channel }], subject (email seulement), text: '<code> est votre code de vérification. Il expire dans 5 minutes.' }. 2) POST /api/otp/verify : compare les empreintes avec crypto.timingSafeEqual, refuse les codes expirés, bloque après 5 erreurs, supprime le code en cas de succès. Ajoute une interface simple : choix WhatsApp, SMS ou email, saisie de la destination, puis un champ à 6 chiffres. Référence : https://unlimitedmessaging.app/llms-full.txtLe canal
WhatsApp, SMS ou email : quel canal pour le code ?
Laissez l'utilisateur choisir quand c'est possible. Chaque canal a une portée et une limite différentes.
| SMS | |||
|---|---|---|---|
| L'utilisateur a besoin de | Un compte WhatsApp sur ce numéro | N'importe quel numéro mobile | Une boîte mail qu'il peut ouvrir |
| Envoyé depuis | Votre numéro WhatsApp lié | La SIM de votre téléphone Android | Votre Gmail ou la boîte de votre domaine |
| Coût avec Unlimited Messaging | Aucun frais par message | Votre forfait opérateur | Aucun frais par message |
| Limite de rythme | Rythme humain, envois espacés | 30 SMS par 30 minutes (Android) | 500 par jour sur Gmail, 2 000 sur Workspace |
| Idéal pour | Utilisateurs internationaux, connexion par téléphone | Utilisateurs sans WhatsApp, numéros locaux | Vérification d'inscription, connexion par code magique |
Fair-play
Quand une solution OTP gratuite ne suffit-elle plus ?
La livraison gratuite depuis vos propres comptes convient à un side project ou à un SaaS qui démarre. Voici les cas où une API de vérification payante mérite son prix.
Les pics du jour de lancement
Android demande une confirmation au-delà de 30 SMS en 30 minutes, et les messages WhatsApp partent à un rythme humain. Des centaines de codes par minute relèvent de Twilio Verify ou d'un service équivalent.
Une mention sur le plan gratuit
Sur le plan gratuit, chaque code se termine par "Sent with UnlimitedMessaging.app". Le plan Medium à 19 € par mois la retire.
WhatsApp n'est pas officiel
Votre numéro est lié comme un appareil : pas de modèle d'authentification Meta, pas de bouton copier le code. Un usage abusif peut faire bannir le numéro : limitez chaque envoi.
Pas de bouclier anti-fraude intégré
Les services Verify détectent pour vous le SMS pumping et les inscriptions de bots. Avec vos propres comptes, les limites de débit et un CAPTCHA sur la route d'envoi sont à votre charge.
2FA à haute sécurité
Le NIST SP 800-63B classe l'OTP via le réseau téléphonique comme authentificateur restreint. Pour les comptes admin, proposez une app d'authentification (TOTP) ou des passkeys, qui ne demandent aucun message.
FAQ
Questions sur les API OTP gratuites
Sources
Sources & références
Pour vérifier par vous-même les informations de cet article :
- Tarifs Verify (0,05 $ par vérification réussie plus coût du canal)Twilio
- Tarifs SMS aux États-Unis (0,0083 $ par segment, frais opérateur)Twilio
- Tarifs WhatsApp (0,005 $ par message plus frais de modèle Meta)Twilio
- Enregistrement de marque A2P 10DLCTwilio Docs
- Tarifs de la WhatsApp Business Platform (catégorie authentication, palier gratuit réservé aux messages de service)Meta for Developers
- Tarifs Resend (gratuit : 3 000 emails par mois, 100 par jour)Resend
- SmsUsageMonitor (seuil de 30 SMS en 30 minutes)Android Open Source Project
- NIST SP 800-63B, authentificateurs hors bande via le réseau téléphonique (restreints)NIST

Écrit par
Ilian · Senior Software Engineer
Ingénieur logiciel senior, il fonde et dirige plusieurs sociétés tech. Il conçoit des produits autour des API de messagerie, de l’automatisation et de l’intégration de l’IA, et partage ici ce qu’il apprend en construisant.
Des codes de connexion dès aujourd'hui, sans frais par code.
Liez votre numéro WhatsApp, votre téléphone Android ou votre boîte mail, créez une clé API et envoyez votre premier code de vérification gratuitement.
