AVERPAY

Voucher layanan

Tambahkan parameter opsional voucherCode=VOCHER10 pada API pembelian Nokos, Gacha Nokos, Panel, Premium, Sosmed, atau Produk. Kode dicek berdasarkan layanan dan waktu kedaluwarsa. Harga pesanan adalah total setelah diskon; rincian tersedia pada originalPrice, discountAmount, voucherCode, dan voucherPercent. Voucher tidak berlaku untuk top up, penarikan, atau transfer saldo.

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.
  • Endpoint GET memakai parameter 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: servers -> services -> countries -> 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.

Bot Misi Coin Otomatis

Bot yang memantau misi mingguan, klaim hadiah, dan tukar coin jadi saldo.

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

Fitur:
- /misi -> GET /api/coins/missions, tampilkan tiap misi: judul, progres (progress/target), rentang hadiah, dan status (in_progress / ready / claimed).
- /klaim <type> -> GET /api/coins/claim?type=<type> hanya untuk misi berstatus ready, tampilkan coin yang didapat.
- /coin -> GET /api/coins, tampilkan jumlah coin, paket tukar (exchange_tiers) dan waktu reset (seconds_until_reset).
- /tukar <tier_id> -> GET /api/coins/exchange?tier_id=<tier_id>, tampilkan saldo baru.
- Pengingat otomatis: saat ada misi berstatus ready, kirim notifikasi (polling maksimal tiap 60 detik).

Catatan: misi dengan via_api:false (like, komentar, share, gift) hanya bisa dikerjakan di website, jangan coba lewat API. API Key hanya di backend (.env). Tampilkan pesan dari field "error" bila gagal.

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 — Server 1, 2, 3, 4

Generator Request OTP

Pilih server → layanan → negara → harga, kemudian contoh JSON API akan disusun otomatis. Semua key provider tetap di server backend.

Pilih produk untuk menyusun request JSON.

quote_id berlaku selama 5 menit, khusus untuk akun pemilik API Key website. Status online/offline tersedia melalui /api/nokos/servers. Server 3 tidak menyediakan resend SMS melalui API. Server 4 memakai Ditznesia; lima jaringan internal dapat dipilih melalui kode layanan dan menggunakan API Key khusus dari admin.

Pilih server → layanan → negara → harga/stok → beli nomor. Server: server1, server2, server3, server4. Semua harga rupiah. API key yang dipakai klien adalah API key website ini, bukan key provider admin.

MethodEndpointParameter selain apikey
GET/api/nokos/serversDaftar server
GET/api/nokos/servicesserver = server1 / server2 / server3 / server4; kode layanan dari API yang dipilih
GET/api/nokos/countriesserver dan service; kode negara yang tersedia mengikuti data provider
GET/api/nokos/productsserver, service, country (kode negara dari /countries (contoh Server 4: id untuk Indonesia))
POST/api/nokos/orderJSON quote_id dari products, voucherCode opsional
GET/api/nokos/statusid = _id transaksi lokal
POST/api/nokos/cancelJSON id; minimal 120 detik, belum ada OTP
POST/api/nokos/resendJSON id; OTP kedua sekali, setelah OTP pertama diterima

Server 4 / Ditznesia: Menggunakan https://www.ditznesia.com/api/dev, autentikasi parameter apikey hanya dari backend (API key provider tidak dikirim ke browser). Katalog GET /services, negara GET /countries, saldo GET /profile, order GET /order, OTP GET /status, pembatalan GET /cancel, resend GET /resend, top-up QRIS GET /deposit/create dan status pembayaran GET /deposit/status. Pilihan layanan mengandung prefiks d1| s.d. d5| untuk membedakan lima jaringan internal Ditznesia; gunakan kode layanan apa adanya dari endpoint AVERPAY /api/nokos/services. Harga jual ditambah markup AVERPAY. Detail resmi: Dokumentasi Ditznesia.

Respons website memakai success dan data. Untuk POST Nokos, kirim body JSON dengan Content-Type: application/json; API key juga bisa melalui header x-api-key. Produk mengembalikan id provider yang opaque serta quote_id pembelian khusus akunmu (berlaku 5 menit). Harga price sudah termasuk markup. Jangan ubah ID atau kirim harga buatan sendiri. Setiap server memakai API tersendiri.

Status lokal: ACTIVE menunggu; OTP_RECEIVED berisi otpCode; jika didukung, OTP berikutnya di otpCode2; CANCELED/EXPIRED dikembalikan ke saldo asal sekali; RESEND_CANCELED mengakhiri permintaan OTP kedua tanpa refund pembelian yang sudah menerima OTP pertama. REVIEW berarti hasil provider belum pasti: hubungi admin dengan ID transaksi, jangan langsung order ulang. GET order lama tidak lagi membuat pesanan; gunakan POST.

