Verifica qualsevol telèfon. Per qualsevol canal que responguin.
Envia un codi d'un sol ús per SMS, WhatsApp, Telegram, RCS o veu, pel canal que l'usuari respongui. Retorn automàtic entre canals, amb puntuació de risc de l'operador en cada trucada. Des de 0,03 $ més operador.
Confiat per més de 2.000 organitzacions a tot el món.
Cinc canals
SMS. WhatsApp. Telegram. RCS. Veu.
Un mòdul, cinc vies de lliurament. Reintentem a través dels canals fins que el codi
arriba, puntuam el risc de SIM-swap i de l'operador en cada trucada, i facturam des de 0,03 $ més
operador, el mateix flux de treball de qualsevol manera.
Com funciona
Des del registre fins a l'usuari verificat en quatre passos.
Pas 01
Crea el flux de treball
Tria les comprovacions que vulguis: identificació, prova de vida, coincidència facial, sancions, adreça, edat, telèfon, correu electrònic, preguntes personalitzades. Arrossega-les a un flux al tauler de control o publica el mateix flux a la nostra API. Crea ramificacions segons condicions, executa proves A/B, sense necessitat de codi.
Pas 02
Integra
Integra de forma nativa amb els nostres SDK per a Web, iOS, Android, React Native o Flutter. Redirigeix a una pàgina allotjada. O simplement envia a l'usuari un enllaç per correu electrònic, SMS, WhatsApp, on vulguis. Tria el que millor s'adapti al teu stack.
Pas 03
L'usuari completa el flux
Didit gestiona la càmera, les indicacions d'il·luminació, el traspàs mòbil i l'accessibilitat. Mentre l'usuari està en el flux, puntuam més de 200 senyals de frau en temps real i verifiquem cada camp amb fonts de dades autoritzades. Resultats en menys de dos segons.
Pas 04
Rep els resultats
Els webhooks signats en temps real mantenen la teva base de dades sincronitzada en el moment en què un usuari és aprovat, rebutjat o enviat a revisió. Consulta l'API sota demanda. O obre la consola per inspeccionar cada sessió, cada senyal i gestionar els casos a la teva manera.
Creat per a desenvolupadors · Dissenyat contra el frau · Obert per disseny
Sis funcionalitats. Una feature flag. PHONE.
Cada funcionalitat és un interruptor al mateix mòdul. Sense nivells de venda addicional, sense plans separats, sense trucades addicionals. Activa-les per flux de treball a la consola o passa-les directament a la crida de l'API.
SMS, WhatsApp, Telegram, RCS i veu, tot en el mateix mòdul i flux de treball. Fixa un canal quan la política ho exigeixi (SMS obligatori per regulació, mercats on WhatsApp és prioritari com Brasil i l'Índia), o deixa que nosaltres triem el salt de lliurament més econòmic.
Una feature flag · Cinc canalsfeature: TELÈFON
SMSPer defecte
WhatsAppBR / IN / MX
TelegramUE
RCSAndroid
VeuRetorn
02 · Enrutament
Retrocés automàtic de canal quan un falla.
Els bloquejos d'SMS de l'operador, els països amb tarifes premium i els errors silenciosos es gestionen automàticament. Reintentem amb el següent canal de lliurament sense que el teu codi hagi de fer res, i t'informem de quin canal ha realitzat el lliurament.
Enrutament automàtic de canalsPOST /v3/phone/send/
1SMSOperador bloquejat
2WhatsAppLliurat
verification_methodwhatsapp
03 · Cobertura
Abast global de telecomunicacions. Lliurament amb coneixement de l'operador.
Integracions multioperador per país, amb enrutament ajustat als hàbits locals: WhatsApp és líder a Brasil, Índia i Mèxic; Telegram i RCS ho són a la UE; SMS és líder als EUA. El país, l'operador i el tipus de número es detecten automàticament.
04 · Senyals de frau
Més que un codi d'un sol ús. Risc de l'operador en cada trucada.
Cada verificació retorna el nom i el tipus d'operador (mòbil, fix, veu sobre IP), senyals per a números d'un sol ús i virtuals, i advertències explícites per a números d'alt risc, duplicats o bloquejats. Decideix, revisa o aprova per categoria de risc.
05 · Conversió
Només SMS fa que els usuaris es perdin. Multi-canal els reté.
Quan l'SMS falla,filtre de l'operador, roaming, zona sense cobertura, disminució de la lliurabilitat, els proveïdors d'un sol canal deixen els usuaris mirant un codi que mai arriba. Nosaltres els recuperem al següent salt i informem de quin canal ha realitzat el lliurament perquè puguis ajustar l'enrutament amb dades reals.
Finalització · 30 dies consecutiusCom més alt, millor
Només SMS58%
+ WhatsApp79%
+ Retorn de veu93%
Il·lustratiu, orientatiu, no un estudi.
06 · Preus
Paga per missatge. Des de 0,03 $ més operador.
0,03 $ per verificació, més una tarifa d'operador per país i canal sense recàrrec. Només pagues quan s'envia un missatge; els abandonaments abans del lliurament no costen res.
Tarifes per missatgeDes de 0,03 $
Estats UnitsSMS$0.03
BrasilWhatsApp$0.04
ÍndiaWhatsApp$0.05
Paga només quan s'envia un missatge.
Integra
Dos endpoints. El mateix JSON. El mateix preu.
Tria el flux allotjat quan vulguis que gestionem la introducció del número, la UX del codi i el reenviament. Tria l'API autònoma quan tu gestionis la UX. Tots dos retornen el mateix informe.
Llança la verificació telefònica amb una sola indicació.
Enganxa el bloc següent a Claude Code, Cursor, Codex, Devin, Aider o Replit Agent. Omple la teva pila. L'agent aprovisionarà Didit, crearà el flux de treball de verificació telefònica, connectarà el webhook i ho llançarà.
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
Compliment per disseny
Obre un nou país amb un clic. Nosaltres fem la feina difícil.
Obrim les filials locals, assegurem les llicències, realitzem les proves de penetració, obtenim les certificacions i ens alineem amb cada nova regulació. Per desplegar verificacions en un nou país, només has d'activar un interruptor. Més de 220 països en funcionament, auditats i provats trimestralment, l'únic proveïdor d'identitat que un govern d'un estat membre de la UE ha qualificat formalment com més segur que la verificació presencial.
Canals de lliurament, SMS, WhatsApp, Telegram, RCS, veu.
Automàtic
Encaminament de canals, triem el salt de lliurament més econòmic.
Des de $0.03
Per verificació, més el cost de l'operador, sense recàrrecs.
Tres nivells, una llista de preus
Comença gratis. Paga per ús. Escala a Enterprise.
500 verificacions gratuïtes cada mes, per sempre. Pagament per ús per a producció. Contractes personalitzats, residència de dades i SLA (Acords de Nivell de Servei) a Enterprise.
Gratuït
Gratuït
0 $ / mes. No es requereix targeta de crèdit.
Paquet KYC gratuït (Verificació d'identitat + Prova de vida passiva + Coincidència facial + Anàlisi de dispositius i IP), 500 / mes, cada mes