Pengenalan
REST API berbasis JSON. Semua transaksi dibayar dari saldo merchant (model prabayar — deposit dulu, baru bisa transaksi). Daftar di dashboard untuk dapat API key.
Base URL
https://velian.my.id/api/v1Alur H2H (Host-to-Host)
Integrasi langsung server-ke-server. Sistem kamu nembak endpoint Velian, kami yang teruskan ke sumber & balikin hasilnya. Buat sistem kamu, Velian adalah provider utamanya — sumber asli sepenuhnya disembunyikan (white-label). Alurnya:
Deposit saldo
Model prabayar. Top-up saldo dulu (dashboard atau POST /v1/deposit).
Ambil katalog
GET katalog PPOB / SMM / OTP / produk. Tiap item punya kode SKU Velian — SKU/ID provider asli tidak pernah muncul.
Buat order
POST /v1/order pakai sku + ref (idempotency key milik kamu). Saldo terpotong otomatis sesuai harga role kamu.
Pantau status
Poll GET /v1/order/{ref}, atau pasang callback_url buat terima notifikasi perubahan status (webhook).
Server 1 untuk OTP). Tidak ada nama/kode provider asli — tak ada yang bisa menebak kamu integrasi ke siapa.Autentikasi
Kirim API key lewat header Authorization. Selain itu, daftarkan IP whitelist di dashboard — request dari IP di luar daftar akan ditolak (403 ip_not_allowed).
curl https://velian.my.id/api/v1/ping \ -H "Authorization: Bearer vel_live_xxxxxxxx"
Format Response
Semua response JSON pakai envelope berikut:
// Sukses
{ "ok": true, "data": { ... } }
// Gagal
{ "ok": false, "error": "pesan", "code": "machine_code" }Endpoint list menaruh array di dalam data dengan nama field-nya — bukan array langsung. Contoh katalog & status:
// GET /v1/ppob/products → array ada di data.products
{ "ok": true, "data": { "tier": 1, "count": 2, "products": [
{ "sku": "MLID10", "name": "Mobile Legends 10 Diamond", "price": 2750, "brand": "MOBILE LEGENDS", "stock": 0, "unlimited_stock": true }
] } }
// /v1/smm/services → data.services[] | /v1/products → data.products[].variants[]
// /v1/orders → data.orders[]
// GET /v1/order/{ref} → objek tunggal di data.order
{ "ok": true, "data": { "order": {
"ref": "trx-0001", "order_id": "PPOB-...", "category": "ppob",
"status": "completed", "price": 2750,
"data": { "sn": "1234-5678", "note": null }
} } }Rate limit: 120 request/menit per merchant (status 429 rate_limited bila terlampaui).
Harga & Tier
Harga dihitung otomatis sesuai role/tier kamu. Makin tinggi role, makin murah. Naik role otomatis saat capai syarat minimal order & volume transaksi. Produk premium milik Velian harganya sama untuk semua role.
Lihat Pricelist Nominal Lengkap
Harga rupiah per role untuk semua produk PPOB, SMM & OTP — bukan persentase.
Role & syarat naik
| Role | Nama | Syarat Naik |
|---|---|---|
| Memuat… | ||
Harga nominal tiap produk per role ada di Pricelist. Role lebih tinggi = harga lebih murah, dan naik otomatis saat capai syarat di atas.
Saldo & Deposit
Top-up saldo lewat dashboard, atau via API (dapat QRIS). Alur: POST /v1/deposit → tampilkan QR → poll GET /v1/deposit/{deposit_id} tiap beberapa detik. Begitu pembayaran terdeteksi, saldo otomatis bertambah dan status jadi paid. Cek saldo juga bisa via GET /v1/profile.
/v1/depositBuat QRIS top-up saldo. Body: { amount }. Min 10.000. Response: { deposit_id, total_payment, qr_string, status_url, expires_at }.
curl -X POST https://velian.my.id/api/v1/deposit \
-H "Authorization: Bearer vel_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{ "amount": 100000 }'/v1/deposit/{deposit_id}Cek status deposit + deteksi pembayaran. Return: { status, credited, amount, paid_at, balance }. Poll sampai status 'paid'.
curl https://velian.my.id/api/v1/deposit/VEL-DP-xxxxxxxx \ -H "Authorization: Bearer vel_live_xxxxxxxx"
Daftar Endpoint
/v1/pingCek koneksi & validitas API key. Return info merchant + tier.
/v1/profileSaldo, tier, markup aktif, statistik, progress naik tier.
/v1/ppob/productsDaftar produk PPOB (pulsa, token PLN, dll) + harga tier. Query: ?brand= &category= &search=
/v1/smm/servicesDaftar layanan SMM + rate per 1000 sesuai tier. Query: ?platform=
/v1/otp/servicesDaftar layanan OTP (Telegram, WhatsApp, dll).
/v1/otp/countries?service=tgDaftar negara + offer 'Server N' (tiap offer = satu sku) + harga sesuai role. Provider asli disembunyikan.
/v1/productsDaftar produk premium milik Velian (akun, dll).
/v1/ordersRiwayat order. Query: ?limit=
/v1/depositBuat QRIS top-up saldo. Body: { amount }. Min 10.000.
/v1/deposit/{deposit_id}Cek status deposit + deteksi pembayaran. Poll sampai status 'paid'; saldo bertambah otomatis.
Buat Order
POST /v1/order. Field category menentukan jenis, dan ref adalah idempotency key milik kamu — kirim ulang dengan ref sama tidak akan double-charge.
sku kode simpel (mis. MLID10) yang kamu dapat dari endpoint katalog (/v1/ppob/products, /v1/smm/services, /v1/otp/countries, /v1/products). Backend yang format request ke sumber — kamu nggak perlu tahu kode/SKU asli sumbernya.curl -X POST https://velian.my.id/api/v1/order \
-H "Authorization: Bearer vel_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"category": "ppob",
"ref": "trx-0001",
"sku": "MLID10",
"customer_no": "081234567890"
}'Field per kategori
| category | Field wajib |
|---|---|
| ppob | ref, sku, customer_no |
| smm | ref, sku, target, quantity |
| otp | ref, sku |
| product | ref, sku, quantity? |
Contoh order OTP (cukup sku)
{
"category": "otp",
"ref": "otp-0001", // idempotency key kamu
"sku": "OTPTGID" // dari /v1/otp/countries (Server N)
}Produk premium dikirim sinkron — isi (akun/email) ada di data.content pada response. PPOB/SMM/OTP diproses async; cek hasil via endpoint status.
Cek Status Order
/v1/order/{ref}Cek status order. {ref} bisa berupa idempotency key kamu atau order_id Velian.
curl https://velian.my.id/api/v1/order/trx-0001 \ -H "Authorization: Bearer vel_live_xxxxxxxx"
Untuk OTP, kode masuk ada di data.otp_code; PPOB serial number di data.sn.
Error Codes
| HTTP | code | Arti |
|---|---|---|
| 401 | unauthorized | API key salah/tidak ada |
| 403 | ip_not_allowed | IP tidak ada di whitelist |
| 403 | forbidden | Merchant suspended |
| 402 | insufficient_balance | Saldo kurang |
| 404 | not_found | Produk/order tidak ada |
| 400 | invalid_request | Body/parameter salah |
| 429 | rate_limited | Terlalu banyak request |
| 503 | upstream_error | Provider/gateway sedang gangguan |
