Top up game dan PPOB, nomor OTP, suntik sosmed, cek ID game, dan payment gateway. Semua lewat REST JSON dengan satu akun.
Base URL
https://arbakti.id
Header auth
x-apikey: ARB-xxx
IP Anda
…
Format
JSON · HTTPS
1
Buat API key
Masuk, buka Akun → API, lalu buat key dengan akses layanan yang dibutuhkan.
2
Daftarkan IP server
Masukkan IP server Anda ke whitelist. Perubahan aktif setelah disetujui admin.
3
Panggil /whoami
Kalau keluar username dan saldo Anda, key dan whitelist sudah benar.
Autentikasi
Kirim API key di header x-apikey. Parameter apikey di query string atau body JSON juga diterima, tapi header lebih aman karena tidak tercatat di log URL.
Setiap request dicek dari IP pemanggilnya. IP yang tidak ada di whitelist akun ditolak dengan HTTP 403, walaupun key-nya benar.
Satu akun bisa punya sampai 5 key. Tiap key hanya bisa memanggil layanan yang dicentang saat dibuat:
Akses
Layanan
topup
Akun, top up & PPOB, validasi pelanggan, deposit saldo.
otp
OTP / nomor virtual.
sosmed
Suntik sosmed.
macro
Payment Gateway Custom (/payment/*).
gopay
PG GoPay Merchant (/payment/gopay/*).
bridge
Payment Gateway Otomatis (/v1/*).
rest
REST API (/api/v3/*): AI, downloader, stalker, tools, dan lainnya.
idgame
Cek ID Game (/list-game, /api/game/*).
tmail
Tmail, email sementara (/api/v1/tmail/*).
cdn
CDN, upload dan kelola file (/api/v1/cdn/*).
am
Aktivasi AM Premium (/api/v1/am/*).
Rate limit dihitung per akun per menit. /products di top up dan semua endpoint OTP, sosmed, dan /whoami ikut dihitung. Melewatinya menghasilkan HTTP 429.
Top up, OTP, dan sosmed membalas { status, msg, data }. status: false berarti gagal dan msg berisi alasannya. Payment Gateway Custom memakai { success, message, data }, dan Payment Gateway Otomatis memakai { error: { code, message }, request_id }.
HTTP
Arti
200 / 201
Berhasil. Tetap cek field status / success, karena sebagian provider membalas 200 untuk hasil gagal.
400
Parameter salah atau aturan bisnis ditolak (saldo kurang, ref_id dipakai).
401
API key kosong atau salah.
403
IP belum di-whitelist, atau key tidak punya akses ke layanan itu.
404
Data tidak ditemukan atau bukan milik Anda.
422
Tipe parameter salah (OTP dan sosmed).
429
Melewati rate limit. Tunggu sampai jendela menit berikutnya; untuk REST API, kuota harian habis dan reset 00:00 WIB.
5xx
Gangguan di kami atau provider. Aman diulang dengan ref_id yang sama, lalu cek status.
Kode error Payment Gateway Otomatis
Code
HTTP
Arti
UNAUTHORIZED
401
API key salah atau tanpa akses bridge.
IP_NOT_WHITELISTED
403
IP belum ada di whitelist akun.
ACCOUNT_BLOCKED
403
Belum disetujui atau dinonaktifkan.
VALIDATION_ERROR
400
Parameter salah, lihat message.
AMOUNT_TOO_SMALL
400
Nominal di bawah minimum.
INSUFFICIENT_TENANT_BALANCE
400
Saldo tidak cukup.
BANK_ACCOUNT_NOT_SET
400
Rekening belum disetujui.
WITHDRAW_FROZEN
400
Withdraw ditahan sementara setelah ganti rekening.
CHANNEL_UNAVAILABLE
503
Channel sedang tidak aktif.
TRY_AGAIN_LATER
503
Terlalu banyak request.
UPSTREAM_TIMEOUT
502
Masih diproses. Ulangi dengan reference_id yang sama.
INTERNAL_ERROR
500
Kesalahan di kami. Sertakan request_id saat menghubungi CS.
Bentuk error
{
"status": false,
"msg": "Insufficient balance or user not found"
}
Akses: topup
Akun
Cek saldo, identitas key, dan atur callback URL. Profil dan rotasi key butuh akses topup.
GET/api/v1/status
Status server
Health check publik, tanpa API key. Field ip berisi IP Anda seperti yang kami lihat: IP inilah yang harus masuk whitelist.
Produk prabayar (game, pulsa, data, token) dan pascabayar (tagihan PLN dan lainnya). Saldo terpotong saat order dibuat dan otomatis kembali kalau transaksi gagal.
GET/api/v1/products
Daftar produk
Produk yang sedang dijual. price sudah disesuaikan dengan role akun Anda.
x-apikey
Endpoint ini kena rate limit per akun. Simpan hasilnya di sisi Anda, jangan dipanggil per order.
Parameter
categorystring
Filter kategori, mis. Games.
brandstring
Filter brand, mis. FREE FIRE.
keywordstring
Cari di nama produk.
typestring
prepaid atau pasca.
modestring
Varian produk, mis. Umum atau Membership.
Request
curl -X GET "https://arbakti.id/api/v1/products?category=Games&brand=FREE+FIRE" \
-H "x-apikey: ARB-xxx"
Sewa nomor untuk menerima SMS OTP. Alurnya: services → countries → operators → order, lalu tunggu webhook otp.received atau cek order sampai kode masuk.
GET/api/v1/otp/services
Daftar aplikasi
Aplikasi yang nomornya bisa disewa.
x-apikey
Request
curl -X GET "https://arbakti.id/api/v1/otp/services" \
-H "x-apikey: ARB-xxx"
Cek nickname dari ID game. Wajib API key dengan akses idgame, IP harus di-whitelist, dan rate limit mengikuti akun. Alurnya: list-game → (get-zone) → cek ID.
GET/list-game
Daftar game
Semua game yang bisa dicek. Pakai slug sebagai :game. Kalau hasZoneId: true, parameter zone wajib.
x-apikey
Request
curl -X GET "https://arbakti.id/list-game" \
-H "x-apikey: ARB-xxx"
Email sementara untuk menerima kode verifikasi atau uji coba. Wajib API key dengan akses tmail, IP harus di-whitelist, dan rate limit mengikuti akun. Alurnya: create → simpan token → cek messages sampai email masuk. Semua endpoint inbox butuh header x-tmail-token berisi token itu.
GET/api/v1/tmail/domains
Daftar domain
Domain yang bisa dipakai saat membuat email.
x-apikey
Request
curl -X GET "https://arbakti.id/api/v1/tmail/domains" \
-H "x-apikey: ARB-xxx"
Response
{
"status": true,
"data": [
"uberip.com"
]
}
POST/api/v1/tmail/create
Buat email
Membuat alamat email baru dan langsung login. Semua field opsional; yang kosong diisi acak.
x-apikey
Simpan token untuk membaca inbox, dan password untuk mengambil token baru lewat /tmail/login.
Parameter
usernamestring
Bagian sebelum @. 3–32 karakter: huruf, angka, ., _, -.
domainstring
Salah satu dari /tmail/domains. Default domain pertama.
Daftar email masuk, terbaru di atas. 30 email per halaman.
x-apikey
Cek berkala (mis. tiap 5–10 detik) sampai email yang ditunggu muncul.
price adalah biaya per pesan masuk. Kalau lebih dari 0, tiap pesan dipotong sekali dari saldo saat pertama kali muncul. Pesan yang belum terbayar karena saldo kurang datang dengan locked: true serta subject dan intro kosong.
Upload gambar atau video ke CDN dan dapatkan link publiknya. Wajib API key dengan akses cdn, IP harus di-whitelist, dan rate limit mengikuti akun. Biaya upload dipotong dari saldo; besarnya bisa dilihat di halaman CDN.
POST/api/v1/cdn/media
Upload file
Mengunggah satu file sebagai multipart/form-data. Gambar PNG, JPG, WEBP, GIF, atau AVIF maksimal 2 MB; video MP4, MOV, atau WEBM maksimal 100 MB.
x-apikey
price adalah biaya yang dipotong untuk upload ini. Kalau saldo kurang, file tidak diunggah.
Aktivasi premium 1 tahun untuk akun aplikasi pembeli dalam dua langkah: kirim magic link ke email pembeli, lalu verifikasi link yang dia tempel balik. Wajib API key dengan akses am, IP harus di-whitelist, dan rate limit mengikuti akun. Biaya per aktivasi dipotong dari saldo; besarnya bisa dilihat di halaman Aktivasi AM Premium.
POST/api/v1/am/send-link
Kirim magic link
Mengirim link masuk ke email pembeli. Pembeli menyalin link itu dari emailnya, jangan diklik, lalu Anda kirim ke /am/verify.
x-apikey
Belum ada saldo yang dipotong di langkah ini. Kalau saldo kurang dari biaya aktivasi, link tidak dikirim (402).
Memverifikasi magic link lalu mengaktifkan premium 1 tahun.
x-apikey
Saldo hanya dipotong kalau status = ACTIVE. Kalau login berhasil tapi aktivasi gagal (INACTIVE), saldo tidak dipotong. Simpan refreshToken untuk mencoba lagi lewat /am/refresh.
Verifikasi ulang untuk orderId yang sama tidak dipotong dua kali.
Terima QRIS, e-wallet, dan transfer bank langsung ke rekening Anda. Pembayaran terdeteksi dari notifikasi aplikasi di HP Anda. Semua request mengirim apikey di body. Format response: { success, message, data }.
POST/payment/list
Daftar metode
Metode pembayaran aktif milik Anda, dikelompokkan per kategori. maxAmount: 0 berarti tanpa batas atas.
Nominal akhir = amount + biaya + angka unik 1–499. Tagihan berlaku 15 menit.
Tampilkan paymentUrl ke pembeli, atau tampilkan sendiri data pembayarannya. Tunggu webhook payment.success.
Kalau admin memasang biaya layanan per transaksi, biaya itu dipotong dari saldo akun Arbakti saat transaksi sukses. Transaksi baru ditolak (402) selama saldo kurang dari biaya tersebut.
Parameter
apikeystringwajib
API key dengan akses Payment Gateway Custom.
actionstringwajib
Isi create.
amountnumberwajib
Nominal dasar sebelum biaya.
paymentMethodstringwajib
id metode dari /payment/list.
descriptionstring
Keterangan transaksi.
callbackUrlstring
URL HTTPS penerima webhook tagihan ini. Kosong berarti memakai callback URL akun.
Instruksi transfer ke akun e-wallet Anda dengan nominal unik.
apikey di body
Nominal akhir = amount + biaya + angka unik 1–499. Tagihan berlaku 15 menit.
Tampilkan paymentUrl ke pembeli, atau tampilkan sendiri data pembayarannya. Tunggu webhook payment.success.
Kalau admin memasang biaya layanan per transaksi, biaya itu dipotong dari saldo akun Arbakti saat transaksi sukses. Transaksi baru ditolak (402) selama saldo kurang dari biaya tersebut.
Parameter
apikeystringwajib
API key dengan akses Payment Gateway Custom.
actionstringwajib
Isi create.
amountnumberwajib
Nominal dasar sebelum biaya.
paymentMethodstringwajib
id metode dari /payment/list.
descriptionstring
Keterangan transaksi.
callbackUrlstring
URL HTTPS penerima webhook tagihan ini. Kosong berarti memakai callback URL akun.
Instruksi transfer ke rekening Anda dengan nominal unik.
apikey di body
Nominal akhir = amount + biaya + angka unik 1–499. Tagihan berlaku 15 menit.
Tampilkan paymentUrl ke pembeli, atau tampilkan sendiri data pembayarannya. Tunggu webhook payment.success.
Kalau admin memasang biaya layanan per transaksi, biaya itu dipotong dari saldo akun Arbakti saat transaksi sukses. Transaksi baru ditolak (402) selama saldo kurang dari biaya tersebut.
Parameter
apikeystringwajib
API key dengan akses Payment Gateway Custom.
actionstringwajib
Isi create.
amountnumberwajib
Nominal dasar sebelum biaya.
paymentMethodstringwajib
id metode dari /payment/list.
descriptionstring
Keterangan transaksi.
callbackUrlstring
URL HTTPS penerima webhook tagihan ini. Kosong berarti memakai callback URL akun.
Saat tagihan berubah final, kami kirim POST JSON ke callbackUrl tagihan itu, atau ke callback URL akun kalau kosong. Header, signature HMAC, dan jadwal retry sama dengan webhook lain.
Event
Kapan dikirim
payment.success
Pembayaran terdeteksi, atau ditandai sukses dari dashboard.
payment.failed
Tagihan kedaluwarsa (15 menit), atau ditandai gagal/dibatalkan. Kalau transfer terlambat masuk, tagihan masih bisa jadi sukses dan payment.success menyusul.
sign = md5(transactionId + status + apikey), dengan apikey yang dipakai saat membuat tagihan. Tetap cocokkan amount dengan pesanan Anda sebelum mengirim barang.
QRIS dinamis dari GoPay Merchant Anda sendiri, uang pembeli langsung masuk ke GoPay Anda. Hubungkan akun dan isi QRIS statis dulu di halaman PG GoPay Merchant. Semua request mengirim apikey di body. Format response: { success, data } atau { success: false, message }.
Risiko ditanggung sendiri. Layanan ini membaca riwayat transaksi langsung dari akun GoBiz Anda dan bukan integrasi resmi dari GoPay. Akun bisa dibatasi, diblokir, atau berhenti terbaca kalau GoPay mengubah sistemnya. Kerugian yang timbul, termasuk pembayaran yang tidak terdeteksi, menjadi tanggung jawab Anda.
POST/payment/gopay/create
Buat QRIS
QRIS dinamis dengan nominal yang sudah terisi. Tampilkan qr_string sebagai gambar QR ke pembeli.
apikey di body
Nominal akhir sama dengan amount. Kalau di GoPay Merchant Anda sudah ada QRIS aktif dengan nominal yang sama, nominalnya dinaikkan Rp1 sampai tidak bentrok (10000 → 10001). Pembeli wajib membayar tepat sebesar amount di response. QRIS berlaku 15 menit.
Kalau admin memasang biaya per QRIS, biaya itu dipotong dari saldo akun Arbakti setiap QRIS dibuat, dibayar atau tidak. QRIS baru ditolak (402) selama saldo kurang dari biaya tersebut.
Pembayaran dicek ke GoPay setiap beberapa detik. Tunggu webhook gopay.success atau gopay.expired di callback URL akun, atau cek lewat endpoint status.
Parameter
apikeystringwajib
API key dengan akses PG GoPay Merchant.
amountnumberwajib
Nominal dasar, bilangan bulat 1–10.000.000.
descriptionstring
Keterangan transaksi, maksimal 200 karakter.
callbackUrlstring
URL HTTPS penerima webhook QRIS ini. Kosong berarti memakai callback URL akun.
Status: pending menunggu bayar, paid dibayar, expired lewat 15 menit. Hanya paid yang final: pembayaran yang terlambat tercatat di GoPay masih bisa mengubah expired menjadi paid.
Dikirim ke callback URL akun Anda (Akun → Webhook), atau ke callbackUrl QRIS itu kalau diisi. Header, signature HMAC, dan jadwal retry sama dengan webhook lain.
Event
Kapan dikirim
gopay.success
Pembayaran QRIS terdeteksi di GoPay Merchant Anda. Kalau GoPay terlambat mencatat pembayaran, event ini bisa datang setelah gopay.expired.
gopay.expired
QRIS tidak dibayar dalam 15 menit.
sign = md5(transactionId + status + apikey), dengan apikey yang dipakai saat membuat QRIS. Tetap cocokkan amount dengan pesanan Anda sebelum mengirim barang.
QRIS, virtual account, e-wallet, dan gerai retail. Dana masuk ke saldo Payment Gateway Otomatis Anda dan bisa ditarik ke rekening. Daftar dulu di halaman Payment Gateway Otomatis dan tunggu persetujuan admin. Kirim API key di header x-api-key. Error berformat { error: { code, message }, request_id }.
GET/v1/payment-channels
Daftar channel
Channel yang tersedia. Buat tagihan hanya di channel dengan active: true.
x-api-key
Request
curl -X GET "https://arbakti.id/v1/payment-channels" \
-H "x-api-key: ARB-xxx"
Kumpulan endpoint utilitas: AI, downloader, stalker, canvas, tools, dan lainnya. Pakai API key dengan akses rest. Kuota dihitung per hari (reset 00:00 WIB) dan besarnya mengikuti level akun. Endpoint bertanda Premium hanya untuk level tertentu.
GET/api/v3/stats
Kuota & statistik
Sisa kuota hari ini dan pemakaian API key Anda per hari dan per endpoint. Tidak memotong kuota.
x-apikey
Parameter
daysinteger
Rentang statistik, 1–90. Default 7.
Request
curl -X GET "https://arbakti.id/api/v3/stats?days=7" \
-H "x-apikey: ARB-xxx"
Kami mengirim POST JSON ke callback URL akun Anda (wajib HTTPS) setiap kali pesanan mencapai status penting. Atur URL dan signing secret di Akun → Webhook, atau lewat PATCH /api/v1/profile/callback-url. Hanya pesanan lewat API dan akun yang dikirimi webhook.
IP pengirim
Semua webhook dikirim dari IP publik server kami di bawah. Kalau endpoint Anda memakai firewall, whitelist IP ini supaya webhook tidak tertolak.
Tetap verifikasi signature. IP bisa berubah kalau server dipindah, dan halaman ini selalu menampilkan IP terbaru.
IP server
Memuat…
Daftar event
Nama event ada di header X-Arbakti-Event. Untuk OTP, sosmed, dan deposit, nama event juga ada di field event pada body.
Event
Layanan
Kapan dikirim
order.success
Top up
Transaksi sukses (ada sn).
order.failed
Top up
Transaksi gagal; saldo sudah dikembalikan.
otp.received
OTP
Kode masuk. Bisa terkirim lagi dengan kode baru setelah resend.
otp.completed
OTP
Order ditandai selesai (done).
otp.canceled
OTP
Order batal atau kedaluwarsa. refunded: true kalau saldo dikembalikan.
sosmed.success
Sosmed
Pesanan terkirim penuh.
sosmed.partial
Sosmed
Hanya sebagian terkirim; lihat remains.
sosmed.failed
Sosmed
Pesanan gagal di provider.
deposit.success
Deposit
Deposit dibayar dan saldo sudah bertambah.
deposit.expired
Deposit
Deposit tidak dibayar sampai kedaluwarsa.
payment.success
PG Custom
Tagihan PG Custom dibayar.
payment.failed
PG Custom
Tagihan PG Custom kedaluwarsa, gagal, atau dibatalkan.
gopay.success
PG GoPay
QRIS PG GoPay dibayar. Bisa menyusul setelah gopay.expired kalau pembayaran terlambat tercatat di GoPay.
gopay.expired
PG GoPay
QRIS PG GoPay tidak dibayar dalam 15 menit.
payment.succeeded
PG Otomatis
Tagihan PG Otomatis dibayar.
payment.expired
PG Otomatis
Tagihan PG Otomatis kedaluwarsa.
payment.settled
PG Otomatis
Dana cair ke saldo yang bisa ditarik.
withdrawal.succeeded
PG Otomatis
Withdraw sampai di rekening.
withdrawal.failed
PG Otomatis
Withdraw gagal; saldo dikembalikan.
Contoh payload
Body OTP dan sosmed sama dengan data pada endpoint cek order, ditambah event dan sign. Pada deposit, ref_id adalah refId yang Anda terima saat membuat deposit. Body top up memakai format lama tanpa field event.
X-Arbakti-Timestamp dan X-Arbakti-Signature hanya dikirim kalau akun Anda punya signing secret.
Hitung dari raw body, bukan dari hasil JSON.parse yang di-stringify ulang. Bandingkan dengan constant-time compare, dan tolak timestamp yang lebih tua dari 5 menit.
Tanpa secret, cocokkan field sign di body: md5(ref_id + status + apikey).
Verifikasi
import crypto from "crypto";
import express from "express";
const app = express();
// Raw body wajib: signature dihitung dari byte persis yang kami kirim.
app.post("/webhook/arbakti", express.raw({ type: "application/json" }), (req, res) => {
const ts = req.get("X-Arbakti-Timestamp");
const sig = req.get("X-Arbakti-Signature") || "";
const expected = "sha256=" + crypto
.createHmac("sha256", process.env.ARBAKTI_WEBHOOK_SECRET)
.update(`${ts}.${req.body}`)
.digest("hex");
const fresh = Math.abs(Date.now() / 1000 - Number(ts)) < 300;
const valid = sig.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected));
if (!fresh || !valid) return res.sendStatus(401);
const event = req.get("X-Arbakti-Event");
const data = JSON.parse(req.body);
// Simpan ref_id + event untuk menolak kiriman ganda, lalu proses.
res.sendStatus(200);
});
Retry & balasan
Balas dengan status 2xx dalam 10 detik. Isi balasan tidak dibaca.
Selain 2xx, timeout, atau koneksi gagal dianggap gagal dan dikirim ulang setelah 30 detik, 2 menit, 10 menit, 1 jam, dan 6 jam. Setelah itu berhenti.
Satu event bisa sampai lebih dari sekali. Pakai ref_id + event (dan otp_code untuk otp.received) untuk menolak duplikat.
Urutan kiriman tidak dijamin saat ada retry. Jadikan status di body sebagai acuan, atau cek ulang lewat endpoint cek order.