Mau lebih simple? Order OTP langsung dari Telegram.

Halo,

Selamat datang di OTPZap

Nyalakan Notifikasi

Supaya kamu langsung tahu saat OTP masuk, deposit berhasil, atau saldo dikembalikan - bahkan saat tab tidak aktif.

Gabungkan akun?

Kamu login lewat Telegram. Punya akun email juga? Hubungkan di Pengaturan → Telegram supaya saldo & riwayat jadi satu.

Hubungkan Telegram

Terima kode OTP langsung di chat Telegram kamu. Ga perlu buka dashboard.

Saldo Aktif

Saldo dipakai untuk order OTP dari web, Telegram, dan API. Refund, deposit, promo, dan bonus otomatis tersinkron ke riwayat saldo.

Orders
Last 30 days
Spending
Last 30 days

Order Terbaru

Belum ada order

Deposit Saldo

Top up saldo, pantau pembayaran, dan klaim promo dari satu halaman.

Rp
Minimum deposit Rp 5.000 · Total yang dibayar akan sedikit berbeda (kode unik QRIS)
Punya Kode Promo?
Masukkan kode untuk dapat saldo gratis
Scan QRIS untuk Bayar
Bayar sebelum waktu habis
QRIS
Bayar sebelum timer habis. QR berlaku 30 menit dari waktu dibuat. Jangan bayar QR dari screenshot lama atau setelah status kadaluarsa.
BAYAR TEPAT SEBESAR

SMS

Pilih server, layanan, varian harga, lalu pantau OTP SMS secara realtime.

Informasi Penting

Tips Pembelian
Order Aktif ()
Favorit Kamu
Online
Server 1
Tidak ada layanan ditemukan
Siap dibeli
Informasi Penting

Total Harga · layanan
Tiap layanan dapat nomor sendiri-sendiri (acak). Yang gagal otomatis di-refund.
Maksimal 10 nomor per sekali order.

Email

Pilih site & domain, lalu pantau email masuk secara realtime.

Informasi Email OTP

Website bebas diketik Window 20 menit Biaya batalkan jika aktivasi rendah Realtime refresh
Order Email Aktif ()
Lengkapi pilihan di atas

Lengkapi pilihan di atas
Memproses...

Lengkapi pilihan di atas
Jumlah
Total Harga

Riwayat Order

Lihat transaksi order dan deposit lengkap dengan status terakhir.

Belum ada riwayat order
Belum ada deposit

Program Referral

Ajak teman, dapat bonus saldo otomatis dari setiap top up mereka.

Total Diundang
Aktif: · Belum top up:
Total Bonus
Otomatis masuk ke saldo
Persentase Bonus
per top up referee

Penting - Syarat & Ketentuan Referral

Pastikan kamu sudah membaca dan memahami Syarat & Ketentuan Referral sebelum bergabung di program OTPZap.

  • Bonus Eligibility: Bonus diberikan kepada pengguna yang berhasil mengajak pengguna baru bergabung lewat link referral kamu.
  • Persentase: Bonus referral sebesar dari total top up pengguna baru yang kamu ajak.
  • Auto Credit: Bonus otomatis ditambahkan ke saldo kamu saat referee melakukan top up sukses (tidak akan dibayar dobel).
  • Anti-fraud: Self-referral, akun duplikat dengan IP/device sama, atau aktivitas mencurigakan akan otomatis di-flag dan bonus dapat dibatalkan.
  • Min Top Up: Tidak ada minimum top up. Setiap top up valid mendapatkan bonus, sekecil apapun.

Simulasi Bonus

Coba %:

Berikut perhitungan bonus berdasarkan persentase :

Jumlah Top Up Bonus Didapat %
Semakin banyak referee yang aktif top up, semakin besar penghasilan pasif kamu.

Riwayat Bonus

Belum ada bonus. Bagikan link referral kamu sekarang!

Pengaturan Profil

Kelola profil, Telegram, notifikasi, keamanan, dan sesi login.

