Averpay

Dokumentasi API

Panduan lengkap integrasi API pembayaran untuk platform atau aplikasi kamu.

A. Persiapan

Langkah pertama yang harus kamu lakukan adalah mendaftar dan login ke dashboard. Setelah itu, dapatkan API Key kamu di menu Profil untuk mulai mengintegrasikan sistem pembayaran ke aplikasi kamu.

📘 Panduan Cepat untuk Pemula

Belum pernah pakai API sebelumnya? Tenang, semua endpoint di dokumentasi ini pakai method GET — jadi bisa langsung dicoba lewat browser dengan cara paste URL-nya, tidak wajib nulis kode dulu. Beberapa hal penting yang perlu kamu tahu:

  • Base URL = alamat website kamu sendiri (otomatis muncul di tiap contoh kode di bawah, ganti BASE_URL kalau kamu salin manual).
  • API Key = "kunci" biar sistem tahu itu kamu. Ambil di menu Profil, lalu tempel di parameter apikey pada setiap request. Jangan pernah share API Key ke orang lain, siapa saja yang pegang API Key kamu bisa transaksi pakai saldo kamu.
  • Semua parameter dikirim lewat URL (query string), contoh: ?apikey=XXXX&amount=50000.
  • Format respons sukses biasanya: { "success": true, "data": {...} }
  • Format respons gagal biasanya: { "success": false, "error": "pesan errornya" } — selalu cek dulu field success/error sebelum lanjut proses data-nya.
  • Beberapa fitur (Nokos, Beli Panel, Aplikasi Premium) punya beberapa langkah berurutan (mis. pilih layanan → pilih negara → beli, atau pilih produk → beli → cek status), jadi endpoint-nya harus dipanggil satu-satu sesuai urutan, bukan sekali panggil langsung jadi.
  • Tiap contoh kode di bawah ada pilihan bahasa (Node.js / Python / cURL / PHP) — klik tab-nya buat lihat versi yang kamu pakai. Kalau baru belajar, cURL paling gampang dicoba langsung dari terminal/CMD tanpa install apa-apa.

Kalau masih bingung, bisa hubungi CS Bantuan di dashboard buat ditemenin nyoba step-by-step.

🤖 Unduh Dokumentasi (.json) & Prompt AI

Seluruh dokumentasi endpoint tersedia dalam satu file JSON (parameter, contoh request/response, webhook). Unduh, lalu tempelkan ke AI bersama prompt di bawah untuk dibuatkan payment gateway seperti ini.

Unduh .json Lihat JSON

Website Payment Gateway Lengkap

Frontend + backend: checkout QRIS, status otomatis, dan halaman saldo.

Buatkan website payment gateway (checkout QRIS) yang terhubung ke API AVERPAY di {{BASE_URL}}.

Dokumentasi lengkap (JSON): {{SPEC_URL}}
Baca dokumentasi itu dulu dan ikuti persis nama endpoint, parameter, dan format response-nya. Jangan mengarang endpoint.

Fitur yang saya mau:
1. Halaman checkout: input nominal -> panggil GET /api/invoice -> tampilkan gambar QRIS (qris_image), total bayar, dan hitung mundur sampai expired_at.
2. Cek status otomatis tiap 5 detik lewat GET /api/invoice/status sampai status = paid atau kedaluwarsa, lalu tampilkan halaman sukses.
3. Halaman dashboard: saldo (GET /api/balance) dan riwayat invoice yang dibuat lewat website ini.
4. Endpoint webhook (POST /webhook/averpay) untuk menerima event deposit.paid; verifikasi ulang ke /api/invoice/status sebelum menandai lunas.

Aturan penting:
- API Key HANYA dipakai di backend (simpan di file .env), jangan pernah muncul di kode frontend.
- Browser memanggil backend saya, backend saya yang memanggil API AVERPAY.
- Validasi nominal di server. Tampilkan pesan error yang ramah dari field "error".
- Gunakan Node.js + Express dan HTML/CSS/JS biasa. Beri struktur folder, isi tiap file, dan cara menjalankannya.

Integrasi Checkout ke Toko yang Sudah Ada

Tambahkan pembayaran QRIS ke aplikasi/toko online milik kamu.

Saya sudah punya aplikasi toko online. Tambahkan pembayaran QRIS memakai API AVERPAY ({{BASE_URL}}).
Dokumentasi (JSON): {{SPEC_URL}}

Yang perlu dibuat:
- Fungsi createInvoice(orderId, amount) memanggil GET /api/invoice, simpan invoice_id di tabel pesanan.
- Fungsi checkInvoice(invoiceId) memanggil GET /api/invoice/status.
- Route webhook menerima POST {event, data, timestamp}. Untuk event deposit.paid, cari pesanan berdasarkan invoice_id, verifikasi ulang lewat checkInvoice, lalu ubah status pesanan menjadi "dibayar" (idempotent: aman dipanggil dua kali).
- Cron/job ulang untuk pesanan pending yang webhook-nya tidak masuk.

Bahasa/framework saya: [ISI: mis. Laravel / Express / Next.js / Flask]. Berikan kode lengkap yang siap tempel beserta contoh .env. API Key tidak boleh bocor ke frontend.