const BASE = 'BASE_URL';
const apikey = 'API_KEY_WEBSITE_ANDA';
async function get(path, params = {}) {
  const r = await fetch(BASE + path + '?' + new URLSearchParams({apikey, ...params}));
  const j = await r.json(); if (!j.success) throw new Error(j.error); return j.data;
}
const services = await get('/api/nokos/services', {server:'server1'});
const service = services[0].code;
const countries = await get('/api/nokos/countries', {server:'server1',service});
const products = await get('/api/nokos/products', {server:'server1', service, country:'id'});
if (!products.length) throw new Error('Stok kosong');
const response = await fetch(BASE + '/api/nokos/order', {
  method:'POST', headers:{'Content-Type':'application/json'},
  body:JSON.stringify({apikey, quote_id:products[0].quote_id})
});
const result = await response.json();
if (!result.success) throw new Error(result.error);
const id = result.data._id;
console.log(result.data.phoneNumber);
// Panggil setiap 5 detik selama masih menunggu, tanpa membuat order ulang.
const status = await get('/api/nokos/status', {id});
console.log(status.status, status.otpCode, status.otpCode2);

Noktel — Akun Telegram ID 1–9

Pilih ID satu digit dan harga dari katalog, beli memakai saldo, lalu ambil nomor dari daftar pesanan. OTP hanya tersedia untuk pembeli; password ditampilkan setelah OTP diterima jika akun memakai 2FA.

MetodeEndpointKegunaan / body JSON
GET/api/noktel/datagroups: prefix, price, count. orders: pesanan milik akun API. Kelompok kosong disembunyikan.
POST/api/noktel/buyprefix: "1"–"9", price: harga katalog, purchaseKey: UUID unik per pembelian.
POST/api/noktel/orders/{id}/otpBody {}. Poll minimal 12 detik. Respons otp, password, hasPassword, connection.
POST/api/noktel/orders/{id}/resendBody {}. Siapkan penerimaan kode berikutnya; minta kirim ulang dari aplikasi Telegram pembeli.
POST/api/noktel/orders/{id}/finishBody {}. Setelah berhasil login, keluarkan sesi website dan hapus data sesi tersimpan.

Gunakan header x-api-key milik akun user, VIP, atau merchant. Semua POST memakai Content-Type: application/json. Respons modul ini memakai ok; periksa HTTP status dan ok === true. API ID/hash Telegram tetap dikelola admin, tidak dikirim oleh pembeli. Endpoint website /noktel/... menggunakan cookie login dan token CSRF; integrasi eksternal memakai /api/noktel/....

Contoh Node.js — panggil dari backend

// Isi BASE_URL dengan domain website yang sedang digunakan.
const BASE_URL = process.env.AVERPAY_BASE_URL;
const API_KEY = process.env.AVERPAY_API_KEY;
async function noktel(path, body) {
  const r = await fetch(new URL(path, BASE_URL), {
    method: body === undefined ? 'GET' : 'POST',
    headers: {'x-api-key': API_KEY, 'Content-Type': 'application/json'},
    body: body === undefined ? undefined : JSON.stringify(body)
  });
  const d = await r.json();
  if (!r.ok || d.ok !== true) throw new Error(d.message || d.error || 'API gagal');
  return d;
}
const katalog = await noktel('/api/noktel/data');
const pilihan = katalog.groups.find(g => g.prefix === '1');
if (!pilihan) throw new Error('Stok ID 1 kosong');
// Simpan UUID sebelum request. Pakai UUID yang SAMA jika hasil request tidak diketahui.
const purchaseKey = require('node:crypto').randomUUID();
const order = await noktel('/api/noktel/buy', {
  prefix: pilihan.prefix, price: pilihan.price, purchaseKey
});
const pesanan = await noktel('/api/noktel/data');
// Nomor terdapat pada pesanan.orders yang _id-nya sama dengan order.orderId.
// Minta kode login di aplikasi Telegram, lalu cek minimal setiap 12 detik:
const kode = await noktel('/api/noktel/orders/' + order.orderId + '/otp', {});
// kode.otp === null berarti masih menunggu; password masih kosong.
// Setelah login BERHASIL, panggil /finish secara eksplisit.

