API Online
Dokumentasi

Venn Store API

API resmi Venn Store untuk integrasi bot, reseller, dan developer. API order publik dan API PG menggunakan api_key akun yang sama.

Semua member dapat API key gratis. Daftar → Dashboard → API Key → Generate. Langsung bisa dipakai untuk semua endpoint.
Harga otomatis sesuai level akun. Member, Gold, atau Platinum — API mengembalikan harga yang sudah disesuaikan dengan level kamu secara otomatis.
Autentikasi

API Key

Semua endpoint utama menggunakan api_key yang unik per akun. API Key hanya dapat dibuat setelah login / daftar, lalu buka Dashboard → API Key.

Jangan bagikan API key ke orang lain. Kalau bocor, regenerate di Dashboard → API Key. Key lama langsung tidak aktif.
API key tidak bisa dibuat dari halaman publik tanpa akun. Daftar dulu, lalu ambil API key di profil kamu.
Cara penggunaan
# Di query parameter (GET) GET /api/public/saldo?api_key=usr_xxxxxxxxxxxxxx # Di request body (POST) POST /api/public/topup Content-Type: application/json { "api_key": "usr_xxxxxxxxxxxxxx", "sku": "MLBB-86", "tujuan": "12345678|1234" }
Format API Key yang dikeluarkan Venn Store:
usr_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9
Sistem Harga

Level & Harga Reseller

Setiap akun memiliki level yang menentukan harga produk. API otomatis mengembalikan harga sesuai levelmu — tidak perlu hitung manual.

LevelMarginMasa AktifBiaya
👤 Member Standar Selamanya Gratis (default)
⭐ Gold Lebih Murah 30 hari Rp 50.000
💎 Platinum Termurah 30 hari Rp 150.000
Upgrade level dari Dashboard → Upgrade Level. Bayar pakai saldo akun, langsung aktif.
Konfigurasi

Base URL

Production
https://venpay.id/api
Local / Development
http://localhost:5000/api
Format Respons
// Sukses { "status": "success", "data": { ... } } // Error { "status": "error", "message": "Deskripsi masalah" }
5 Endpoint Utama
Semua wajib api_key
GET
/public/layanan
api_key

Ambil semua produk yang tersedia. Harga otomatis sesuai level akunmu. Bisa filter per kategori atau cari nama produk.

