> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# API Verifikasi Telepon: OTP, SMS & WhatsApp

> Verifikasi nomor telepon via OTP SMS, WhatsApp, Telegram, & suara dengan Didit. $0.02/panggilan + operator, deteksi operator, skor risiko.

Verifikasi Telepon Didit menyediakan metode yang andal untuk memverifikasi nomor telepon pengguna melalui kode sekali pakai (OTP). Fitur ini menambahkan lapisan keamanan penting ke proses verifikasi identitas Anda, memastikan keabsahan informasi kontak pengguna.

Prompt Integrasi Verifikasi Telepon
        Salin prompt ke papan klip



      
      

\<pre>

\````# Goal
Integrate Didit Phone Verification (OTP send + check + carrier/risk lookup) into your app. Pick ONE mode.

\# Mode A — Session-based
Use this when the user goes through a hosted Didit flow — the SDK collects the number and OTP for you.

1\. Add the PHONE feature to the workflow (Business Console or POST /v3/workflows/). Configure risk actions: duplicated_phone_number_action, disposable_number_action, voip_number_action.
2\. Create a session — POST /v3/session/ with { workflow_id, vendor_data, callback }. See /sessions-api/create-session.
3\. Open session.url for the user (or mount the Web/Mobile SDK).
4\. Fetch the decision — GET /v3/session/{sessionId}/decision/ or subscribe to session.status.updated.

Decision surface: `phone_verifications[]` array on the decision payload.

\# Mode B — Standalone API (server-to-server, OTP pair)
Two endpoints, paired by phone_number.

