Aller au contenu principal

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.

Illustration : un code de vérification à six chiffres sous un cadenas, avec le titre « Des codes sans frais par code ».

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.

Combien coûte un OTP avec les API habituelles ?
Coût par code1 000 codes par moisCe qu'il faut mettre en place
Twilio Verify, SMS0,05 $ + 0,0083 $ par SMSEnviron 58 $Compte Twilio, service Verify ; protection anti-fraude incluse
Twilio Verify, WhatsApp0,05 $ + frais d'authentification MetaÀ partir d'environ 53 $Expéditeur WhatsApp approuvé par Meta
API SMS Twilio, votre propre code0,0083 $ + frais opérateur (0,0035 $ à 0,005 $)Environ 12 $ à 13 $Enregistrement A2P 10DLC de la marque et de la campagne
Resend, codes par email0 $ sur le plan gratuit0 $ tant que vous restez sous 100 emails par jourEnregistrements DNS sur votre domaine
Unlimited Messaging Free0 € sur WhatsApp, SMS et email0 €Liez votre numéro, téléphone ou boîte mail ; les codes portent une courte mention
Unlimited Messaging Medium19 € par mois forfaitaire, sans frais par code19 €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.

  1. 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.

  2. 02

    Envoyer en un appel

    POST /message avec to: { phone } ou { email } et le canal choisi par l'utilisateur : WHATSAPP, SMS ou EMAIL.

  3. 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é.

  4. 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.

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} est votre code de vérification Acme. Il expire dans 5 minutes.`,
    }),
  });

  return Response.json({ sent: true });
}
Génère le code, stocke son empreinte 5 minutes et l'envoie par WhatsApp. Utilisez le canal 'SMS', ou to: { email } avec 'EMAIL', pour les autres canaux.
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 });
}
Vérifie l'expiration et les tentatives, compare les empreintes en temps constant et supprime le code après succès.
Prompt pour Lovable, Bolt, v0, Cursor ou Claude CodePrompt
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.txt
Collez-le dans votre outil de code IA. Il faut une clé API Unlimited Messaging stockée comme secret côté serveur, et un numéro WhatsApp, un téléphone Android ou une boîte mail liés.

Le 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.

WhatsApp, SMS ou email : quel canal pour le code ?
WhatsAppSMSEmail
L'utilisateur a besoin deUn compte WhatsApp sur ce numéroN'importe quel numéro mobileUne boîte mail qu'il peut ouvrir
Envoyé depuisVotre numéro WhatsApp liéLa SIM de votre téléphone AndroidVotre Gmail ou la boîte de votre domaine
Coût avec Unlimited MessagingAucun frais par messageVotre forfait opérateurAucun frais par message
Limite de rythmeRythme humain, envois espacés30 SMS par 30 minutes (Android)500 par jour sur Gmail, 2 000 sur Workspace
Idéal pourUtilisateurs internationaux, connexion par téléphoneUtilisateurs sans WhatsApp, numéros locauxVé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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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

Ilian, ingénieur logiciel senior

Écrit par

· 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.

Voir le profil LinkedInMis à jour le

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.