Vérifie n'importe quel téléphone. Sur n'importe quel canal qu'ils utilisent.
Envoie un code à usage unique par SMS, WhatsApp, Telegram, RCS ou appel vocal, quel que soit le canal que l'utilisateur utilise. Basculement automatique entre les canaux, avec score de risque opérateur à chaque appel. À partir de 0,03 $ plus opérateur.
Approuvé par plus de 2000 organisations dans le monde entier.
Cinq canaux
SMS. WhatsApp. Telegram. RCS. Voix.
Un module, cinq modes de livraison. Nous réessayons sur plusieurs canaux jusqu'à ce que le code
arrive, évaluons le risque de SIM-swap et d'opérateur à chaque appel, et facturons à partir de 0,03 $ plus
opérateur, le même workflow dans tous les cas.
Comment ça marche
De l'inscription à l'utilisateur vérifié en quatre étapes.
Étape 01
Crée le workflow
Choisis les vérifications dont tu as besoin : pièce d'identité, preuve de vie, correspondance faciale, sanctions, adresse, âge, téléphone, e-mail, questions personnalisées. Glisse-les dans un parcours depuis le tableau de bord, ou envoie le même parcours via notre API. Crée des branches conditionnelles, lance des tests A/B, sans écrire une ligne de code.
Étape 02
Intègre
Intègre nativement avec nos SDK Web, iOS, Android, React Native ou Flutter. Redirige vers une page hébergée. Ou envoie simplement un lien à ton utilisateur, par e-mail, SMS, WhatsApp, où tu veux. Choisis ce qui convient le mieux à ta stack.
Étape 03
L'utilisateur suit le parcours
Didit gère la caméra, les indications lumineuses, le transfert mobile et l'accessibilité. Pendant que l'utilisateur suit le parcours, nous évaluons plus de 200 signaux de fraude en temps réel et vérifions chaque champ par rapport à des sources de données fiables. Résultat en moins de deux secondes.
Étape 04
Tu reçois les résultats
Des webhooks signés en temps réel maintiennent ta base de données synchronisée dès qu'un utilisateur est approuvé, refusé ou envoyé en révision. Interroge l'API à la demande. Ou ouvre la console pour inspecter chaque session, chaque signal, et gérer les cas à ta manière.
Conçu pour les développeurs · Conçu contre la fraude · Ouvert par nature
Six fonctionnalités. Un seul feature flag. PHONE.
Chaque fonctionnalité est un interrupteur dans le même module. Pas de niveaux de vente additionnelle, pas de plans séparés, pas d'appels supplémentaires. Active-les par workflow dans la console ou passe-les directement dans l'appel API.
SMS, WhatsApp, Telegram, RCS et voix, tout sur le même module et workflow. Épingle un canal si la politique l'exige (SMS obligatoire par régulateur, marchés privilégiant WhatsApp comme le Brésil et l'Inde), ou laisse-nous choisir le canal le moins cher.
Un feature flag · Cinq canauxfeature: PHONE
SMSPar défaut
WhatsAppBR / IN / MX
TelegramUE
RCSAndroid
VoixFallback
02 · Routage
Repli automatique sur un autre canal en cas d'échec.
Les blocages SMS des opérateurs, les pays à tarifs premium et les échecs silencieux sont automatiquement contournés. Nous réessayons sur le prochain canal disponible sans que ton code n'ait à intervenir, et nous t'indiquons quel canal a réellement livré le message.
Routage automatique des canauxPOST /v3/phone/send/
1SMSOpérateur bloqué
2WhatsAppDélivré
verification_methodwhatsapp
03 · Couverture
Portée télécom mondiale. Livraison adaptée à l'opérateur.
Intégrations multi-opérateurs par pays, avec un routage adapté aux habitudes locales, WhatsApp domine au Brésil, en Inde et au Mexique, Telegram et RCS dominent en Europe, le SMS domine aux États-Unis. Le pays, l'opérateur et le type de numéro sont détectés automatiquement.
04 · Signaux de fraude
Plus qu'un code à usage unique. Risque opérateur à chaque appel.
Chaque vérification renvoie le nom et le type de l'opérateur (mobile, fixe, voix sur IP), signale les numéros jetables et virtuels, et avertit explicitement des numéros à haut risque, dupliqués ou mis sur liste noire. Décide, révise ou approuve par catégorie de risque.
05 · Conversion
Le SMS seul fait fuir les utilisateurs. Le multi-canal les retient.
Quand le SMS échoue, filtre opérateur, roaming, zone morte, baisse de délivrabilité, les fournisseurs monocanaux laissent les utilisateurs attendre un code qui n'arrive jamais. Nous les récupérons sur le prochain canal et rapportons quel canal a livré, pour que tu puisses ajuster le routage avec des données réelles.
Achèvement · sur 30 jours glissantsPlus c'est élevé, mieux c'est
SMS uniquement58%
+ WhatsApp79%
+ Fallback vocal93%
Illustratif, indicatif, pas une étude.
06 · Tarification
Paie par message. À partir de 0,03 $ plus frais d'opérateur.
0,03 $ par vérification, plus des frais d'opérateur par pays et par canal, répercutés sans majoration. Tu ne paies que lorsqu'un message est envoyé, les abandons avant la livraison ne coûtent rien.
Tarifs par messageÀ partir de 0,03 $
États-UnisSMS$0.03
BrésilWhatsApp$0.04
IndeWhatsApp$0.05
Payez uniquement lorsqu'un message est envoyé.
Intègre
Deux endpoints. Même JSON. Même prix.
Choisis le flux hébergé si tu veux que nous gérions la saisie du numéro, l'UX du code et le renvoi. Choisis l'API autonome si tu gères l'UX. Les deux renvoient le même rapport.
Déployez la vérification téléphonique en une seule invite.
Collez le bloc ci-dessous dans Claude Code, Cursor, Codex, Devin, Aider ou Replit Agent. Renseignez votre stack. L'agent provisionne Didit, crée le workflow de vérification téléphonique, connecte le webhook et déploie.
didit-integration-prompt.md
# Didit Phone Verification — integrate in 5 minutes
You are integrating Didit's Phone Verification module into <my_stack>.
Follow these steps exactly. Every URL, header, and enum value below is
canonical — do not paraphrase or "improve" them.
## 1. Provision an account
- Sign up: https://business.didit.me (no credit card required).
- Or provision programmatically: POST https://apx.didit.me/auth/v2/programmatic/register/
(returns an API key bound to the workspace + application).
## 2. Two integration paths — pick one
### Path A — Workflow Builder (hosted UI)
Best when you want Didit to handle phone collection, country prefix UX,
channel routing, OTP entry, resend buttons, mobile/desktop handoff, and
accessibility for you.
1. Create a workflow that contains the PHONE feature:
POST https://verification.didit.me/v3/workflows/
Authorization header: x-api-key: <your-api-key>
Body: workflow_label, features array with the single entry
{ feature: "PHONE" } (UPPERCASE — strict enum)
Optional config: preferred_channel ("SMS" | "WHATSAPP" | "TELEGRAM" |
"RCS" | "VIBER" | "CALL"), code_validity_seconds, max_code_attempts
(default 2), max_resend_requests_per_24h (default 2).
2. Create a verification session for an end user:
POST https://verification.didit.me/v3/session/
Body: workflow_id (from step 1), vendor_data (your own user id),
optional contact_details.phone in E.164 format
(e.g. "+14155552671") to pre-fill and lock the number.
Response: session_url — redirect the user to it.
3. Listen for webhook callbacks (see "Webhooks" below).
### Path B — Standalone server-to-server API
Best when you already own the phone-entry UX (mobile SDK, native
onboarding app, reseller pipeline) and want Didit to handle OTP delivery
+ risk scoring only. Two endpoints, called in sequence:
Step 1 — Send the code:
POST https://verification.didit.me/v3/phone/send/
Content-Type: application/json
Body fields:
- phone_number (required, string, E.164 format e.g. "+14155552671")
- channel (optional — "SMS" | "WHATSAPP" | "TELEGRAM" | "RCS" |
"VIBER" | "CALL". Omit to let Didit pick the best
available channel for the destination country and
carrier — automatic fallback routing.)
- vendor_data (optional, your user id for cross-session linkage)
Step 2 — Check the code:
POST https://verification.didit.me/v3/phone/check/
Content-Type: application/json
Body fields:
- phone_number (required, same E.164 number)
- code (required, the OTP the user typed)
- vendor_data (optional, same user id used in Step 1)
Response: JSON report — status, verification_method (the channel that
actually delivered), carrier object, is_disposable, is_virtual, warnings
array.
## 3. Channel routing — how the automatic fallback works
When channel is omitted on /v3/phone/send/, Didit picks the cheapest
+ most-deliverable channel for the destination:
- SMS where deliverable and lowest cost (most countries)
- WhatsApp in BR / IN / MX and other WhatsApp-dense markets
- Telegram / RCS / Viber where carrier-side SMS is blocked or premium
- CALL (voice OTP) as last-resort fallback when text channels fail
Each retry attempt may switch channels — the final delivery channel is
returned as verification_method in the report.
## 4. Webhooks (Path A only — Path B returns synchronously)
- Register a webhook destination once via
POST https://verification.didit.me/v3/webhook/destinations/
Body: url, subscribed_events: ["session.verified", "session.review_started",
"session.declined"]
- Response includes secret_shared_key — store it.
- Every webhook delivery carries an X-Signature-V2 header you MUST verify
before trusting the payload. HMAC-SHA256 verification MUST run against the raw body bytes (the raw payload as Didit sent it) BEFORE any JSON parsing — re-serialising the parsed body changes whitespace and key order, which invalidates the signature.Algorithm:
1. sortKeys(payload) recursively
2. shortenFloats (truncate trailing zeros after the decimal point)
3. JSON.stringify the result
4. HMAC-SHA256 with the secret_shared_key
5. Hex-encode, compare to the X-Signature-V2 header.
## 5. Reading the report (both paths return the same phone object)
- status: "Approved" | "Declined" | "In Review" | "Not Finished"
- phone_number_prefix: country prefix in international format ("+34")
- phone_number: subscriber number without the prefix
- full_number: full E.164 string ("+34600600600")
- country_code: ISO 3166-1 alpha-2 ("ES")
- country_name: full country name
- carrier: { name, type: "mobile" | "landline" | "voip" | "unknown" }
- is_disposable: boolean — temporary or throwaway number
- is_virtual: boolean — VoIP or virtual provider
- verification_method: the channel that actually delivered the code
("sms" | "whatsapp" | "viber" | "telegram" | "call")
- verification_attempts: number of code-entry tries
- verified_at: ISO 8601 timestamp
- warnings: Array<{ risk, log_type, short_description, long_description }>
Auto-decline risks (always enforced by Didit, not configurable):
- VERIFICATION_CODE_ATTEMPTS_EXCEEDED
- HIGH_RISK_PHONE_NUMBER
- PHONE_NUMBER_IN_BLOCKLIST
Configurable risks (action per workflow — Decline, Review, or Approve):
- DISPOSABLE_NUMBER_DETECTED
- VOIP_NUMBER_DETECTED
- DUPLICATED_PHONE_NUMBER
## 6. Attempt limits (defaults — overridable per workflow)
- Max code-entry attempts: 2 per session
- Max resend requests: 2 per phone number per 24 hours
- Code validity: 5 minutes from send
Hitting either limit fires VERIFICATION_CODE_ATTEMPTS_EXCEEDED and
auto-declines the session.
## 7. Hard rules — do not change
- Base URL for /v3/* endpoints is verification.didit.me (NOT apx.didit.me).
- Feature enum is UPPERCASE: PHONE, ID_VERIFICATION, LIVENESS, FACE_MATCH,
AML, IP_ANALYSIS.
- Channel enum is UPPERCASE on input ("SMS", "WHATSAPP", "TELEGRAM",
"RCS", "VIBER", "CALL") and lowercase on output ("sms", "whatsapp",
"telegram", "rcs", "viber", "call").
- All phone numbers go in and come out as E.164 strings — including
the leading "+" and country prefix.
- Auth header is x-api-key (lowercase, hyphenated).
- Webhook signature header is X-Signature-V2 (NOT X-Signature).
- Always verify webhook signatures before trusting payload data.
- Status casing matches exactly: "Approved", "Declined", "In Review",
"Not Finished" (title-cased, space-separated).
## 8. Pricing reference (public)
- Didit fee: $0.03 per verification (the cheapest channel; some
channels and countries cost more — see didit.me/pricing for the
per-country, per-channel table).
- Carrier fee: variable by country and channel, billed as a
pass-through with no Didit markup.
- You only pay when a message is SENT. If the user abandons before
delivery, you are not charged.
## 9. Verify your integration
- Sandbox starts on signup at https://business.didit.me — no separate flag.
- Sandbox numbers: deterministic E.164 numbers return Approved by default;
trigger Declined with the canonical "high-risk" sandbox number.
- Switch to live: flip the application's environment toggle in console.
When in doubt: https://docs.didit.me/core-technology/phone-verification/overview
Conforme par nature
Ouvre un nouveau pays en un clic. On s'occupe du plus dur.
Nous ouvrons les filiales locales, obtenons les licences, effectuons les tests d'intrusion, obtenons les certifications et nous alignons sur chaque nouvelle réglementation. Pour déployer des vérifications dans un nouveau pays, il suffit d'activer un interrupteur. Plus de 220 pays en direct, audités et testés chaque trimestre, le seul fournisseur d'identité qu'un gouvernement d'un État membre de l'UE a formellement jugé plus sûr que la vérification en personne.
Canaux de livraison, SMS, WhatsApp, Telegram, RCS, voix.
Auto
Routage des canaux, nous choisissons le chemin le moins cher et le plus fiable.
À partir de $0.03
Par vérification, plus frais de l'opérateur, sans majoration.
Trois niveaux, une seule grille tarifaire
Démarre gratuitement. Paye à l'usage. Passe à l'Enterprise.
500 vérifications gratuites chaque mois, pour toujours. Paiement à l'usage pour la production. Contrats personnalisés, résidence des données et SLAs (Service Level Agreements) pour l'Enterprise.
Gratuit
Gratuit
0 $ / mois. Aucune carte de crédit requise.
Pack KYC gratuit (vérification d'identité + détection de vivacité passive + correspondance faciale + analyse appareil & IP), 500 / mois, chaque mois
Commence gratuitement → ne paie que lorsqu'une vérification est effectuée → débloque l'Enterprise pour un contrat personnalisé, un SLA ou la résidence des données.
Les données de production sont traitées et stockées par défaut dans l'Union Européenne, sur Amazon Web Services. Les contrats d'entreprise peuvent demander des régions alternatives pour les juridictions dont les régulateurs l'exigent.
Chiffrement partout. AES-256 au repos sur chaque base de données, stockage d'objets et sauvegarde. Transport Layer Security 1.3 en transit sur chaque appel API, webhook et session de la console Business. Les données biométriques sont chiffrées sous une clé de chiffrement client distincte (Customer Master Key).
La rétention est sous ton contrôle. La rétention par défaut est indéfinie (illimitée), sauf si tu configures une durée plus courte, entre 30 jours et 10 ans par application, et tu peux supprimer n'importe quelle session individuelle à tout moment depuis le tableau de bord ou l'API.
Certifications : SOC 2 Type 1 (audit Type 2 en cours), ISO/IEC 27001:2022, iBeta Level 1 PAD, et une attestation publique du Tesoro / SEPBLAC / CNMV espagnol que la vérification d'identité à distance de Didit est plus sûre que la vérification en personne. Rapport complet sur /security-compliance.