Step 1 — send the code:
\```bash
curl -X POST 'https://verification.didit.me/v3/phone/send/' \
-H "x-api-key: $DIDIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"phone_number": "+14155552671",
"options": {
  "code_size": 6,
  "preferred_channel": "whatsapp",
  "locale": "en-US"
},
"vendor_data": "user-1234"
}'
\```
Channels: `whatsapp` (default), `sms`, `telegram`, `voice` — delivery falls back to SMS if the preferred channel is unavailable. Codes are valid for **5 minutes**; one free retry per number within the window.
Branding: SMS codes carry your app's SMS sender name ("123456 is your verification code for Acme Bank") on every send, at no extra cost; set it in the Business Console. Pass `options.sms_sender_name` to sign one code with another name (1 to 30 characters). WhatsApp codes use a fixed message; connect your own WhatsApp Business number in the Business Console to send them under your business name.

Step 2 — check the code (user types it into your UI):
\```bash
curl -X POST 'https://verification.didit.me/v3/phone/check/' \
-H "x-api-key: $DIDIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"phone_number": "+14155552671",
"code": "123456",
"voip_number_action": "DECLINE"
}'
\```
Each session accepts **up to 3** code-entry attempts. The check response includes the full phone metadata (carrier, line_type, disposable, voip, ported).

\# Status enum (per phone_verifications[].status / phone.status)
"Not Started" | "In Progress" | "Approved" | "Declined" | "Failed" | "Expired or Not Found" | "Abandoned" | "Kyc Expired"

\# Warnings (LogWarningChoices.PHONE)
warnings[] risk codes include:
DUPLICATED_PHONE_NUMBER, DISPOSABLE_NUMBER, VOIP_NUMBER, INVALID_PHONE_NUMBER, OTP_DELIVERY_FAILED, OTP_MAX_ATTEMPTS_REACHED, OTP_EXPIRED, PHONE_NUMBER_BLOCKED.
Full catalogue: /core-technology/phone-verification/warnings-phone-verification.

\# Failure modes to handle
\- HTTP 400 — non-E.164 phone_number on /send/.
\- send response status="Blocked" with reason="spam" — anti-abuse block; no code sent, no charge.
\- check response status="Failed" — wrong code, attempts remaining; re-prompt.
\- check response status="Declined" — third failed attempt; restart with /v3/phone/send/.
\- check response status="Expired or Not Found" — outside the 5-minute window or no pending session for that number; restart.

\# See also
\- Canonical schema: /reference/data-models#phone-verification
\- Per-feature report: /core-technology/phone-verification/report-phone-verification
\- Risk catalogue: /core-technology/phone-verification/warnings-phone-verification
\- Full integration playbook: /integration/integration-prompt````

\</pre>



      
      

Tempel ke

Dalam pelajaran Academy tentang membaca hasil verifikasi, bagian 8:08 membahas verifikasi telepon dan deteksi duplikat.[Phone verification and duplicates — Didit Academy](https://www.youtube.com/embed/7htTWCWsl60?start=488\&rel=0\&playsinline=1)![Diagram alur verifikasi telepon](https://mintcdn.com/didit-0f962782/z6T2GHM4Zh-iSj-K/images/phone-verification-flow.png?fit=max\&auto=format\&n=z6T2GHM4Zh-iSj-K\&q=85\&s=6c12863ce97e5ad6a11757b598918932)## Cara kerjaSolusi Verifikasi Telepon kami menghadirkan validasi nomor telepon yang komprehensif melalui proses yang sederhana dan ramah pengguna. Sistem ini menggabungkan verifikasi OTP dengan penilaian risiko tingkat lanjut untuk memberikan verifikasi telepon yang andal dalam skala besar.**1. Pengumpulan Nomor Telepon**Sistem mengumpulkan informasi berikut secara aman:| Data yang Dikumpulkan | Detail |
| - | - |
| **Nomor Telepon** | Jika tidak diberikan saat pembuatan sesi, pengguna memasukkan nomor telepon mereka dalam format internasional. Jika sudah diberikan, pengguna harus memverifikasi nomor yang telah terisi sebelumnya. |
| **Kode Negara** | Disarankan secara otomatis berdasarkan lokasi IP atau pilihan pengguna. |
| **Tipe Operator** | Mendeteksi apakah nomor tersebut merupakan nomor seluler atau telepon rumah. |**2. Pembuatan & Pengiriman OTP**Sistem verifikasi kami:- Menghasilkan kode sekali pakai yang aman dan berbatas waktu
- Mengirimkan kode melalui SMS ke nomor yang diberikan
- Memastikan pengiriman yang dioptimalkan melalui integrasi beberapa operator
- Menyediakan opsi cadangan untuk kendala pengiriman**3. Validasi Kode**Pengguna menyelesaikan verifikasi dengan:- Memasukkan kode yang diterima ke dalam antarmuka verifikasi
- Mengirimkannya dalam batas waktu yang dikonfigurasi (biasanya 5–10 menit)
- Meminta kode baru jika diperlukan (dengan batas laju yang sesuai)**4. Penilaian Risiko**Sistem kami melakukan pemeriksaan tingkat lanjut:| Pemeriksaan | Deskripsi |
| - | - |
| **Format & Operator** | Memverifikasi format nomor telepon dan informasi operator. |
| **Nomor Sekali Pakai** | Memeriksa terhadap database nomor sekali pakai/virtual yang diketahui. |
| **Deteksi SIM Swap** | Mengidentifikasi potensi risiko SIM swap. |
| **Pola Aktivitas** | Mendeteksi pola aktivitas mencurigakan. |
| **Data Historis** | Membandingkan dengan data verifikasi historis. |**5. Pengiriman Hasil**Akses hasil verifikasi melalui beberapa saluran:| Saluran | Deskripsi |
| - | - |
| **Dasbor** | Pembaruan dasbor secara waktu nyata. |
| **Webhook** | Notifikasi webhook instan. |
| **API** | Integrasi RESTful API. |
| **Laporan** | Laporan komprehensif dengan informasi verifikasi terperinci. |## Fitur VerifikasiLayanan Verifikasi Telepon kami menawarkan beberapa fitur utama untuk menyempurnakan proses verifikasi Anda:#### Verifikasi OTP- **Pembuatan Kode Aman**: Kode sekali pakai yang dihasilkan secara acak
- **Pengiriman SMS**: Pengiriman yang cepat dan andal ke perangkat seluler
- **Batas Waktu yang Dapat Dikonfigurasi**: Atur waktu kedaluwarsa berdasarkan kebutuhan keamanan Anda
- **Opsi Coba Lagi**: Memungkinkan pengguna meminta kode baru dengan batas laju yang sesuai
- **Kode bermerek**: Kode SMS mencantumkan merek Anda alih-alih mengirim pesan generik, tanpa biaya tambahan. Lihat [Pesan verifikasi bermerek](#pesan-verifikasi-bermerek).
- **Nomor WhatsApp Anda sendiri**: Kode WhatsApp dapat berasal dari nomor WhatsApp Business Anda sendiri. Lihat [Kirim kode WhatsApp dari nomor Anda sendiri](#kirim-kode-whatsapp-dari-nomor-anda-sendiri).#### Pesan verifikasi bermerekKode verifikasi SMS dapat mencantumkan merek Anda, sehingga pengguna mengenali pesan tersebut sebagai milik Anda:> 123456 adalah kode verifikasi Anda untuk **Acme Bank**Hanya nama yang dapat disesuaikan.
Sisa teksnya adalah teks standar yang didaftarkan ke operator seluler di setiap negara, yang mencegah kode difilter sebagai spam, dan diterjemahkan ke dalam bahasa penerima.
Branding ini gratis: kode bermerek dikenakan biaya yang sama dengan kode tanpa merek.**Atur nama pengirim SMS Anda** di Business Console, di dalam **Phone Verification → Settings** pada alur kerja atau di bawah **White Label → SMS**.
Nama tersebut menjadi milik aplikasi Anda, bukan untuk satu alur kerja saja: nama tersebut dicantumkan pada setiap kode SMS yang dikirimkan aplikasi, di setiap alur kerja dan melalui API mandiri, dengan atau tanpa kustomisasi White Label.**Nama yang dicantumkan pada kode** ditentukan berdasarkan kecocokan pertama:1) `options.sms_sender_name` pada [`POST /v3/phone/send/`](https://docs.didit.me/id/standalone-apis/phone-send), khusus untuk kode tersebut.
2) Nama pengirim SMS aplikasi Anda.
3) Hanya pada pengiriman White Label (alur kerja dengan kustomisasi White Label, atau `options.use_white_label_customization: true` pada API), nama publik White Label Anda.
4) Jika tidak, kode akan dikirim tanpa nama.Nama pengirim terdiri atas 1 hingga 30 karakter: hanya huruf, angka, spasi, dan ' & - !, tidak boleh hanya angka, dengan spasi tunggal di antara kata.
API menolak nama di luar aturan ini dengan `400` sebelum kode apa pun dikirim.- **Saluran**: nama ini ditambahkan ke pesan SMS, termasuk SMS yang dikirim sebagai cadangan dari saluran lain. Kode WhatsApp dikirim dengan pesan tetap dan tidak memuatnya; untuk mencantumkan nama bisnis Anda pada kode tersebut, [kirimkan dari nomor Anda sendiri](#kirim-kode-whatsapp-dari-nomor-anda-sendiri).
- **Perubahan per hari**: setiap aplikasi dapat mulai menggunakan hingga dua nama baru per hari (UTC), menghitung nama pengirim baru maupun nilai `sms_sender_name` baru. Setelah itu, kode tetap menggunakan nama aplikasi saat ini hingga hari berikutnya, dan kode dengan nama baru per permintaan akan dikirim dengan nama aplikasi. Nama yang pernah Anda gunakan sebelumnya tidak dihitung lagi.
- **Pengiriman diutamakan**: masalah branding tidak akan pernah menghentikan pengiriman kode. Jika nama tidak dapat diterapkan, kode akan dikirim dengan nama aplikasi, atau tanpa nama.#### Tulis teks SMS dan ID pengirim Anda sendiriAnda dapat mengganti teks kode SMS dan pengirim yang dilihat pengguna Anda.
Atur keduanya di Business Console di bawah **White Label → SMS**.
Pengaturan ini menjadi milik aplikasi Anda, seperti halnya nama pengirim SMS, dan berlaku untuk setiap kode SMS yang dikirimkannya, di setiap alur kerja dan melalui API mandiri.**Teks Anda sendiri** ditulis per bahasa.
Kode akan dikirim menggunakan teks Anda jika Anda telah menulis teks untuk bahasa pengiriman kode tersebut; semua bahasa lainnya tetap menggunakan teks terjemahan Didit.
Gunakan `{code}` untuk kode dan, secara opsional, `{brand}` untuk nama pengirim SMS Anda, misalnya `Acme: {code} is your login code for {brand}.`Teks harus:- memuat `{code}` tepat satu kali, dan tidak ada placeholder selain `{code}` dan `{brand}`;
- tidak memuat tautan: operator memblokir kode verifikasi yang memuat tautan;
- muat dalam satu SMS dengan kode 8 digit dan nama 30 karakter: hingga 160 karakter, atau 70 karakter jika menggunakan karakter di luar alfabet Latin dasar (misalnya Sirilik, Arab, atau emoji).**ID pengirim Anda sendiri** menggunakan 3 hingga 11 huruf, angka, dan spasi, tidak boleh hanya angka, misalnya `AcmeBank`.
ID ini digunakan di negara-negara tempat Didit mengaktifkan ID pengirim kustom, yaitu negara-negara yang operatornya menerima nama pengirim tanpa mendaftarkannya terlebih dahulu; di tempat lain, kode Anda dikirim menggunakan pengirim Didit.
Hubungi tim dukungan untuk mengajukan permintaan bagi negara yang mewajibkan pendaftaran pengirimnya.- **Pengiriman diutamakan**: ketika kode dikirim ulang melalui rute yang tidak dapat membawa teks atau ID pengirim Anda, kode akan dikirim dengan teks Didit, ditandatangani dengan nama pengirim SMS Anda, dan menggunakan pengirim Didit, sehingga kode selalu sampai.#### Kirim kode WhatsApp dari nomor Anda sendiriSecara default, kode WhatsApp dikirim dari nomor WhatsApp Business Didit.
Sebagai gantinya, Anda dapat menghubungkan nomor WhatsApp Business Anda sendiri, sehingga pengguna menerima kode dari nama dan nomor bisnis Anda.**Hubungkan nomor** di Business Console, di dalam **Phone Verification → Settings → WhatsApp number** pada alur kerja, lalu pilih **Connect WhatsApp number**.
Jendela masuk akan terbuka: masuklah ke akun bisnis yang mengelola nomor WhatsApp Business Anda, lalu pilih akun WhatsApp Business dan nomor yang akan digunakan untuk mengirim.
Didit kemudian mendaftarkan nomor tersebut untuk pengiriman dan membuat pesan verifikasinya.
Mengeditnya memerlukan izin untuk mengedit kustomisasi, sama seperti nama pengirim SMS.Nomor ini menjadi milik aplikasi Anda, bukan untuk satu alur kerja saja: setelah terhubung, nomor ini mengirimkan setiap kode WhatsApp yang dikirimkan aplikasi, di setiap alur kerja dan melalui API mandiri.- **Persetujuan**: pesan verifikasi baru memerlukan persetujuan sebelum nomor tersebut dapat mengirim kode, biasanya dalam beberapa menit. Kartu menampilkan bahwa nomor tersebut sedang menunggu persetujuan hingga saat itu, dan sementara itu kode tetap dikirim dari nomor Didit.
- **Teks pesan**: pesan verifikasi di WhatsApp menggunakan teks standar dalam bahasa pengguna Anda: kode, catatan keamanan, dan tombol salin. Teks tersebut tidak dapat diedit, tetapi pengirimnya adalah bisnis Anda.
- **Pengiriman**: jika kode tidak dapat dikirimkan di WhatsApp, kode akan dikirimkan melalui SMS, yang ditandatangani dengan nama pengirim SMS Anda.
- **Tagihan**: pesan yang dikirimkan nomor Anda ditagihkan ke akun WhatsApp Business Anda, sehingga Didit hanya membebankan biaya verifikasinya (\$0.02) untuk kode-kode tersebut. Kode yang dikirim melalui SMS ditagihkan seperti biasa.
- **Perlu perhatian**: jika nomor tidak dapat lagi mengirim (misalnya, aksesnya dicabut dari akun bisnis Anda), kode akan dikirim kembali dari nomor Didit dan kartu akan meminta Anda menghubungkan nomor tersebut lagi.
- **Putuskan** kapan saja dari kartu yang sama. Kode akan dikirim kembali dari nomor Didit; nomor beserta pesan verifikasinya tetap berada di akun WhatsApp Business Anda.#### Analisis Nomor Telepon- **Validasi Format**: Memastikan nomor telepon mengikuti format internasional yang benar
- **Deteksi Operator**: Mengidentifikasi penyedia telekomunikasi yang terkait dengan nomor tersebut
- **Tipe Nomor**: Membedakan antara nomor seluler, telepon rumah (telepon tetap), dan VoIP
- **Validasi Negara**: Memverifikasi nomor telepon sesuai dengan format negara yang diharapkan#### Penilaian Risiko- **Deteksi Nomor Sekali Pakai**: Mengidentifikasi nomor sementara yang digunakan untuk menghindari keterlacakan
- **Identifikasi Nomor Virtual**: Menandai nomor yang mungkin berbasis virtual atau VoIP
- **Pemantauan Aktivitas**: Melacak pola mencurigakan di seluruh upaya verifikasi
- **Pemeriksaan Daftar Blokir**: Memeriksa terhadap daftar internal nomor yang disalahgunakan sebelumnya## HargaVerifikasi telepon dikenakan biaya **per pesan terkirim** dengan harga bayar sesuai penggunaan yang transparan:| Komponen | Biaya |
| - | - |
| **Biaya Didit** | \$0.02 per verifikasi |
| **Biaya Operator** | Bervariasi berdasarkan negara dan saluran |
| **Total** | \$0.02 + biaya operator |Diskon paket Anda hanya berlaku untuk biaya Didit sebesar \$0.02; biaya operator diteruskan sesuai biaya aslinya dan tidak pernah didiskon. Lihat [Diskon](https://docs.didit.me/id/getting-started/pricing.md#diskon).Kami mendukung berbagai saluran pengiriman dengan harga yang berbeda (ketersediaan bervariasi berdasarkan negara):| Saluran | Deskripsi |
| - | - |
| **SMS** | Pengiriman pesan teks tradisional |
| **WhatsApp** | Pengiriman melalui perpesanan WhatsApp |
| **Telegram** | Pengiriman melalui perpesanan Telegram |
| **RCS** | Perpesanan Rich Communication Services |
| **Viber** | Pengiriman melalui perpesanan Viber |
| **Zalo** | Pengiriman melalui perpesanan Zalo (Vietnam) |> [!NOTE]
>
> Anda hanya membayar ketika pesan terkirim. Jika pengguna meninggalkan proses sebelum pengiriman OTP, Anda tidak akan dikenakan biaya.→ [Harga Verifikasi Telepon](https://docs.didit.me/id/getting-started/phone-verification-pricing.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.