Koneksi, percobaan ulang, dan error

  • Koneksi aktif dipakai ulang. Gangguan jaringan saat membaca OTP dicoba ulang satu kali memakai sesi tersimpan. Saldo tidak dipotong lagi saat cek kode.
  • Setelah 5 menit tanpa aktivitas, socket dapat ditutup untuk menghemat sumber daya. Ini bukan logout: sesi terenkripsi tetap tersimpan dan disambungkan kembali saat diperlukan, termasuk setelah server restart.
  • HTTP 503 / NOKTEL_CONNECTION_LOST: tunggu sesuai Retry-After, lalu cek kembali. HTTP 409 / NOKTEL_BUSY: akun sedang diproses. HTTP 409 / NOKTEL_SESSION_EXPIRED: sesi dicabut/kedaluwarsa, perlu bantuan admin.
  • HTTP 429 / TELEGRAM_FLOOD_WAIT: patuhi Retry-After. Jangan mencoba OTP/password atau kirim ulang terus-menerus. HTTP 400: periksa body, saldo, harga, stok, atau batas waktu.
  • Jika respons pembelian terputus, gunakan purchaseKey yang sama saat memeriksa/mengulangi request. UUID baru berarti pembelian baru. Pembelian tetap memerlukan MongoDB replica set/Atlas.
  • Resend pesanan tidak memaksa Telegram mengirim SMS: API mengembalikan requiresTelegramResend: true. Tekan kirim ulang pada aplikasi yang digunakan login.
  • Logout hanya membersihkan sesi website setelah Telegram mengonfirmasi keluar atau menyatakan sesi itu sudah tidak aktif. Kegagalan jaringan tidak menandai pesanan selesai.

Gagal menambahkan stok setelah API disimpan?

Tersimpan berarti format API sudah sesuai. Telegram memeriksa kecocokan API ID dan API HASH saat Kirim kode login. API_ID_INVALID berarti pasangan kredensial ditolak; ambil keduanya dari aplikasi yang sama di my.telegram.org/apps. API_ID_PUBLISHED_FLOOD berarti API dibatasi Telegram. TELEGRAM_FLOOD_WAIT harus menunggu durasi yang ditampilkan. NOKTEL_CONNECTION_LOST menunjukkan masalah koneksi server hosting ke Telegram.

Versi perbaikan memberi kesempatan SDK menyelesaikan perpindahan data center saat login. Setelah memperbarui source, jalankan npm install dan restart aplikasi, lalu muat ulang halaman admin. Pertahankan data/noktel.key atau NOKTEL_ENCRYPTION_KEY lama. Jika gagal, catat kode dan Ref di halaman admin; cocokkan dengan log [NOKTEL] di panel hosting. Jangan membagikan API HASH, OTP, password, atau file sesi.

Penerimaan kode berlaku 24 jam setelah pembelian. Simpan MongoDB dan kunci data/noktel.key pada penyimpanan persisten. Gunakan satu instance proses aplikasi untuk sesi Noktel. Penanganan error mengurangi gangguan; koneksi tetap bergantung pada jaringan dan layanan Telegram.

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. Panel punya masa expired (auto delete server & user) dan berstatus NON GARANSI.

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

Panel sekarang NON GARANSI, jadi endpoint ini selalu menolak klaim. Panel otomatis dihapus saat masa expired (expiresAt) habis.

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)."
}

Coin & Misi Mingguan

Setiap minggu (reset Senin 00:00 WIB) sistem memilih beberapa misi secara acak, sama untuk semua akun. Selesaikan misi, klaim coin, lalu tukar coin menjadi saldo. Semua endpoint memakai API Key akun yang sama dengan endpoint lain.

Cara progres misi bertambah:

  • transaction - setiap pembelian layanan berbayar yang memotong saldo (/api/nokos/order, /api/gacha-nokos/tarik, /api/pterodactyl/order, /api/premium/order, /api/sosmed/order, /api/produk/beli) dengan nominal minimal sesuai minimum_amount.
  • topup - setiap deposit yang berstatus paid, termasuk invoice dari /api/invoice.
  • like, comment, share, gift - hanya bisa dikerjakan lewat website (via_api: false); progresnya tetap terbaca di endpoint misi.

Alur otomatis yang disarankan: cek /api/coins/missions, kerjakan misi yang via_api: true, klaim saat status = ready lewat /api/coins/claim, lalu tukar lewat /api/coins/exchange. Hadiah coin acak sesuai rentang yang diatur admin, dan tiap misi hanya bisa diklaim sekali per minggu. Role merchant menerima hasil tukar di Saldo Top Up, role lain di Saldo. Jika fitur dimatikan admin, enabled bernilai false.

Ringkasan Coin & Misi

Coin akun, misi minggu ini beserta progres, dan paket tukar.

  • Method: GET
  • URL: /api/coins

Parameter:

  • apikey (string, wajib)

Contoh Request:

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