Akun login via Telegram

Email di bawah ([email protected]) adalah ID internal, bukan inbox Gmail.

  1. Logout dari akun ini
  2. Login atau daftar pakai Gmail di OTPZap
  3. Di akun Gmail → Pengaturan → Hubungkan Telegram

Tidak bisa diubah manual.

Login & Keamanan

Kelola cara masuk: Google dan password manual.

Google
Password login
Hubungkan Google hanya bisa di akun email/Gmail.

Preferensi Notifikasi

Keamanan Akun

Notifikasi Push

Aktifkan agar Anda menerima notifikasi langsung saat OTP masuk atau pembayaran berhasil - bahkan ketika tab tidak aktif.

Browser Anda tidak mendukung notifikasi push.
Notifikasi diblokir di pengaturan browser. Silakan izinkan notifikasi untuk situs ini melalui pengaturan browser.

Mau pakai Gmail sebagai akun utama?

Notifikasi Telegram

Terima OTP langsung di Telegram.

Terhubung

Belum terhubung ke Telegram.

Klik link di bawah, lalu tekan Start di bot:

Buka @OTPZapBot →

Link berlaku 10 menit

Sesi Aktif

Device yang sedang login pakai akun kamu. Klik Revoke kalau ada yang ga kamu kenal.

Belum ada sesi lain.

Riwayat Saldo

Semua mutasi saldo, debit order, refund, bonus, dan deposit tercatat di sini.

Belum ada riwayat saldo

Informasi

Pengumuman, promo, dan update layanan terbaru dari OTPZap.

Belum ada informasi

Beri Review

Bagikan pengalaman kamu pakai OTPZap. Review yang disetujui akan tampil di homepage.

Belum Bisa Review

Lakukan minimal 1 order berhasil untuk dapat memberikan review.

Sedang Menunggu Moderasi

Review kamu sedang ditinjau admin. Akan tampil di homepage setelah disetujui.

Sangat Memuaskan Memuaskan Cukup Kurang Puas Tidak Puas
Minimal 10 karakter

✨ Bonus Rp 1.000 saldo otomatis dikreditkan kalau review disetujui admin

total review

Review Terbaru

Pusat Bantuan

Panduan lengkap pakai OTPZap. Cari topik atau scroll untuk lihat semua.

Setelah Order: Tombol Apa Saja?

Setelah berhasil order nomor, akan muncul tombol-tombol untuk kelola pesanan. Berikut penjelasannya.

SERVER 1 4 Tombol Tersedia
Cancel
Cancel = Batalkan Pesanan

Membatalkan pesanan kalau OTP tidak masuk atau berubah pikiran. Saldo dikembalikan penuh ke akun. Cooldown 2 menit setelah order baru bisa cancel.

Replace
Replace = Ganti Nomor

Otomatis batalkan nomor lama dan bikin order baru di harga yang sama. Berguna kalau nomor lama gagal terima OTP. Saldo nomor lama otomatis kembali, langsung dipotong untuk nomor baru. Hanya bisa SEBELUM OTP masuk.

Resend
Resend = Minta OTP Baru

Minta server kirim OTP ulang ke nomor yang sama. Berguna kalau OTP pertama tidak diterima atau kebetulan butuh kirim ulang dari aplikasi. Setelah klik, tunggu OTP baru masuk (max ~5 menit).

Done
Done = Selesai

Tandai pesanan sudah selesai setelah OTP diterima dan kamu sudah pakai. Klik ini supaya nomor langsung di-release dan tidak boros di daftar order aktif. Saldo TIDAK dikembalikan (karena order sukses).

SERVER 2 2 Tombol Tersedia
Cancel
Cancel = Batalkan Pesanan

Sama dengan Server 1, membatalkan pesanan dan refund saldo. Khusus Server 2 (Multiservice), kalau order multi-service, semua service di satu nomor akan ikut dibatalkan.

Done
Done = Selesai

