Integrasikan layanan SpeedOTP ke aplikasi atau bot kamu.
API Key tersedia di halaman Profil setelah kamu login. Setiap akun memiliki API Key unik yang bisa di-reset kapan saja.
https://speedotp.web.id/api/v1
Sertakan Authorization: Bearer {api_key} di setiap request.
Setiap request wajib menyertakan API Key melalui header Authorization. Bisa juga via query param ?api_key=.
Authorization: Bearer YOUR_API_KEY_HERE
Jangan pernah membagikan API Key ke siapapun.
/api/v1/balance
Mengambil informasi saldo akun yang terikat dengan API key.
GET /api/v1/balance Authorization: Bearer YOUR_API_KEY
{
"success": true,
"message": "OK",
"data": {
"balance": 50000,
"balance_display": "Rp 50.000"
}
}
/api/v1/services
Mengambil daftar semua layanan yang tersedia.
GET /api/v1/services Authorization: Bearer YOUR_API_KEY
{
"success": true,
"data": [
{
"service_code": 1,
"service_name": "WhatsApp"
}
]
}
/api/v1/countries/{service_code}
Mengambil daftar negara dan harga tersedia untuk suatu layanan.
{service_code}
Integer
Wajib
Kode layanan dari /services (di URL path)
GET /api/v1/countries/1 Authorization: Bearer YOUR_API_KEY
{
"success": true,
"data": [
{
"name": "Indonesia",
"number_id": 101,
"pricelist": [
{
"price": 2460,
"invoice_id": "RO",
"operator_id": 5,
"stock": 10
}
]
}
]
}
/api/v1/operators
Mengambil daftar operator yang tersedia untuk kombinasi negara tertentu.
country
String
Wajib
Nama negara dari /countries (query string)
invoice_id
String
Wajib
invoice_id dari pricelist /countries (query string)
GET /api/v1/operators?country=Indonesia&invoice_id=RO Authorization: Bearer YOUR_API_KEY
{
"success": true,
"data": [
{
"operator_id": 5,
"name": "Telkomsel",
"price": 2050
}
]
}
/api/v1/order/create
Membuat order OTP baru. Saldo langsung terpotong. Simpan order_id untuk polling status.
service_code
Integer
Wajib
Kode layanan dari /services
number_id
Integer
Wajib
ID nomor dari /countries
invoice_id
String
Wajib
invoice_id dari pricelist /countries
operator_id
Integer
Wajib
ID operator dari /operators
POST /api/v1/order/create
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"service_code": 1,
"number_id": 101,
"invoice_id": "RO",
"operator_id": 5
}
{
"success": true,
"message": "Order berhasil dibuat.",
"data": {
"order_id": "RO0004690696",
"phone_number": "+62831xxxxxxx",
"service_name": "WhatsApp",
"country": "Indonesia",
"price": 2460,
"expired_at": "2026-06-01 10:15:00",
"status": "received"
}
}
/api/v1/order/status/{order_id}
Cek status order secara berkala (polling ringan). Gunakan endpoint ini untuk menunggu OTP masuk.
{order_id}
String
Wajib
ID order dari response /order/create
GET /api/v1/order/status/RO0004690696 Authorization: Bearer YOUR_API_KEY
{
"success": true,
"data": {
"order_id": "RO0004690696",
"status": "completed",
"status_label": "completed",
"otp_code": "441613",
"otp_msg": "Kode verifikasi kamu: 441613",
"expired_at": "2026-06-01 10:25:00"
}
}
/api/v1/order/check/{order_id}
Mengambil detail lengkap order beserta OTP jika sudah masuk.
{order_id}
String
Wajib
ID order
GET /api/v1/order/check/RO0004690696 Authorization: Bearer YOUR_API_KEY
{
"success": true,
"data": {
"order_id": "RO0004690696",
"service_name": "WhatsApp",
"country": "Indonesia",
"operator": "Telkomsel",
"phone_number": "+62831xxxxxxx",
"price": 2460,
"status": "completed",
"status_label": "completed",
"otp_code": "441613",
"otp_msg": "Kode verifikasi kamu: 441613",
"expired_at": "2026-06-01 10:25:00",
"created_at": "2026-06-01 10:05:00"
}
}
/api/v1/order/cancel/{order_id}
Membatalkan order yang masih aktif. Saldo dikembalikan otomatis.
{order_id}
String
Wajib
ID order yang dibatalkan
POST /api/v1/order/cancel/RO0004690696 Authorization: Bearer YOUR_API_KEY
{
"success": true,
"message": "Order dibatalkan. Saldo dikembalikan.",
"data": {
"order_id": "RO0004690696",
"refund": 2460,
"new_balance": 52460
}
}
received
Menunggu OTP masuk.
waiting
Menunggu OTP (state alternatif).
expiring
Hampir expired, OTP belum masuk.
completed
OTP diterima. Ambil dari field otp_code.
canceled
Dibatalkan manual.
expired
Kedaluwarsa tanpa OTP. Saldo direfund. (nilai dari status_label)
401
API Key tidak valid atau tidak disertakan.
402
Saldo tidak mencukupi.
403
Akun atau IP diblokir.
404
Order atau layanan tidak ditemukan.
429
Terlalu banyak request. Coba lagi.
500
Kesalahan server. Coba beberapa saat lagi.
502
Gagal terhubung ke sistem OTP. Coba lagi.