Bot Telegram / WhatsApp Top-up

Bot yang bisa cek saldo, buat QRIS, dan cek status pembayaran.

Buatkan bot [ISI: Telegram / WhatsApp] yang terhubung ke API AVERPAY di {{BASE_URL}}.
Dokumentasi (JSON): {{SPEC_URL}}

Perintah bot:
- /saldo -> GET /api/balance
- /topup <nominal> -> GET /api/invoice, kirim gambar QRIS dan total bayar
- /cek <invoice_id> -> GET /api/invoice/status
- Otomatis kirim notifikasi ke chat begitu invoice berstatus paid (polling tiap 5-10 detik, berhenti saat expired).

API Key disimpan di .env. Tambahkan penanganan error dari field "error" dan rate limit sederhana per pengguna. Berikan kode lengkap + cara menjalankan.

Dashboard Merchant + Withdraw

Panel untuk memantau saldo, membuat invoice, dan menarik saldo.

Buatkan dashboard merchant sederhana di atas API AVERPAY ({{BASE_URL}}). Dokumentasi (JSON): {{SPEC_URL}}

Halaman:
1. Ringkasan: saldo dari GET /api/balance.
2. Buat invoice: nominal -> GET /api/invoice, tampilkan QRIS dan status live.
3. Withdraw: ambil GET /api/withdraw/methods, tampilkan fee/min/max per metode, lalu GET /api/withdraw; halaman status memakai GET /api/withdraw/status.
4. Penerima webhook untuk deposit.paid, withdraw.success, withdraw.rejected yang memperbarui tampilan.

Semua panggilan API lewat backend (API Key di .env). Validasi min/max withdraw dan nominal sebelum kirim. Berikan struktur project dan kode lengkap.

Toko Digital Otomatis (Premium / Nokos / Sosmed)

Jual ulang layanan AVERPAY dengan alur beli otomatis.

Buatkan toko digital otomatis yang menjual ulang layanan dari API AVERPAY ({{BASE_URL}}). Dokumentasi (JSON): {{SPEC_URL}}

Layanan yang saya mau: [ISI: Aplikasi Premium / Nokos OTP / Suntik Sosmed].
Ikuti urutan endpoint dari dokumentasi (mis. Premium: products -> stock -> order -> status; Nokos: countries -> services -> products -> order -> status).

Syarat:
- Harga jual = harga modal + margin yang bisa saya atur di file config.
- Cek saldo (GET /api/balance) dan stok sebelum order; tampilkan pesan jelas jika tidak cukup.
- Simpan setiap transaksi (id AVERPAY, status, waktu) di database, polling status sampai selesai.
- API Key hanya di backend (.env).
Berikan kode lengkap dan langkah menjalankan.

Prompt Ringkas (Cukup Link Dokumentasi)

Untuk AI yang bisa membuka link. Ganti bagian [ISI] sesuai kebutuhan.

Baca dokumentasi API ini: {{SPEC_URL}}
Lalu buatkan [ISI: apa yang ingin dibuat, mis. website payment gateway seperti AVERPAY].
Gunakan hanya endpoint yang ada di dokumentasi, simpan API Key di backend/.env, dan jelaskan cara menjalankannya.

Tips: kalau AI kamu tidak bisa membuka link, pakai tombol Salin Prompt + JSON supaya dokumentasinya ikut tertempel. Bagian dalam kurung siku [ISI: ...] ganti sesuai kebutuhanmu.

B. Cek Saldo (Balance)

  • Method: GET
  • URL: /api/balance

Parameter:

  • apikey (string, wajib)

Contoh Request:

const axios = require('axios');
axios.get('BASE_URL/api/balance?apikey=YOUR_API_KEY')
  .then(response => console.log(response.data));

/*
Contoh response:
{
  "username": "your_username", 
  "email": "name@gmail.com", 
  "balance": 150000
}
*/

C. Membuat Invoice

  • Method: GET
  • URL: /api/invoice

Parameter:

  • apikey (string, wajib)
  • amount (integer, wajib)

Contoh Request:

const axios = require('axios');
axios.get('BASE_URL/api/invoice?apikey=YOUR_API_KEY&amount=50000')
  .then(response => console.log(response.data));

/*
Contoh response:
{
  "success": true,
  "invoice_id": "64c8d9e...",
  "amount": 50000,
  "fee": 500,
  "total": 50500,
  "qris_image": "https://...",
  "payment_link": "https://...", 
  "expired_at": "2025-01-01 12:00:00"
}
*/

D. Cek Status Invoice

  • Method: GET
  • URL: /api/invoice/status

Parameter:

  • apikey (string, wajib)
  • invoice_id (string, wajib)

Contoh Request:

const axios = require('axios');
axios.get('BASE_URL/api/invoice/status?apikey=YOUR_API_KEY&invoice_id=YOUR_INVOICE_ID')
  .then(response => console.log(response.data));

/*
Contoh response:
{
  "invoice_id": "64c8d9e...",
  "amount": 50000,
  "fee": 500,
  "total": 50500,
  "status": "paid",
  "qris_image": "https://...",
  "payment_link": "https://...",   
  "expired_at": "2025-01-01 12:00:00",
  "created_at": "2025-01-01 11:30:00"
}
*/