Tandai pesanan selesai setelah OTP sukses dan dipakai. Server 2 tidak punya Replace/Resend karena nomor di Server 2 hanya sekali pakai.

Catatan: Server 2 hanya menerima 1 OTP per nomor. Tidak ada Replace/Resend karena setelah OTP masuk, nomor langsung tidak aktif.

Perbedaan Server 1 vs Server 2

Aspek Server 1 Server 2
Tipe Server OTP Server Global OTP Server Indonesia
Jumlah OTP Bisa terima multiple OTP per nomor (sambil aktif) 1 OTP per nomor (sekali pakai)
Durasi Aktif Hingga 20 menit ~5 menit (lebih cepat release)
Tombol Cancel, Replace, Resend, Done Cancel, Done
Negara 200+ negara Indonesia + 30 negara
Layanan Khusus - Multiservice (1 nomor banyak service)
Cocok Untuk Layanan global (Twitter, Tinder, Discord, dll) Layanan Indonesia (Shopee, Tokopedia, Gojek)

Status Order Apa Artinya?

PENDING

Nomor sudah aktif, sedang menunggu OTP masuk. Cancel bisa dilakukan setelah cooldown 2 menit.

OTP_RECEIVED

OTP sudah masuk! Khusus Server 1, nomor masih aktif untuk terima OTP berikutnya kalau perlu.

SUCCESS

Order selesai dengan sukses. Dipakai juga kalau nomor sudah expired tapi sudah pernah terima OTP.

CANCELLED

Pesanan dibatalkan oleh kamu. Saldo otomatis dikembalikan ke akun.

FAILED

OTP tidak masuk dalam waktu yang ditentukan. Saldo otomatis dikembalikan penuh.

Pertanyaan Umum

OTP saya tidak kunjung masuk, harus apa?

Tunggu hingga 2 menit dulu setelah nomor aktif. Jika tetap tidak masuk: gunakan tombol Replace untuk ganti nomor (Server 1) atau Cancel untuk refund. Untuk OTP Shopee saat ini sedang ada delay tinggi.

Saldo tidak cukup, harus deposit berapa?

Minimum deposit Rp 5.000. Buka tab Deposit di sidebar, pilih nominal, bayar via QRIS / GoPay / DANA / OVO / ShopeePay. Saldo masuk dalam 1-3 menit.

Saya pilih server yang mana?

Untuk layanan Indonesia (Shopee, Tokopedia, Gojek, DANA), Server 2 lebih cocok karena harga lebih murah dan stock lebih banyak. Untuk layanan global (Twitter, Tinder, Discord), pakai Server 1.

Refund saldo butuh berapa lama?

Otomatis dalam beberapa detik setelah Cancel atau Failed. Cek di Riwayat Saldo untuk konfirmasi. Tidak perlu hubungi admin untuk refund standard.

Bisa pakai 1 nomor untuk 2 platform?

Tidak. 1 nomor = 1 platform untuk OTP. Kecuali pakai fitur Multiservice di Server 2, yang memungkinkan 1 nomor terima OTP dari beberapa platform sekaligus.

Masih Butuh Bantuan?

Kalau ada pertanyaan yang belum terjawab di atas, tim kami siap bantu via:

Developer API

Integrasikan OTPZap ke aplikasi kamu

Dokumentasi Lengkap
1
Authorization: Bearer otpzap_live_xxxxxxxxxxxxxxxx
2
Server 1
Server 2
3
GET /countries
GET /services?country_id=7
GET /products?platform_id=1&country_id=7
POST /order/create
GET /order/check?order_id=XX
POST /order/finish
4
GET /s2/countries
GET /s2/services?country_id=7
GET /s2/operators?country_id=7
POST /order/create
GET /order/check?order_id=XX
POST /order/finish
5
<?php
$apiKey = 'otpzap_live_YOUR_API_KEY_HERE';
$base   = 'https://otpzap.com/api/v1';

