Halo,
Selamat datang di OTPZap
Supaya kamu langsung tahu saat OTP masuk, deposit berhasil, atau saldo dikembalikan - bahkan saat tab tidak aktif.
Kamu login lewat Telegram. Punya akun email juga? Hubungkan di Pengaturan → Telegram supaya saldo & riwayat jadi satu.
Terima kode OTP langsung di chat Telegram kamu. Ga perlu buka dashboard.
Saldo dipakai untuk order OTP dari web, Telegram, dan API. Refund, deposit, promo, dan bonus otomatis tersinkron ke riwayat saldo.
Order Terbaru
Deposit Saldo
Top up saldo, pantau pembayaran, dan klaim promo dari satu halaman.
SMS
Pilih server, layanan, varian harga, lalu pantau OTP SMS secara realtime.
Pilih site & domain, lalu pantau email masuk secara realtime.
Buka detail order untuk baca email lengkap.
Riwayat Order
Lihat transaksi order dan deposit lengkap dengan status terakhir.
Program Referral
Ajak teman, dapat bonus saldo otomatis dari setiap top up mereka.
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
Berikut perhitungan bonus berdasarkan persentase :
| Jumlah Top Up | Bonus Didapat | % |
|---|---|---|
Riwayat Bonus
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.
- Logout dari akun ini
- Login atau daftar pakai Gmail di OTPZap
- Di akun Gmail → Pengaturan → Hubungkan Telegram
Login & Keamanan
Kelola cara masuk: Google dan password manual.
Password sudah aktif. Ubah lewat form profil di atas.
Belum ada password. Set supaya bisa login pakai email + password.
Preferensi Notifikasi
Keamanan Akun
● Notifikasi Push
Aktifkan agar Anda menerima notifikasi langsung saat OTP masuk atau pembayaran berhasil - bahkan ketika tab tidak aktif.
Mau pakai Gmail sebagai akun utama?
Notifikasi Telegram
Terima OTP langsung di Telegram.
Belum terhubung ke Telegram.
Sesi Aktif
Device yang sedang login pakai akun kamu. Klik Revoke kalau ada yang ga kamu kenal.
Riwayat Saldo
Semua mutasi saldo, debit order, refund, bonus, dan deposit tercatat di sini.
Informasi
Pengumuman, promo, dan update layanan terbaru dari OTPZap.
Beri Review
Bagikan pengalaman kamu pakai OTPZap. Review yang disetujui akan tampil di homepage.
Lakukan minimal 1 order berhasil untuk dapat memberikan review.
Review kamu sedang ditinjau admin. Akan tampil di homepage setelah disetujui.
Kamu bisa edit & submit ulang di bawah.
✨ Bonus Rp 1.000 saldo otomatis dikreditkan kalau review disetujui admin
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.
Membatalkan pesanan kalau OTP tidak masuk atau berubah pikiran. Saldo dikembalikan penuh ke akun. Cooldown 2 menit setelah order baru bisa cancel.
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.
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).
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).
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.
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?
Nomor sudah aktif, sedang menunggu OTP masuk. Cancel bisa dilakukan setelah cooldown 2 menit.
OTP sudah masuk! Khusus Server 1, nomor masih aktif untuk terima OTP berikutnya kalau perlu.
Order selesai dengan sukses. Dipakai juga kalau nomor sudah expired tapi sudah pernah terima OTP.
Pesanan dibatalkan oleh kamu. Saldo otomatis dikembalikan ke akun.
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
Authorization: Bearer otpzap_live_xxxxxxxxxxxxxxxx
/countries
/services?country_id=7
/products?platform_id=1&country_id=7
/order/create
/order/check?order_id=XX
/order/finish
/s2/countries
/s2/services?country_id=7
/s2/operators?country_id=7
/order/create
/order/check?order_id=XX
/order/finish
<?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);
?>
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)
order.otp_received - OTP berhasil diterimaorder.cancelled - Order dibatalkan & saldo refundorder.finished - Order selesaiorder.replaced - Order Server 1 diganti dengan nomor barudeposit.success - Deposit berhasil (saldo masuk)// 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();