E. Lihat Metode Withdraw

  • Method: GET
  • URL: /api/withdraw/methods

Parameter:

  • apikey (string, wajib)

Contoh Request:

const axios = require('axios');
axios.get('BASE_URL/api/withdraw/methods?apikey=YOUR_API_KEY')
  .then(response => console.log(response.data));

/*
Contoh response:
{
  "manual_methods": [
    {
      "name": "Dana",
      "method": "dana",      
      "fee": 100,
      "min": 10000,
      "max": 1000000
    }
  ],
  "instant_methods": [
    {
      "name": "Dana",
      "method": "dana",
      "fee": 100,
      "min": 10000,
      "max": 1000000
    }
  ]
}
*/

F. Melakukan Withdraw

  • Method: GET
  • URL: /api/withdraw

Parameter:

  • apikey (string, wajib)
  • amount (integer, wajib)
  • method (string, wajib)
  • account_number (string, wajib)
  • instant (boolean, opsional, default false)

Contoh Request Manual:

const axios = require('axios');
axios.get('BASE_URL/api/withdraw?apikey=YOUR_API_KEY&amount=50000&method=dana&account_number=08123456789&instant=false')
  .then(response => console.log(response.data));

/*
Contoh response sukses (manual):
{
  "success": true,
  "message": "Permintaan penarikan berhasil diajukan.",
  "data": {
    "id": "WDc4e3f2a1b2c3",
    "amount": 50000,
    "fee": 1000,
    "method": "Dana",
    "account_number": "08123456789",
    "status": "pending",
    "created_at": "2025-01-01T12:00:00.000Z"
  }
}
*/

Contoh Request Instan:

const axios = require('axios');
axios.get('BASE_URL/api/withdraw?apikey=YOUR_API_KEY&amount=20000&method=gopay&account_number=08129876543&instant=true')
  .then(response => console.log(response.data));

/*
Contoh response sukses (instant):
{
  "success": true,
  "message": "Permintaan withdraw instan sedang diproses.",
  "data": {
    "id": "WDf3a1b2c3d4e5",
    "amount": 20000,
    "fee": 2000,
    "method": "GoPay",
    "account_number": "08129876543",
    "status": "pending",
    "created_at": "2025-01-01T12:05:00.000Z"
  }
}
*/

G. Cek Status Withdraw

  • Method: GET
  • URL: /api/withdraw/status

Parameter:

  • apikey (string, wajib)
  • id (string, wajib) – ID withdraw

Contoh Request:

const axios = require('axios');
axios.get('BASE_URL/api/withdraw/status?apikey=YOUR_API_KEY&id=WDc4e3f2a1b2c3')
  .then(response => console.log(response.data));

/*
Contoh response:
{
  "id": "WDc4e3f2a1b2c3",
  "amount": 50000,
  "fee": 1000,
  "method": "Dana",
  "account_number": "08123456789",
  "instant": false,
  "status": "success",
  "admin_note": null,
  "created_at": "2025-01-01T12:00:00.000Z",
  "completed_at": "2025-01-01T12:30:00.000Z"
}
*/

H. Nokos — Sewa Nomor Virtual OTP

Fitur Nokos memungkinkan kamu menyewa nomor virtual untuk menerima kode OTP secara programatik. Saldo akun otomatis terpotong sesuai harga (sudah termasuk markup) saat pesanan dibuat. Alur pemakaiannya mengikuti wizard di halaman /nokos: pilih aplikasi/layanan dulu, baru pilih negara, lalu pilih harga, baru buat pesanan.

1. Daftar Layanan / Platform (pilih aplikasi dulu)

  • Method: GET
  • URL: /api/nokos/services

Parameter:

  • apikey (string, wajib)
  • country_id (integer, opsional) — filter layanan tersedia untuk negara tertentu, kalau sudah tahu negaranya

Mengembalikan semua platform (WhatsApp, Telegram, Instagram, dll) beserta id (platform_id). Panggil endpoint ini pertama kali (tanpa country_id) supaya pengguna bisa pilih aplikasi dulu, sama seperti Step 1 di halaman /nokos.

2. Daftar Negara (setelah aplikasi dipilih)

  • Method: GET
  • URL: /api/nokos/countries

3. Daftar Produk / Harga (per Layanan & Negara)

  • Method: GET
  • URL: /api/nokos/products

Parameter:

  • apikey (string, wajib)
  • country_id (integer, wajib) — didapat dari endpoint Daftar Negara
  • platform_id (integer, sangat disarankan) — dari endpoint Daftar Layanan (misal WhatsApp = id 3), supaya harga yang ditampilkan sesuai aplikasi yang dipilih

4. Buat Pesanan (Beli Nomor)

  • Method: GET
  • URL: /api/nokos/order

Parameter:

  • apikey (string, wajib)
  • product_id (integer, wajib) — didapat dari endpoint Daftar Produk
  • country_id (integer, wajib)
  • platform_id (integer, sangat disarankan) — sama seperti yang dipakai di endpoint Daftar Produk, supaya sistem bisa memastikan produk terpilih benar-benar ditemukan dan tidak salah dianggap habis