function apiGet($url, $key) {
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => ["Authorization: Bearer $key"]
    ]);
    $res = curl_exec($ch); curl_close($ch);
    return json_decode($res, true);
}

function apiPost($url, $data, $key) {
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => json_encode($data),
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer $key",
            "Content-Type: application/json"
        ]
    ]);
    $res = curl_exec($ch); curl_close($ch);
    return json_decode($res, true);
}

// 1. Cek produk WhatsApp Indonesia
$products = apiGet("$base/products?platform_id=1&country_id=7", $apiKey);
$productId = $products['data']['products'][0]['id'];
echo "Product ID: $productId\n";

// 2. Order nomor
$order = apiPost("$base/order/create", [
    'server'      => 1,
    'product_id'  => $productId,
    'country_id'  => 7,
    'platform_id' => 1
], $apiKey);
$orderId = $order['data']['order_id'];
$phone   = $order['data']['phone'];
echo "Nomor: $phone (Order #$orderId)\n";

// 3. Poll OTP (max 2 menit)
for ($i = 0; $i < 24; $i++) {
    sleep(5);
    $check = apiGet("$base/order/check?order_id=$orderId", $apiKey);
    if ($check['data']['otp_code']) {
        echo "OTP: " . $check['data']['otp_code'] . "\n";
        // 4. Finish order
        apiPost("$base/order/finish", ['order_id' => $orderId], $apiKey);
        exit("Done!");
    }
    echo "Waiting... ({$check['data']['status']})\n";
}
echo "Timeout - cancel order\n";
apiPost("$base/order/cancel", ['order_id' => $orderId], $apiKey);
?>
<?php
$apiKey = 'otpzap_live_YOUR_API_KEY_HERE';
$base   = 'https://otpzap.com/api/v1';

function apiGet($url, $key) {
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => ["Authorization: Bearer $key"]
    ]);
    $res = curl_exec($ch); curl_close($ch);
    return json_decode($res, true);
}

function apiPost($url, $data, $key) {
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => json_encode($data),
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer $key",
            "Content-Type: application/json"
        ]
    ]);
    $res = curl_exec($ch); curl_close($ch);
    return json_decode($res, true);
}

// 1. Look up WhatsApp Indonesia product
$products = apiGet("$base/products?platform_id=1&country_id=7", $apiKey);
$productId = $products['data']['products'][0]['id'];
echo "Product ID: $productId\n";

// 2. Create order
$order = apiPost("$base/order/create", [
    'server'      => 1,
    'product_id'  => $productId,
    'country_id'  => 7,
    'platform_id' => 1
], $apiKey);
$orderId = $order['data']['order_id'];
$phone   = $order['data']['phone'];
echo "Number: $phone (Order #$orderId)\n";

// 3. Poll for OTP (max 2 min)
for ($i = 0; $i < 24; $i++) {
    sleep(5);
    $check = apiGet("$base/order/check?order_id=$orderId", $apiKey);
    if ($check['data']['otp_code']) {
        echo "OTP: " . $check['data']['otp_code'] . "\n";
        // 4. Finish order
        apiPost("$base/order/finish", ['order_id' => $orderId], $apiKey);
        exit("Done!");
    }
    echo "Waiting... ({$check['data']['status']})\n";
}
echo "Timeout - cancel order\n";
apiPost("$base/order/cancel", ['order_id' => $orderId], $apiKey);
?>
6
import requests, time

API_KEY = 'otpzap_live_YOUR_API_KEY_HERE'
BASE    = 'https://otpzap.com/api/v1'
HEADERS = {'Authorization': f'Bearer {API_KEY}'}

# 1. Cek produk WhatsApp Indonesia
products = requests.get(f'{BASE}/products?platform_id=1&country_id=7', headers=HEADERS).json()
product_id = products['data']['products'][0]['id']
print(f'Product ID: {product_id}')