Query Parameters
ParameterTipeWajibKeterangan
api_keystringWajibAPI key akunmu
categorystringOpsionalSlug kategori, contoh: mobile-legends-id
searchstringOpsionalCari nama produk
Contoh Request
GET /api/public/layanan?api_key=usr_xxxx&category=mobile-legends-id
Contoh Respons
{ "status": "success", "level": "gold", // level akunmu saat ini "total": 48, "data": [ { "sku": "MLBB-86", "nama": "86 Diamond", "category": "mobile-legends-id", "harga": 21350, // harga sudah sesuai levelmu "status": "available" } ] }
GET
/public/saldo
api_key

Cek saldo akun, level aktif, dan masa aktif level.

Query Parameters
ParameterTipeWajibKeterangan
api_keystringWajibAPI key akunmu
Contoh Request
GET /api/public/saldo?api_key=usr_xxxx
Contoh Respons
{ "status": "success", "data": { "username": "JohnDoe", "saldo": 250000, "level": "gold", "levelExpiresAt": "2026-07-29T00:00:00.000Z" // null kalau member } }
POST
/public/topup
api_key

Buat order top up. Saldo dipotong otomatis sesuai harga level akunmu. Order langsung diproses.

Pastikan saldo cukup sebelum order. Cek dulu dengan endpoint GET /public/saldo dan harga produk dengan GET /public/harga/:sku.
Request Body (JSON)
FieldTipeWajibKeterangan
api_keystringWajibAPI key akunmu
skustringWajibKode produk dari GET /layanan
tujuanstringWajibUser ID / No HP / ID Akun tujuan
nicknamestringOpsionalNama karakter (beberapa game butuh ini)
Contoh Request
POST /api/public/topup Content-Type: application/json { "api_key": "usr_xxxx", "sku": "MLBB-86", "tujuan": "12345678|1234", "nickname": "Player1" }
Contoh Respons Sukses
{ "status": "success", "message": "Order sedang diproses.", "data": { "invoice": "TRX-1718000000000-ABCDEF7", "produk": "86 Diamond", "tujuan": "12345678|1234", "harga": 21350, "level": "gold", "tx_status": "pending" } }
Alur Status Order
pending → Sedang diproses success → Berhasil failed → Gagal
GET
/public/cekstatus/:invoice
api_key

Cek status order berdasarkan nomor invoice. Hanya bisa cek order milik akun sendiri.

Parameter
ParameterTipeWajibKeterangan
:invoicepathWajibNomor invoice dari response topup
api_keyqueryWajibAPI key akunmu
Contoh Request
GET /api/public/cekstatus/TRX-1718000000000-ABCDEF7?api_key=usr_xxxx
Contoh Respons
{ "status": "success", "data": { "invoice": "TRX-1718000000000-ABCDEF7", "produk": "86 Diamond", "tujuan": "12345678|1234", "harga": 21350, "level": "gold", "tx_status": "success", "sn": "SN12345678", // serial number kalau sudah sukses "createdAt": "2026-06-29T10:00:00.000Z", "updatedAt": "2026-06-29T10:01:30.000Z" } }
Akun
API Key & Upgrade Level
Daftar di venpay.id untuk dapatkan API key dan akses semua fitur.
GET
/user/api-key
JWT Bearer

Ambil API key akun kamu setelah login. Kalau belum ada, otomatis di-generate. Gunakan POST /user/api-key/regenerate untuk buat key baru (key lama nonaktif).

Header
Authorization: Bearer eyJhbGci...
Contoh Respons
{ "status": "success", "data": { "apiKey": "usr_a1b2c3d4e5f6g7h8i9j0...", "username": "JohnDoe", "level": "member" } }
Setelah dapat API key, simpan dan gunakan di semua 5 endpoint utama. Tidak perlu login lagi setiap request API.
POST
/user/upgrade-level
JWT Bearer

Upgrade level akun ke Gold atau Platinum. Saldo dipotong otomatis. Level aktif 30 hari dan bisa diperpanjang kapan saja.

Request Body
FieldTipeWajibKeterangan
targetLevelstringWajibNilai: gold atau platinum
Contoh Request
POST /api/user/upgrade-level Authorization: Bearer eyJhbGci... Content-Type: application/json { "targetLevel": "gold" }
Contoh Respons
{ "status": "success", "message": "Selamat! Kamu sekarang level GOLD hingga 29 Juli 2026", "data": { "level": "gold", "expiresAt": "2026-07-29T00:00:00.000Z", "daysLeft": 30, "saldoSisa": 200000 } }
Utilitas
Endpoint Tambahan
GET
/public/harga/:sku
api_key

Cek harga satu produk berdasarkan SKU. Harga disesuaikan dengan level akunmu.

Contoh Request
GET /api/public/harga/MLBB-86?api_key=usr_xxxx
Contoh Respons
{ "status": "success", "data": { "sku": "MLBB-86", "nama": "86 Diamond", "harga": 21350, "level": "gold", "status": "available" } }
GET
/public/categories
Bebas

Daftar semua kategori tersedia beserta jumlah produknya. Tidak butuh api_key.

Contoh Respons
{ "status": "success", "total": 12, "data": [ { "id": "cat-xxx", "name": "Mobile Legends Indonesia", "slug": "mobile-legends-id", "emoji": "🎮", "productCount": 48 } ] }
Referensi

Error Codes

HTTP CodeContoh MessagePenyebab
400sku dan tujuan wajib diisiField wajib tidak ada / tidak valid
401API key tidak validapi_key salah atau sudah diregenerasi
401api_key wajibRequest tidak menyertakan api_key
403Invoice ini bukan milik akun kamuCoba cek order orang lain
404Produk tidak ditemukanSKU salah atau produk tidak tersedia
400Saldo tidak mencukupiSaldo kurang, lakukan deposit dulu
500Gagal memproses orderError internal, coba beberapa saat lagi
POST
/pg/request-approval
Auth Required

Ajukan aplikasi untuk menjadi Payment Gateway (PG). Setelah disetujui admin, Anda dapat menerima pembayaran dari reseller lain dan mendapat pendapatan PG.

Request Body
{ "businessName": "Toko Ku", "businessCategory": "game", "webhookUrl": null }
Parameter
FieldTypeDeskripsi
businessNamestringNama bisnis Anda (wajib)
businessCategorystringKategori: game, voucher, retail, service, other (wajib)
webhookUrlstring|nullURL untuk notifikasi (opsional, bisa diisi nanti)
Contoh Respons
{ "status": "success", "message": "Aplikasi PG berhasil dikirim. Tunggu persetujuan admin.", "data": { "id": "PG-xxx", "userId": "USER-xxx", "status": "pending", "requestedAt": "2026-08-08T12:00:00Z", "apiKeyPublic": null, "apiKeySecret": null } }
GET
/pg/status
Auth Required

Cek status aplikasi PG Anda. Setelah disetujui, Anda akan mendapat API key untuk menerima transaksi.

Contoh Respons (Not Requested)
{ "status": "success", "data": { "pgStatus": "not-requested", "message": "Anda belum mengajukan aplikasi PG" } }
Contoh Respons (Approved)
{ "status": "success", "data": { "pgStatus": "approved", "message": "Aplikasi Anda telah disetujui", "requestedAt": "2026-08-07T10:00:00Z", "approvedAt": "2026-08-08T12:00:00Z", "apiKeyPublic": "pk_xxxxx...", "webhookUrl": null } }
Status dapat berupa: not-requested, pending, approved, atau rejected
POST
/pg/create-transaction
api_key

Buat transaksi PG dan QRIS. Gunakan API key akun yang sama dengan API publik. Cukup kirim nominal; data merchant diambil otomatis dari akun API key.

Request Body (JSON)
{ "api_key": "usr_xxxx", "amount": 1000 }
Field
FieldWajibKeterangan
api_keyWajibAPI key akun yang sudah disetujui sebagai merchant PG.
amountWajibNominal saldo PG, minimal Rp100.
buyerEmail, buyerPhone, productDescOpsionalJika kosong, otomatis memakai data akun merchant.
Fee QRIS global ditambahkan ke nominal pembayaran. Contoh nominal Rp1.000 menjadi pembayaran Rp1.050; saldo merchant tetap Rp1.000.
GET
/pg/status/:invoiceCode
api_key

Cek status transaksi PG milik merchant menggunakan API key akun yang sama dengan API publik.

Contoh Request
GET /api/pg/status/PG-xxx?api_key=usr_xxxx
Transaksi hanya dapat dilihat oleh merchant pemilik API key.
POST
/pg/withdraw-balance
api_key / JWT

Cairkan saldo PG ke Saldo Web, bank, atau e-wallet. Saldo PG dan saldo web adalah database terpisah.

Request Body (JSON)
{ "api_key": "usr_xxxx", "amount": 1000, "methodType": "topup-saldo", "accountId": null }
Saldo Web otomatis masuk setelah fee. Bank/e-wallet masuk pending dan harus disetujui owner. Tidak memakai hold 24 jam.
POST
/withdrawal/request
Auth Required

Withdrawal saldo web biasa ke bank atau e-wallet. Untuk pencairan saldo PG, gunakan endpoint /api/pg/withdraw-balance.

Request Body
{ "amount": 500000, "methodType": "dana", "accountId": "EWALLET-xxx" }
Parameter
FieldTypeDeskripsi
amountnumberJumlah penarikan dalam Rp (wajib)
methodTypestringMetode withdrawal yang aktif (wajib)
accountIdstringID rekening/e-wallet tersimpan (wajib untuk bank/e-wallet).
Contoh Respons
{ "status": "success", "message": "Permintaan penarikan berhasil dibuat", "data": { "id": "WD-xxx", "userId": "USER-xxx", "amount": 500000, "fee": 12500, "totalDeduction": 512500, "status": "pending", "coolingPeriodEndAt": "2026-08-09T12:00:00Z", "createdAt": "2026-08-08T12:00:00Z" } }
Fee dan minimum withdrawal mengikuti pengaturan global admin. Endpoint ini memakai JWT dashboard.
GET
/withdrawal/history
Auth Required

Lihat riwayat semua permintaan penarikan Anda beserta status dan tanggalnya.

Contoh Respons
{ "status": "success", "data": [ { "id": "WD-001", "amount": 500000, "fee": 12500, "methodType": "dana", "status": "success", "createdAt": "2026-08-08T12:00:00Z", "processedAt": "2026-08-09T14:30:00Z" }, { "id": "WD-002", "amount": 200000, "fee": 5000, "methodType": "gopay", "status": "pending", "createdAt": "2026-08-08T14:00:00Z", "coolingPeriodEndAt": "2026-08-09T14:00:00Z" } ] }
Status dapat berupa: pending (menunggu cooling & persetujuan), success (selesai), failed (gagal), atau cancelled (dibatalkan).
🚀 Quick Start

Mulai pakai API Venn Store dalam 3 langkah:

1
Daftar akun di venpay.id
2
Ambil API key di Dashboard → API Key → Generate
3
Mulai request ke /api/public/layanan?api_key=YOUR_KEY