5. Cek Status Pesanan / OTP

  • Method: GET
  • URL: /api/nokos/status

Parameter:

  • apikey (string, wajib)
  • id (string, wajib) — ID transaksi Nokos yang dikembalikan endpoint Buat Pesanan

Contoh Alur (Node.js):

const axios = require('axios');
const BASE = 'BASE_URL';
const apikey = 'YOUR_API_KEY';

// 1. Pilih aplikasi/layanan dulu (WhatsApp, Telegram, dll) — tanpa filter negara
const { data: services } = await axios.get(`${BASE}/api/nokos/services?apikey=${apikey}`);
const service = services.data.find(s => s.name === 'WhatsApp'); // atau pilih index 0
const platformId = service.id; // misal: 3

// 2. Baru pilih negara
const { data: countries } = await axios.get(`${BASE}/api/nokos/countries?apikey=${apikey}`);
const countryId = countries.data[0].id; // misal: 6 (Indonesia)

// 3. Ambil semua pilihan harga untuk aplikasi + negara tersebut, lalu tampilkan ke user
const { data: products } = await axios.get(`${BASE}/api/nokos/products?apikey=${apikey}&country_id=${countryId}&platform_id=${platformId}`);
console.log(products.data); // tampilkan tiap item sebagai opsi harga

// 4. Setelah user memilih salah satu harga, baru beli nomor (saldo otomatis terpotong)
const chosenProductId = products.data[0].id; // ganti dengan pilihan user
const { data: order } = await axios.get(`${BASE}/api/nokos/order?apikey=${apikey}&product_id=${chosenProductId}&country_id=${countryId}&platform_id=${platformId}`);
console.log(order.data.phoneNumber, order.data._id);

// 5. Polling status sampai OTP masuk & status jadi COMPLETED
const check = async () => {
  const { data: status } = await axios.get(`${BASE}/api/nokos/status?apikey=${apikey}&id=${order.data._id}`);
  console.log(status.data.status, status.data.otpCode);
  if (!['COMPLETED','CANCELED','EXPIRED'].includes(status.data.status)) setTimeout(check, 5000);
};
check();

Contoh Response — Buat Pesanan:

{
  "success": true,
  "data": {
    "_id": "NOKOSa1b2c3d4",
    "phoneNumber": "+6281234567890",
    "productName": "WhatsApp Indonesia",
    "sellPrice": 18000,
    "status": "ACTIVE",
    "expiresAt": "2026-09-17T10:20:00.000Z"
  }
}

Contoh Response — Cek Status (setelah OTP masuk):

{
  "success": true,
  "data": {
    "_id": "NOKOSa1b2c3d4",
    "phoneNumber": "+6281234567890",
    "status": "COMPLETED",
    "otpCode": "123456",
    "otpMessage": "Kode verifikasi WhatsApp kamu: 123456",
    "otpReceivedAt": "2026-09-17T10:05:00.000Z"
  }
}

Gacha Nokos — Nomor Virtual Acak Terkunci

Dokumentasi endpoint ini terkunci. Silakan daftar & dapatkan akses lewat halaman /gacha-nokos dulu — begitu akun kamu disetujui (ACC admin / otomatis / setelah bayar, tergantung mode pendaftaran yang aktif), dokumentasi lengkapnya otomatis terbuka di sini.

Fix No / Unban WA Terkunci

Dokumentasi endpoint ini terkunci. Buka akses fitur Fix No/Unban WA dulu lewat halaman /fix-no — begitu akses terbuka, dokumentasi lengkapnya otomatis muncul di sini.

I. Pterodactyl — Beli Panel Hosting Otomatis

Fitur ini menjual akses panel hosting (Pterodactyl) secara otomatis. Admin mengatur server panel (domain + API key) dan paket (RAM/Disk/CPU/Harga) di menu Admin → Pterodactyl. User beli paket pakai saldo; sistem otomatis membuatkan akun & server di panel (username, password, email), dan transaksinya tersimpan di database. Alur pemakaian: pilih server → pilih paket → beli → cek status/riwayat. Setiap transaksi juga punya garansi kalau akun/server ternyata hilang.

1. Daftar Server Panel

  • Method: GET
  • URL: /api/pterodactyl/panels

2. Daftar Paket

  • Method: GET
  • URL: /api/pterodactyl/packages

Parameter:

  • apikey (string, wajib)
  • panel_id (opsional) — filter paket milik satu server panel

3. Daftar Egg (Pilihan Egg) (opsional)

Mengambil daftar egg (tipe software, mis. Node.js, Python, dll) yang tersedia di Nest server panel tersebut. Nest mengikuti pengaturan admin: kalau paket punya Nest khusus dipakai Nest paket, kalau tidak dipakai Nest default server panel. Pakai id egg dari hasil endpoint ini sebagai egg_id di endpoint Beli Panel.

  • Method: GET
  • URL: /api/pterodactyl/eggs

Parameter:

  • apikey (string, wajib)
  • panel_id (wajib) — dari endpoint Daftar Server Panel
  • package_id (opsional) — dari endpoint Daftar Paket. Kirim kalau mau daftar egg mengikuti Nest & egg default paket tersebut

Contoh Request (cURL):