/*
Contoh response:
{
  "success": true,
  "data": {
    "enabled": true,
    "coins": 150,
    "wallet": "balance",
    "wallet_label": "Saldo",
    "week_key": "2026-10-19",
    "resets_at": "2026-10-25T17:00:00.000Z",
    "seconds_until_reset": 432000,
    "weekly_exchange_limit": 0,
    "exchanged_this_week": 0,
    "missions": [
      {
        "type": "transaction",
        "title": "Misi Transaksi",
        "description": "Lakukan 3 transaksi pembelian layanan",
        "target": 3,
        "progress": 3,
        "minimum_amount": 1000,
        "reward_min": 20,
        "reward_max": 100,
        "status": "ready",
        "claimed": false,
        "reward": null,
        "via_api": true,
        "api_endpoints": [
          "/api/nokos/order",
          "/api/pterodactyl/order",
          "/api/premium/order",
          "/api/sosmed/order",
          "/api/produk/beli"
        ]
      }
    ],
    "exchange_tiers": [
      {
        "tier_id": "6720a1b2c3d4e5f607182930",
        "coins": 1000,
        "rupiah": 500,
        "affordable": false
      }
    ]
  }
}
*/

Daftar Misi Minggu Ini

Versi ringan (tanpa paket tukar), cocok untuk polling. Status misi: in_progress, ready, claimed.

  • Method: GET
  • URL: /api/coins/missions

Parameter:

  • apikey (string, wajib)

Contoh Request:

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

/*
Contoh response:
{
  "success": true,
  "data": {
    "enabled": true,
    "week_key": "2026-10-19",
    "resets_at": "2026-10-25T17:00:00.000Z",
    "seconds_until_reset": 432000,
    "missions": [
      {
        "type": "topup",
        "title": "Misi Top Up Saldo",
        "description": "Top up saldo sebanyak 2 kali",
        "target": 2,
        "progress": 1,
        "minimum_amount": 10000,
        "reward_min": 50,
        "reward_max": 200,
        "status": "in_progress",
        "claimed": false,
        "reward": null,
        "via_api": true,
        "api_endpoints": [
          "/api/invoice"
        ]
      }
    ]
  }
}
*/

Klaim Hadiah Misi

Klaim coin untuk misi berstatus ready. Maksimal 20 permintaan per menit per akun.

  • Method: GET / POST
  • URL: /api/coins/claim

Parameter:

  • apikey (string, wajib)
  • type (string, wajib) - jenis misi: transaction, topup, like, comment, share, gift (alias: mission)

Contoh Request:

const axios = require('axios');
axios.get('BASE_URL/api/coins/claim?apikey=YOUR_API_KEY&type=transaction')
  .then(response => console.log(response.data));

/*
Contoh response:
{
  "success": true,
  "message": "Kamu mendapat 64 coin!",
  "data": {
    "type": "transaction",
    "reward": 64,
    "coins": 214
  }
}
*/

Tukar Coin jadi Saldo

Tukar coin sesuai paket pada exchange_tiers. Maksimal 10 permintaan per menit per akun; ada batas rupiah mingguan jika diatur admin.

  • Method: GET / POST
  • URL: /api/coins/exchange

Parameter:

  • apikey (string, wajib)
  • tier_id (string, wajib) - ID paket dari exchange_tiers (alias: tierId)

Contoh Request:

const axios = require('axios');
axios.get('BASE_URL/api/coins/exchange?apikey=YOUR_API_KEY&tier_id=TIER_ID')
  .then(response => console.log(response.data));

/*
Contoh response:
{
  "success": true,
  "message": "Berhasil! Saldo bertambah Rp 500.",
  "data": {
    "coins": 214,
    "rupiah": 500,
    "wallet": "Saldo",
    "balance": 25500
  }
}
*/

Riwayat Coin

Riwayat klaim misi (coins positif) dan penukaran (coins negatif), terbaru dulu.

  • Method: GET
  • URL: /api/coins/history

Parameter:

  • apikey (string, wajib)
  • limit (integer, opsional) - 1-50, default 20

Contoh Request:

const axios = require('axios');
axios.get('BASE_URL/api/coins/history?apikey=YOUR_API_KEY&limit=20')
  .then(response => console.log(response.data));

/*
Contoh response:
{
  "success": true,
  "data": [
    {
      "kind": "mission",
      "coins": 64,
      "rupiah": 0,
      "note": "Misi Transaksi",
      "created_at": "2026-10-20T08:00:00.000Z"
    },
    {
      "kind": "exchange",
      "coins": -1000,
      "rupiah": 500,
      "note": "Tukar 1.000 coin",
      "created_at": "2026-10-19T08:00:00.000Z"
    }
  ]
}
*/