# 2. Order nomor
order = requests.post(f'{BASE}/order/create', json={
    'server': 1, 'product_id': product_id,
    'country_id': 7, 'platform_id': 1
}, headers=HEADERS).json()
order_id = order['data']['order_id']
phone = order['data']['phone']
print(f'Nomor: {phone} (Order #{order_id})')

# 3. Poll OTP (max 2 menit)
for _ in range(24):
    time.sleep(5)
    check = requests.get(f'{BASE}/order/check?order_id={order_id}', headers=HEADERS).json()
    if check['data'].get('otp_code'):
        print(f"OTP: {check['data']['otp_code']}")
        requests.post(f'{BASE}/order/finish', json={'order_id': order_id}, headers=HEADERS)
        print('Done!')
        break
    print(f"Waiting... ({check['data']['status']})")
else:
    print('Timeout - cancel order')
    requests.post(f'{BASE}/order/cancel', json={'order_id': order_id}, headers=HEADERS)
import requests, time

API_KEY = 'otpzap_live_YOUR_API_KEY_HERE'
BASE    = 'https://otpzap.com/api/v1'
HEADERS = {'Authorization': f'Bearer {API_KEY}'}

# 1. Look up WhatsApp Indonesia product
products = requests.get(f'{BASE}/products?platform_id=1&country_id=7', headers=HEADERS).json()
product_id = products['data']['products'][0]['id']
print(f'Product ID: {product_id}')

# 2. Create order
order = requests.post(f'{BASE}/order/create', json={
    'server': 1, 'product_id': product_id,
    'country_id': 7, 'platform_id': 1
}, headers=HEADERS).json()
order_id = order['data']['order_id']
phone = order['data']['phone']
print(f'Number: {phone} (Order #{order_id})')

# 3. Poll for OTP (max 2 min)
for _ in range(24):
    time.sleep(5)
    check = requests.get(f'{BASE}/order/check?order_id={order_id}', headers=HEADERS).json()
    if check['data'].get('otp_code'):
        print(f"OTP: {check['data']['otp_code']}")
        requests.post(f'{BASE}/order/finish', json={'order_id': order_id}, headers=HEADERS)
        print('Done!')
        break
    print(f"Waiting... ({check['data']['status']})")
else:
    print('Timeout - cancel order')
    requests.post(f'{BASE}/order/cancel', json={'order_id': order_id}, headers=HEADERS)
    API Keys Kamu
    Max 5 active keys.
    Belum ada API key.
    Info Koneksi
    BASE URL
    https://otpzap.com/api/v1
    AUTHENTICATION
    Authorization: Bearer otpzap_live_xxxxxxxx...
    RATE LIMIT
    300 request / menit per API key
    Server 1
    Server 2
    Order Management
    Konfigurasi Webhook
    OTPZap kirim POST.
    URL wajib HTTPS dan harus mengarah ke alamat publik. URL yang me-resolve ke IP private (10.x, 172.16-31.x, 192.168.x), loopback (127.x), atau link-local (169.254.x) akan ditolak - perlindungan SSRF.
    Events:
    order.otp_received - OTP berhasil diterima
    order.cancelled - Order dibatalkan & saldo refund
    order.finished - Order selesai
    order.replaced - Order Server 1 diganti dengan nomor baru
    deposit.success - Deposit berhasil (saldo masuk)
    Verifikasi Signature
    Verifikasi webhook di sisi server kamu dengan HMAC-SHA256:
    // PHP
    $body = file_get_contents('php://input');
    $expected = 'sha256=' . hash_hmac('sha256', $body, YOUR_SECRET);
    if (!hash_equals($expected, $_SERVER['HTTP_X_OTPZAP_SIGNATURE'])) die('Invalid');
    
    // Node.js
    const expected = 'sha256=' + crypto.createHmac('sha256', YOUR_SECRET).update(rawBody).digest('hex');
    if (req.headers['x-otpzap-signature'] !== expected) return res.status(401).end();
    Request Logs
    Belum ada request.