curl -s 'BASE_URL/api/pterodactyl/eggs?apikey=YOUR_API_KEY&panel_id=650f1a2b3c4d5e6f7a8b9c0d&package_id=650f1a2b3c4d5e6f7a8b9c0e'

Contoh Response:

{
  "success": true,
  "data": {
    "panel_id": "650f1a2b3c4d5e6f7a8b9c0d",
    "package_id": "650f1a2b3c4d5e6f7a8b9c0e",
    "nest_id": 5,
    "default_egg_id": 15,
    "eggs": [
      { "id": 15, "name": "Nodejs Generic", "is_default": true },
      { "id": 16, "name": "Python Generic", "is_default": false }
    ]
  }
}
  • nest_id — Nest yang dipakai (Nest paket kalau diset, kalau tidak Nest default server panel)
  • default_egg_id — egg default yang dipakai kalau egg_id tidak dikirim di Beli Panel
  • eggs — semua egg di Nest tersebut (is_default = true untuk egg default)

4. Beli Panel

  • Method: GET
  • URL: /api/pterodactyl/order

Parameter:

  • apikey (string, wajib)
  • panel_id (wajib) — dari endpoint Daftar Server Panel
  • package_id (wajib) — dari endpoint Daftar Paket
  • username (wajib) — huruf/angka/underscore, 3-20 karakter
  • email (wajib) — email pemilik akun panel
  • password (opsional) — 8-32 karakter tanpa spasi. Kalau tidak dikirim, password dibuatkan otomatis (acak & aman) dan dikembalikan di response.
  • egg_id (opsional) — pilih tipe software/egg tertentu, ambil id-nya dari endpoint Daftar Egg (harus salah satu egg yang ada di Nest paket/server tersebut). Kalau tidak dikirim atau id-nya tidak valid, otomatis pakai egg default paket/server.

Saldo otomatis terpotong sesuai harga paket. Kalau pembuatan akun/server gagal, saldo otomatis dikembalikan.

5. Cek Status Transaksi

  • Method: GET
  • URL: /api/pterodactyl/status

Parameter:

  • apikey (string, wajib)
  • id (wajib) — ID transaksi dari endpoint Beli Panel

6. Klaim Garansi

  • Method: GET
  • URL: /api/pterodactyl/claim-warranty

Parameter:

  • apikey (string, wajib)
  • id (wajib) — ID transaksi

Sistem cek dulu apakah username transaksi masih ada di panel. Kalau masih ada, klaim ditolak (server dianggap masih normal). Kalau sudah tidak ada, akun & server dibuatkan ulang otomatis. Ditolak juga kalau jatah klaim habis atau garansi kedaluwarsa.

Contoh Alur (Node.js):

const axios = require('axios');
const BASE = 'BASE_URL';
const apikey = 'YOUR_API_KEY';

// 1. Pilih server panel
const { data: panels } = await axios.get(`${BASE}/api/pterodactyl/panels?apikey=${apikey}`);
const panelId = panels.data[0].id;

// 2. Ambil daftar paket untuk server tersebut
const { data: packages } = await axios.get(`${BASE}/api/pterodactyl/packages?apikey=${apikey}&panel_id=${panelId}`);
console.log(packages.data); // tampilkan tiap item sebagai opsi paket

// 3. (opsional) Pilih egg sesuai Nest paket
const chosenPackageId = packages.data[0].id;
const { data: eggRes } = await axios.get(`${BASE}/api/pterodactyl/eggs?apikey=${apikey}&panel_id=${panelId}&package_id=${chosenPackageId}`);
console.log(eggRes.data.eggs); // tampilkan tiap item sebagai opsi egg
const eggId = eggRes.data.eggs[0].id;

// 4. Beli paket yang dipilih (password & egg_id opsional — kosongkan kalau mau ikut default)
const { data: order } = await axios.get(`${BASE}/api/pterodactyl/order?apikey=${apikey}&panel_id=${panelId}&package_id=${chosenPackageId}&username=budi123&email=budi@gmail.com&password=RahasiaAman123!&egg_id=${eggId}`);
console.log(order.data.panelUsername, order.data.panelPassword);

// 5. (opsional) klaim garansi kalau akun/server ternyata hilang
const { data: claim } = await axios.get(`${BASE}/api/pterodactyl/claim-warranty?apikey=${apikey}&id=${order.data._id}`);
console.log(claim.data);

Contoh Response — Beli Panel:

{
  "success": true,
  "data": {
    "_id": "PTEROa1b2c3d4",
    "panelName": "Panel Node 1",
    "packageName": "Paket Bronze",
    "ram": 1024, "disk": 2048, "cpu": 50,
    "price": 15000,
    "panelUsername": "budi123ab12",
    "panelPassword": "Xy7dK2pqAa1!",
    "panelEmail": "budi@gmail.com",
    "status": "ACTIVE",
    "warrantyMaxClaims": 3,
    "warrantyClaimsUsed": 0,
    "warrantyExpiresAt": "2026-10-17T10:00:00.000Z"
  }
}

J. Aplikasi Premium — Beli Akun Premium Otomatis

Fitur ini menjual akun aplikasi premium (Capcut, Netflix, Alight Motion, dll) yang diambil realtime dari katalog produk pemasok. Saldo akun otomatis terpotong sesuai harga (sudah termasuk markup) saat pesanan dibuat, lalu akun (username/password) dikirim otomatis begitu transaksi selesai. Alur pemakaiannya: lihat daftar produk → buat pesanan → cek status sampai akun tersedia.

1. Daftar Produk / Harga

  • Method: GET
  • URL: /api/premium/products

Parameter:

  • apikey (string, wajib)

Mengembalikan seluruh produk yang berstatus tersedia lengkap dengan nama, deskripsi, gambar, stok realtime, dan harga (sudah termasuk markup admin).

2. Cek Stok Produk Spesifik (opsional)

  • Method: GET
  • URL: /api/premium/stock

Parameter:

  • apikey (string, wajib)
  • product_id (integer, wajib) — didapat dari endpoint Daftar Produk

3. Buat Pesanan (Beli Akun)

  • Method: GET
  • URL: /api/premium/order

Parameter:

  • apikey (string, wajib)
  • product_id (integer, wajib) — didapat dari endpoint Daftar Produk
  • qty (integer, opsional, default 1) — jumlah akun yang ingin dibeli sekaligus

4. Cek Status Pesanan / Ambil Akun

  • Method: GET
  • URL: /api/premium/status

Parameter:

  • apikey (string, wajib)
  • id (string, wajib) — ID transaksi Aplikasi Premium yang dikembalikan endpoint Buat Pesanan

Contoh Alur (Node.js):

const axios = require('axios');
const BASE = 'BASE_URL';
const apikey = 'YOUR_API_KEY';

// 1. Ambil daftar produk yang tersedia
const { data: products } = await axios.get(`${BASE}/api/premium/products?apikey=${apikey}`);
console.log(products.data); // tampilkan tiap item sebagai pilihan produk

// 2. Setelah user memilih produk, buat pesanan (saldo otomatis terpotong)
const chosenProductId = products.data[0].id; // ganti dengan pilihan user
const { data: order } = await axios.get(`${BASE}/api/premium/order?apikey=${apikey}&product_id=${chosenProductId}&qty=1`);
console.log(order.data._id, order.data.premkuInvoice);

// 3. Polling status sampai akun tersedia (status jadi success)
const orderId = order.data._id;
const check = async () => {
  const { data: status } = await axios.get(`${BASE}/api/premium/status?apikey=${apikey}&id=${orderId}`);
  console.log(status.data.status, status.data.accounts);
  if (!['success','failed','canceled'].includes(status.data.status)) setTimeout(check, 5000);
};
check();

Contoh Response — Buat Pesanan:

{
  "success": true,
  "data": {
    "_id": "PREMa1b2c3d4",
    "premkuInvoice": "API-20260918194500-a1b2c3d4",
    "productName": "Capcut Pro 1 Bulan",
    "qty": 1,
    "sellPrice": 11500,
    "status": "pending"
  }
}

Contoh Response — Cek Status (setelah akun tersedia):

{
  "success": true,
  "data": {
    "_id": "PREMa1b2c3d4",
    "productName": "Capcut Pro 1 Bulan",
    "status": "success",
    "accounts": [
      { "username": "email@example.com", "password": "pass123" }
    ]
  }
}

K. Suntik Sosmed — Followers / Likes / Views Otomatis

Fitur ini menjual jasa penambah Followers, Likes, Views, Comment, Subscribe, dll untuk Instagram, TikTok, Facebook, YouTube, dan platform sosial media lainnya, diambil realtime dari katalog layanan pemasok. Saldo akun otomatis terpotong sesuai rate (sudah termasuk markup) saat pesanan dibuat. Alur pemakaiannya: lihat daftar layanan → buat pesanan → cek status sampai selesai → (opsional) ajukan refill kalau jumlahnya turun setelah selesai.

1. Daftar Layanan

  • Method: GET
  • URL: /api/sosmed/services

Parameter:

  • apikey (string, wajib)

Mengembalikan seluruh layanan lengkap dengan ID layanan, nama, kategori, batas min/max jumlah, harga per 1000 (sudah termasuk markup admin), dan apakah layanan mendukung refill.

2. Buat Pesanan

  • Method: GET
  • URL: /api/sosmed/order

Parameter:

  • apikey (string, wajib)
  • service_id (integer, wajib) — didapat dari endpoint Daftar Layanan
  • target (string, wajib) — link/username/ID target yang mau ditambah
  • quantity (integer, wajib) — harus di antara min/max layanan tersebut

3. Cek Status Pesanan

  • Method: GET
  • URL: /api/sosmed/status

Parameter:

  • apikey (string, wajib)
  • id (string, wajib) — ID transaksi Suntik Sosmed yang dikembalikan endpoint Buat Pesanan

4. Ajukan Refill (opsional, cuma untuk layanan yang mendukung refill)

  • Method: GET
  • URL: /api/sosmed/refill

Parameter:

  • apikey (string, wajib)
  • id (string, wajib) — ID transaksi Suntik Sosmed, hanya bisa diajukan kalau status pesanan sudah completed

5. Cek Status Refill

  • Method: GET
  • URL: /api/sosmed/refill/status

Parameter:

  • apikey (string, wajib)
  • id (string, wajib) — ID transaksi Suntik Sosmed (bukan ID refill) yang sudah pernah diajukan refill-nya

Contoh Alur (Node.js):

const axios = require('axios');
const BASE = 'BASE_URL';
const apikey = 'YOUR_API_KEY';

// 1. Ambil daftar layanan yang tersedia
const { data: services } = await axios.get(`${BASE}/api/sosmed/services?apikey=${apikey}`);
console.log(services.data); // tampilkan tiap item sebagai pilihan layanan

// 2. Setelah user pilih layanan + isi target & jumlah, buat pesanan (saldo otomatis terpotong)
const chosenServiceId = services.data[0].id; // ganti dengan pilihan user
const { data: order } = await axios.get(`${BASE}/api/sosmed/order?apikey=${apikey}&service_id=${chosenServiceId}&target=https://instagram.com/username&quantity=100`);
console.log(order.data._id, order.data.fayupediaOrderId);

// 3. Polling status sampai pesanan selesai
const orderId = order.data._id;
const checkStatus = async () => {
  const { data: status } = await axios.get(`${BASE}/api/sosmed/status?apikey=${apikey}&id=${orderId}`);
  console.log(status.data.status, status.data.remains);
  if (!['completed','canceled','failed'].includes(status.data.status)) setTimeout(checkStatus, 5000);
};
checkStatus();

// 4. (Opsional) Ajukan refill kalau jumlahnya turun setelah selesai
const { data: refill } = await axios.get(`${BASE}/api/sosmed/refill?apikey=${apikey}&id=${orderId}`);
console.log(refill.data.refillStatus);

// 5. (Opsional) Cek status refill
const { data: refillStatus } = await axios.get(`${BASE}/api/sosmed/refill/status?apikey=${apikey}&id=${orderId}`);
console.log(refillStatus.data.refillStatus);

Contoh Response — Buat Pesanan:

{
  "success": true,
  "data": {
    "_id": "SOSa1b2c3d4",
    "fayupediaOrderId": "123456",
    "serviceName": "Instagram Followers Indo [Real]",
    "target": "https://instagram.com/username",
    "quantity": 100,
    "sellPrice": 12000,
    "status": "pending",
    "canRefill": true
  }
}

Contoh Response — Cek Status (setelah selesai):

{
  "success": true,
  "data": {
    "_id": "SOSa1b2c3d4",
    "status": "completed",
    "startCount": 1520,
    "remains": 0
  }
}

L. Produk — Khusus Role Panel (Reseller / Admin Panel)

Endpoint di bagian ini berbeda dari endpoint API lainnya: hanya bisa dipakai oleh akun yang sudah membeli Role Panel di menu Role Panel dashboard — baik role reseller (Seller) maupun adminpanel (Admin Panel). Akun yang belum beli role panel apa pun (masih role user) akan mendapat respons 403. Produk adalah item digital yang diinput manual oleh admin (bukan produk API pihak ketiga), dibeli memakai saldo akun.

⚠️ Kalau role panel akun kamu belum aktif (belum pernah beli Reseller/Admin Panel, atau paketnya sudah kedaluwarsa), semua endpoint di bagian L dan M akan menolak request dengan error 403.

1. Daftar Produk

  • Method: GET
  • URL: /api/produk/list
  • Role: reseller atau adminpanel

Parameter:

  • apikey (string, wajib)

2. Beli Produk

  • Method: GET
  • URL: /api/produk/beli
  • Role: reseller atau adminpanel

Parameter:

  • apikey (string, wajib)
  • id (string, wajib) — ID produk, didapat dari endpoint Daftar Produk

Kalau harga produk 0, dianggap gratis (saldo tidak dipotong). Kalau harga > 0, saldo akan otomatis terpotong sesuai harga produk.

3. Cek Status / Detail Transaksi

  • Method: GET
  • URL: /api/produk/status
  • Role: reseller atau adminpanel

Parameter:

  • apikey (string, wajib)
  • id (string, wajib) — ID transaksi (order_id) dari endpoint Beli Produk

Contoh Response — Beli Produk:

{
  "success": true,
  "data": {
    "order_id": "PRDa1b2c3d4",
    "produk_name": "Nama Produk",
    "price": 15000,
    "group_link": null,
    "download_link": "https://..."
  }
}

Contoh Response — Ditolak (role panel belum aktif):

{
  "error": "Fitur ini khusus akun dengan role panel: reseller / adminpanel. Role panel kamu saat ini: user."
}

M. Panel Role — Reseller (Pilihan Egg & Add Server) & Admin Panel (Create Admin)

Endpoint di bagian ini membungkus fitur yang sama dengan menu Kelola Panel (Reseller) dan Admin Panel di dashboard, supaya bisa dipanggil lewat API. Sama seperti bagian L, endpoint ini baru aktif setelah akun membeli role panel yang sesuai. Kalau server offline atau data tidak valid, endpoint akan balas error dengan pesan yang sama seperti di dashboard.

1. Daftar Server Reseller Aktif

  • Method: GET
  • URL: /api/panel/servers
  • Role: reseller atau adminpanel

Parameter:

  • apikey (string, wajib)

Contoh Request (cURL):

curl 'BASE_URL/api/panel/servers?apikey=YOUR_API_KEY'

Contoh Response:

{
  "success": true,
  "data": [
    { "slot": 1, "name": "Server 1", "nestId": 5 },
    { "slot": 2, "name": "Server 2", "nestId": 5 }
  ]
}

2. Daftar Egg (Pilihan Egg) (role Reseller / Admin Panel)

Mengambil daftar egg (tipe software, mis. Node.js, Python, dll) yang tersedia di Nest pada server (slot) yang dipilih. Nest ID ditentukan oleh admin di pengaturan server reseller dan tidak bisa diubah dari API — jadi daftar yang kamu dapat selalu sesuai Nest yang sudah diset admin. Pakai id egg dari hasil endpoint ini sebagai egg_id di Add Server.

  • Method: GET
  • URL: /api/panel/eggs
  • Role: reseller atau adminpanel

Parameter (query):

  • apikey (string, wajib)
  • slot (integer, wajib) — 1, 2, atau 3, didapat dari endpoint Daftar Server

Contoh Request (cURL):

curl 'BASE_URL/api/panel/eggs?apikey=YOUR_API_KEY&slot=1'

Contoh Response:

{
  "success": true,
  "data": {
    "slot": 1,
    "server_name": "Server 1",
    "nest_id": 5,
    "default_egg_id": 15,
    "eggs": [
      { "id": 15, "name": "Nodejs Generic", "is_default": true },
      { "id": 16, "name": "Python Generic", "is_default": false }
    ]
  }
}
  • nest_id — Nest yang diset admin untuk server ini
  • default_egg_id — egg default yang dipakai kalau egg_id tidak dikirim di Add Server
  • eggs — semua egg yang ada di Nest tersebut (is_default = true untuk egg default)

3. Add Server (role Reseller / Admin Panel)

Menambah server baru ke akun panel (Pterodactyl) yang sudah pernah dibuat akun ini sebelumnya lewat fitur Create Panel, di server (slot) yang sama. account_id wajib sudah tercatat di riwayat panel akun ini sendiri — ini untuk mencegah penambahan server ke akun milik orang lain.

  • Method: POST
  • URL: /api/panel/add-server
  • Role: reseller atau adminpanel

Parameter (body atau query):

  • apikey (string, wajib)
  • slot (integer, wajib) — 1, 2, atau 3, didapat dari endpoint Daftar Server
  • account_id (integer, wajib) — ID akun panel (Pterodactyl user ID) yang sudah dibuat sebelumnya via Create Panel
  • ram (string, wajib) — angka 1-10 (GB) atau unlimited
  • egg_id (integer, opsional) — id egg dari endpoint Daftar Egg. Harus salah satu egg yang ada di Nest server tersebut (sesuai Nest ID yang diset admin). Kalau kosong atau id-nya tidak ada di Nest, otomatis pakai egg default server.

Contoh Request (cURL):

curl -X POST 'BASE_URL/api/panel/add-server' \
  -d 'apikey=YOUR_API_KEY' \
  -d 'slot=1' \
  -d 'account_id=12' \
  -d 'ram=4' \
  -d 'egg_id=16'

Contoh Response:

{
  "success": true,
  "data": {
    "domain": "panel.contoh.com",
    "server_name": "Server 1",
    "account_id": 12,
    "username": "reselleruser",
    "email": "reselleruser@gmail.com",
    "server_id": 45,
    "server_identifier": "a1b2c3d4",
    "ram": "4 GB",
    "egg_id": 16
  }
}

4. Create Admin (khusus role Admin Panel — dibatasi 1x per akun)

⚠️ Setiap akun dengan role adminpanel hanya boleh membuat SATU akun Admin (root_admin) seumur hidup akunnya — sama seperti batas di menu Admin Panel pada dashboard. Kalau sudah pernah berhasil dibuat, endpoint ini akan balas error 400 (jatah habis), bukan membuat akun baru. Kalau proses gagal di tengah jalan, jatah tidak terpakai dan kamu boleh coba lagi.

  • Method: POST
  • URL: /api/panel/create-admin
  • Role: adminpanel

Parameter (body atau query):

  • apikey (string, wajib)
  • slot (integer, wajib) — server tujuan pembuatan akun Admin
  • username (string, wajib) — huruf, angka, underscore (3-20 karakter)
  • email (string, wajib)

Contoh Request (cURL):

curl -X POST 'BASE_URL/api/panel/create-admin' \
  -d 'apikey=YOUR_API_KEY' \
  -d 'slot=1' \
  -d 'username=adminbaru' \
  -d 'email=adminbaru@gmail.com'

Contoh Response:

{
  "success": true,
  "key_status": "ok",
  "data": {
    "domain": "panel.contoh.com",
    "username": "adminbaru",
    "email": "adminbaru@gmail.com",
    "password": "********",
    "ptla": "ptla_xxxxxxxx",
    "ptlc": "ptlc_xxxxxxxx",
    "key_error": null
  }
}

Contoh Response — Jatah Sudah Habis:

{
  "error": "Akun kamu sudah pernah membuat Admin Panel. Pembuatan hanya bisa 1x (jatah habis)."
}