{
  "name": "AVERPAY — Dokumentasi API",
  "version": "1.0",
  "generated_at": "2026-10-22T18:59:34.198Z",
  "base_url": "https://averpay.web.id",
  "spec_url": "https://averpay.web.id/docs.json",
  "authentication": {
    "type": "API Key",
    "how_to_get": "Login ke dashboard, buka menu Profil, salin API Key.",
    "accepted": [
      "query: apikey=KEY",
      "query: api_key=KEY",
      "header: x-api-key: KEY"
    ],
    "security_note": "Jangan taruh API Key di frontend/aplikasi publik. Panggil API dari backend."
  },
  "conventions": {
    "success": "{ \"success\": true, \"data\": {...} } (beberapa endpoint mengembalikan field langsung tanpa \"data\")",
    "error": "{ \"error\": \"pesan error\" } — cek field \"error\" / \"success\" sebelum memproses data",
    "note_auth_errors": "HTTP 401: API key hilang/tidak valid."
  },
  "webhook": {
    "description": "Jika Callback URL diisi di Profil, server mengirim POST JSON ke URL tersebut (timeout 5 detik, tanpa retry) setiap ada perubahan status.",
    "method": "POST",
    "content_type": "application/json",
    "body_shape": {
      "event": "string",
      "data": "object",
      "timestamp": "ISO 8601"
    },
    "events": {
      "deposit.paid": {
        "invoice_id": "string",
        "amount": "integer",
        "fee": "integer",
        "total": "integer",
        "status": "paid",
        "balance_after": "integer"
      },
      "withdraw.success": {
        "withdraw_id": "string",
        "amount": "integer",
        "fee": "integer",
        "method": "string",
        "status": "success",
        "balance_after": "integer"
      },
      "withdraw.rejected": {
        "withdraw_id": "string",
        "amount": "integer",
        "fee": "integer",
        "method": "string",
        "reason": "string",
        "status": "rejected",
        "balance_after": "integer"
      }
    },
    "note": "Selalu verifikasi ulang status lewat GET /api/invoice/status sebelum memberi barang/saldo; jangan hanya percaya isi webhook."
  },
  "endpoints": [
    {
      "id": "balance",
      "group": "Saldo & Topup",
      "title": "Cek Saldo",
      "method": "GET",
      "path": "/api/balance",
      "url": "https://averpay.web.id/api/balance",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/balance?apikey=YOUR_API_KEY'",
      "response_example": {
        "username": "your_username",
        "email": "name@gmail.com",
        "balance": 150000
      }
    },
    {
      "id": "invoice_create",
      "group": "Saldo & Topup",
      "title": "Buat Invoice (QRIS)",
      "method": "GET",
      "path": "/api/invoice",
      "url": "https://averpay.web.id/api/invoice",
      "access": "Semua akun",
      "description": "Membuat invoice deposit QRIS. Minimal sesuai pengaturan admin, maksimal Rp 1.000.000.",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "amount",
          "in": "query",
          "type": "integer",
          "required": true,
          "description": "Nominal deposit (Rupiah)."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/invoice?apikey=YOUR_API_KEY&amount=AMOUNT'",
      "response_example": {
        "success": true,
        "invoice_id": "64c8d9e...",
        "amount": 50000,
        "fee": 500,
        "total": 50500,
        "qris_image": "https://...",
        "payment_link": "https://.../payment/64c8d9e...",
        "expired_at": "2025-01-01 12:00:00",
        "callback_url": ""
      }
    },
    {
      "id": "invoice_status",
      "group": "Saldo & Topup",
      "title": "Cek Status Invoice",
      "method": "GET",
      "path": "/api/invoice/status",
      "url": "https://averpay.web.id/api/invoice/status",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "invoice_id",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "ID dari endpoint Buat Invoice (alias: id)."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/invoice/status?apikey=YOUR_API_KEY&invoice_id=INVOICE_ID'",
      "response_example": {
        "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"
      }
    },
    {
      "id": "withdraw_methods",
      "group": "Penarikan",
      "title": "Metode Withdraw",
      "method": "GET",
      "path": "/api/withdraw/methods",
      "url": "https://averpay.web.id/api/withdraw/methods",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/withdraw/methods?apikey=YOUR_API_KEY'",
      "response_example": {
        "manual_methods": [
          {
            "name": "Dana",
            "method": "dana",
            "fee": 100,
            "min": 10000,
            "max": 1000000
          }
        ],
        "instant_methods": [
          {
            "name": "Dana",
            "method": "dana",
            "fee": 100,
            "open_denom": false,
            "products": [
              {
                "code": "d10",
                "amount": 10000
              }
            ]
          },
          {
            "name": "DANA Bebas",
            "method": "dana bebas",
            "fee": 100,
            "open_denom": true,
            "min": 10000,
            "max": 1000000
          }
        ]
      }
    },
    {
      "id": "withdraw_create",
      "group": "Penarikan",
      "title": "Melakukan Withdraw",
      "method": "GET",
      "path": "/api/withdraw",
      "url": "https://averpay.web.id/api/withdraw",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "amount",
          "in": "query",
          "type": "integer",
          "required": true,
          "description": "Nominal penarikan. Untuk instant metode open_denom:true (Bebas Nominal) bebas di antara min-max metode; untuk instant nominal tetap harus cocok salah satu produk."
        },
        {
          "name": "method",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "Kode metode dari endpoint Metode Withdraw."
        },
        {
          "name": "account_number",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "Nomor rekening / e-wallet tujuan."
        },
        {
          "name": "instant",
          "in": "query",
          "type": "boolean",
          "required": false,
          "description": "Default false (manual, diproses admin)."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/withdraw?apikey=YOUR_API_KEY&amount=AMOUNT&method=METHOD&account_number=ACCOUNT_NUMBER'",
      "response_example": {
        "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"
        }
      }
    },
    {
      "id": "withdraw_status",
      "group": "Penarikan",
      "title": "Cek Status Withdraw",
      "method": "GET",
      "path": "/api/withdraw/status",
      "url": "https://averpay.web.id/api/withdraw/status",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "id",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "ID withdraw."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/withdraw/status?apikey=YOUR_API_KEY&id=ID'",
      "response_example": {
        "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"
      }
    },
    {
      "id": "nokos_servers",
      "group": "Nokos",
      "title": "Pilih Server",
      "method": "GET",
      "path": "/api/nokos/servers",
      "url": "https://averpay.web.id/api/nokos/servers",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/nokos/servers?apikey=YOUR_API_KEY'"
    },
    {
      "id": "nokos_countries",
      "group": "Nokos",
      "title": "Daftar Lengkap Negara",
      "method": "GET",
      "path": "/api/nokos/countries",
      "url": "https://averpay.web.id/api/nokos/countries",
      "access": "Semua akun",
      "description": "Daftar lengkap 249 negara/wilayah ISO ditambah Kosovo (xk). Field code dipakai untuk request; Britania Raya memakai uk sesuai dokumentasi provider. Ketersediaan dan stok mengikuti server/layanan.",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/nokos/countries?apikey=YOUR_API_KEY'"
    },
    {
      "id": "nokos_services",
      "group": "Nokos",
      "title": "Layanan per Server",
      "method": "GET",
      "path": "/api/nokos/services",
      "url": "https://averpay.web.id/api/nokos/services",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "server",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "ekonomi, premium, khusus, atau wa_luar."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/nokos/services?apikey=YOUR_API_KEY&server=SERVER'"
    },
    {
      "id": "nokos_products",
      "group": "Nokos",
      "title": "Harga dan Stok",
      "method": "GET",
      "path": "/api/nokos/products",
      "url": "https://averpay.web.id/api/nokos/products",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "server",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "Server terpilih."
        },
        {
          "name": "service",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "Kode dari services; server khusus dapat berupa angka dalam string."
        },
        {
          "name": "country",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "Kode negara, mis. id, my, sg, us, uk."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/nokos/products?apikey=YOUR_API_KEY&server=SERVER&service=SERVICE&country=COUNTRY'",
      "response_example": {
        "success": true,
        "data": [
          {
            "id": "opaque-id-dari-provider",
            "quote_id": "abcdef0123456789abcdef0123456789abcd",
            "price": 5400,
            "stock": 318,
            "server": "ekonomi"
          }
        ]
      }
    },
    {
      "id": "nokos_order",
      "group": "Nokos",
      "title": "Beli Nomor",
      "method": "POST",
      "path": "/api/nokos/order",
      "url": "https://averpay.web.id/api/nokos/order",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "quote_id",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "Dari products, berlaku 5 menit untuk akun yang sama. Harga rupiah sudah termasuk markup."
        },
        {
          "name": "operator",
          "in": "query",
          "type": "string",
          "required": false,
          "description": "Premium saja: any, telkomsel, indosat, axis, three, smartfren, byu."
        },
        {
          "name": "voucherCode",
          "in": "query",
          "type": "string",
          "required": false,
          "description": "Kode voucher aktif untuk layanan ini, contoh VOCHER10. Harga dipotong sesuai persen voucher. Top up, penarikan, dan transfer saldo tidak termasuk."
        }
      ],
      "example_request": "curl -X POST 'https://averpay.web.id/api/nokos/order?apikey=YOUR_API_KEY'",
      "response_example": {
        "success": true,
        "data": {
          "_id": "NOKOSB...",
          "phoneNumber": "6281234567890",
          "status": "ACTIVE",
          "sellPrice": 5400
        }
      }
    },
    {
      "id": "nokos_status",
      "group": "Nokos",
      "title": "Cek OTP",
      "method": "GET",
      "path": "/api/nokos/status",
      "url": "https://averpay.web.id/api/nokos/status",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "id",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "ID lokal _id dari order. Poll setiap 3–5 detik. OTP pertama: otpCode, kedua: otpCode2."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/nokos/status?apikey=YOUR_API_KEY&id=ID'"
    },
    {
      "id": "nokos_cancel",
      "group": "Nokos",
      "title": "Batalkan Nomor",
      "method": "POST",
      "path": "/api/nokos/cancel",
      "url": "https://averpay.web.id/api/nokos/cancel",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "id",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "ID lokal. Minimal 120 detik, belum ada OTP. Refund satu kali ke saldo asal."
        }
      ],
      "example_request": "curl -X POST 'https://averpay.web.id/api/nokos/cancel?apikey=YOUR_API_KEY'"
    },
    {
      "id": "nokos_resend",
      "group": "Nokos",
      "title": "Minta OTP Kedua",
      "method": "POST",
      "path": "/api/nokos/resend",
      "url": "https://averpay.web.id/api/nokos/resend",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "id",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "ID lokal. Setelah OTP pertama; maksimal sekali, tanpa biaya tambahan."
        }
      ],
      "example_request": "curl -X POST 'https://averpay.web.id/api/nokos/resend?apikey=YOUR_API_KEY'"
    },
    {
      "id": "gacha_status",
      "group": "Gacha Nokos",
      "title": "Cek Status Akses",
      "method": "GET",
      "path": "/api/gacha-nokos/status",
      "url": "https://averpay.web.id/api/gacha-nokos/status",
      "access": "Hanya akun yang disetujui admin",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/gacha-nokos/status?apikey=YOUR_API_KEY'"
    },
    {
      "id": "gacha_tarik",
      "group": "Gacha Nokos",
      "title": "Tarik Nomor Acak",
      "method": "POST",
      "path": "/api/gacha-nokos/tarik",
      "url": "https://averpay.web.id/api/gacha-nokos/tarik",
      "access": "Hanya akun yang disetujui admin",
      "description": "Saldo terpotong sesuai biaya per-tarik yang diset admin (0 = gratis).",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "voucherCode",
          "in": "query",
          "type": "string",
          "required": false,
          "description": "Kode voucher aktif untuk layanan ini, contoh VOCHER10. Harga dipotong sesuai persen voucher. Top up, penarikan, dan transfer saldo tidak termasuk."
        }
      ],
      "example_request": "curl -X POST 'https://averpay.web.id/api/gacha-nokos/tarik?apikey=YOUR_API_KEY'"
    },
    {
      "id": "gacha_otp",
      "group": "Gacha Nokos",
      "title": "Cek OTP",
      "method": "GET",
      "path": "/api/gacha-nokos/otp",
      "url": "https://averpay.web.id/api/gacha-nokos/otp",
      "access": "Hanya akun yang disetujui admin",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "id",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "ID transaksi dari Tarik."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/gacha-nokos/otp?apikey=YOUR_API_KEY&id=ID'"
    },
    {
      "id": "gacha_release",
      "group": "Gacha Nokos",
      "title": "Lepas Nomor",
      "method": "POST",
      "path": "/api/gacha-nokos/release",
      "url": "https://averpay.web.id/api/gacha-nokos/release",
      "access": "Hanya akun yang disetujui admin",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "id",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "ID transaksi yang ingin dilepas lebih awal."
        }
      ],
      "example_request": "curl -X POST 'https://averpay.web.id/api/gacha-nokos/release?apikey=YOUR_API_KEY'"
    },
    {
      "id": "gacha_riwayat",
      "group": "Gacha Nokos",
      "title": "Riwayat Tarik",
      "method": "GET",
      "path": "/api/gacha-nokos/riwayat",
      "url": "https://averpay.web.id/api/gacha-nokos/riwayat",
      "access": "Hanya akun yang disetujui admin",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/gacha-nokos/riwayat?apikey=YOUR_API_KEY'"
    },
    {
      "id": "fixno_status",
      "group": "Fix No / Unban WA",
      "title": "Cek Status Akses & Paket Global",
      "method": "GET",
      "path": "/api/fix-no/status",
      "url": "https://averpay.web.id/api/fix-no/status",
      "access": "Hanya akun dengan akses Fix No",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/fix-no/status?apikey=YOUR_API_KEY'"
    },
    {
      "id": "fixno_paket",
      "group": "Fix No / Unban WA",
      "title": "Daftar Paket Sender Global",
      "method": "GET",
      "path": "/api/fix-no/paket",
      "url": "https://averpay.web.id/api/fix-no/paket",
      "access": "Hanya akun dengan akses Fix No",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/fix-no/paket?apikey=YOUR_API_KEY'"
    },
    {
      "id": "fixno_kirim",
      "group": "Fix No / Unban WA",
      "title": "Kirim Permohonan",
      "method": "POST",
      "path": "/api/fix-no/kirim",
      "url": "https://averpay.web.id/api/fix-no/kirim",
      "access": "Hanya akun dengan akses Fix No",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "jenis",
          "in": "body",
          "type": "string",
          "required": true,
          "description": "fix_merah atau unban."
        },
        {
          "name": "phone_number",
          "in": "body",
          "type": "string",
          "required": true,
          "description": "Nomor WhatsApp yang kena merah/banned."
        },
        {
          "name": "sender_type",
          "in": "body",
          "type": "string",
          "required": true,
          "description": "private atau global."
        },
        {
          "name": "private_email",
          "in": "body",
          "type": "string",
          "required": false,
          "description": "Wajib jika sender_type = private (Gmail)."
        },
        {
          "name": "private_password",
          "in": "body",
          "type": "string",
          "required": false,
          "description": "Wajib jika sender_type = private (App Password)."
        }
      ],
      "example_request": "curl -X POST 'https://averpay.web.id/api/fix-no/kirim?apikey=YOUR_API_KEY' -d \"jenis=JENIS&phone_number=PHONE_NUMBER&sender_type=SENDER_TYPE\""
    },
    {
      "id": "fixno_cek",
      "group": "Fix No / Unban WA",
      "title": "Cek Status Pengiriman",
      "method": "GET",
      "path": "/api/fix-no/cek/{id}",
      "url": "https://averpay.web.id/api/fix-no/cek/{id}",
      "access": "Hanya akun dengan akses Fix No",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "id",
          "in": "path",
          "type": "string",
          "required": true,
          "description": "ID permohonan."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/fix-no/cek/ID?apikey=YOUR_API_KEY'"
    },
    {
      "id": "fixno_riwayat",
      "group": "Fix No / Unban WA",
      "title": "Riwayat Permohonan",
      "method": "GET",
      "path": "/api/fix-no/riwayat",
      "url": "https://averpay.web.id/api/fix-no/riwayat",
      "access": "Hanya akun dengan akses Fix No",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/fix-no/riwayat?apikey=YOUR_API_KEY'"
    },
    {
      "id": "ptero_panels",
      "group": "Panel Hosting",
      "title": "Daftar Server Panel",
      "method": "GET",
      "path": "/api/pterodactyl/panels",
      "url": "https://averpay.web.id/api/pterodactyl/panels",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/pterodactyl/panels?apikey=YOUR_API_KEY'"
    },
    {
      "id": "ptero_packages",
      "group": "Panel Hosting",
      "title": "Daftar Paket",
      "method": "GET",
      "path": "/api/pterodactyl/packages",
      "url": "https://averpay.web.id/api/pterodactyl/packages",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "panel_id",
          "in": "query",
          "type": "string",
          "required": false,
          "description": "Filter paket milik satu server panel."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/pterodactyl/packages?apikey=YOUR_API_KEY'"
    },
    {
      "id": "ptero_eggs",
      "group": "Panel Hosting",
      "title": "Daftar Egg",
      "method": "GET",
      "path": "/api/pterodactyl/eggs",
      "url": "https://averpay.web.id/api/pterodactyl/eggs",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "panel_id",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "Dari Daftar Server Panel."
        },
        {
          "name": "package_id",
          "in": "query",
          "type": "string",
          "required": false,
          "description": "Dari Daftar Paket; egg mengikuti Nest & egg default paket."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/pterodactyl/eggs?apikey=YOUR_API_KEY&panel_id=PANEL_ID'"
    },
    {
      "id": "ptero_order",
      "group": "Panel Hosting",
      "title": "Beli Panel",
      "method": "GET",
      "path": "/api/pterodactyl/order",
      "url": "https://averpay.web.id/api/pterodactyl/order",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "panel_id",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "Dari Daftar Server Panel."
        },
        {
          "name": "package_id",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "Dari Daftar Paket."
        },
        {
          "name": "username",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "Huruf/angka/underscore, 3-20 karakter."
        },
        {
          "name": "email",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "Email pemilik akun panel."
        },
        {
          "name": "password",
          "in": "query",
          "type": "string",
          "required": false,
          "description": "8-32 karakter tanpa spasi; jika kosong dibuatkan otomatis dan dikembalikan di response."
        },
        {
          "name": "egg_id",
          "in": "query",
          "type": "string",
          "required": false,
          "description": "Opsional; dibaca server, lihat Daftar Egg."
        },
        {
          "name": "voucherCode",
          "in": "query",
          "type": "string",
          "required": false,
          "description": "Kode voucher aktif untuk layanan ini, contoh VOCHER10. Harga dipotong sesuai persen voucher. Top up, penarikan, dan transfer saldo tidak termasuk."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/pterodactyl/order?apikey=YOUR_API_KEY&panel_id=PANEL_ID&package_id=PACKAGE_ID&username=USERNAME&email=EMAIL'"
    },
    {
      "id": "ptero_status",
      "group": "Panel Hosting",
      "title": "Cek Status Panel",
      "method": "GET",
      "path": "/api/pterodactyl/status",
      "url": "https://averpay.web.id/api/pterodactyl/status",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "id",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "ID transaksi dari Beli Panel."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/pterodactyl/status?apikey=YOUR_API_KEY&id=ID'"
    },
    {
      "id": "ptero_claim",
      "group": "Panel Hosting",
      "title": "Klaim Garansi",
      "method": "GET",
      "path": "/api/pterodactyl/claim-warranty",
      "url": "https://averpay.web.id/api/pterodactyl/claim-warranty",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "id",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "ID transaksi."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/pterodactyl/claim-warranty?apikey=YOUR_API_KEY&id=ID'"
    },
    {
      "id": "premium_products",
      "group": "Aplikasi Premium",
      "title": "Daftar Produk Premium",
      "method": "GET",
      "path": "/api/premium/products",
      "url": "https://averpay.web.id/api/premium/products",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/premium/products?apikey=YOUR_API_KEY'"
    },
    {
      "id": "premium_stock",
      "group": "Aplikasi Premium",
      "title": "Cek Stok",
      "method": "GET",
      "path": "/api/premium/stock",
      "url": "https://averpay.web.id/api/premium/stock",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "product_id",
          "in": "query",
          "type": "integer",
          "required": true,
          "description": "Dari Daftar Produk."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/premium/stock?apikey=YOUR_API_KEY&product_id=PRODUCT_ID'"
    },
    {
      "id": "premium_order",
      "group": "Aplikasi Premium",
      "title": "Buat Pesanan Premium",
      "method": "GET",
      "path": "/api/premium/order",
      "url": "https://averpay.web.id/api/premium/order",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "product_id",
          "in": "query",
          "type": "integer",
          "required": true,
          "description": "Dari Daftar Produk."
        },
        {
          "name": "qty",
          "in": "query",
          "type": "integer",
          "required": false,
          "description": "Default 1."
        },
        {
          "name": "voucherCode",
          "in": "query",
          "type": "string",
          "required": false,
          "description": "Kode voucher aktif untuk layanan ini, contoh VOCHER10. Harga dipotong sesuai persen voucher. Top up, penarikan, dan transfer saldo tidak termasuk."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/premium/order?apikey=YOUR_API_KEY&product_id=PRODUCT_ID'"
    },
    {
      "id": "premium_status",
      "group": "Aplikasi Premium",
      "title": "Cek Status Premium",
      "method": "GET",
      "path": "/api/premium/status",
      "url": "https://averpay.web.id/api/premium/status",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "id",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "ID transaksi dari Buat Pesanan."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/premium/status?apikey=YOUR_API_KEY&id=ID'"
    },
    {
      "id": "sosmed_services",
      "group": "Suntik Sosmed",
      "title": "Daftar Layanan Sosmed",
      "method": "GET",
      "path": "/api/sosmed/services",
      "url": "https://averpay.web.id/api/sosmed/services",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/sosmed/services?apikey=YOUR_API_KEY'"
    },
    {
      "id": "sosmed_order",
      "group": "Suntik Sosmed",
      "title": "Buat Pesanan Sosmed",
      "method": "GET",
      "path": "/api/sosmed/order",
      "url": "https://averpay.web.id/api/sosmed/order",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "service_id",
          "in": "query",
          "type": "integer",
          "required": true,
          "description": "Dari Daftar Layanan."
        },
        {
          "name": "target",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "Link/username/ID target."
        },
        {
          "name": "quantity",
          "in": "query",
          "type": "integer",
          "required": true,
          "description": "Harus di antara min/max layanan."
        },
        {
          "name": "voucherCode",
          "in": "query",
          "type": "string",
          "required": false,
          "description": "Kode voucher aktif untuk layanan ini, contoh VOCHER10. Harga dipotong sesuai persen voucher. Top up, penarikan, dan transfer saldo tidak termasuk."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/sosmed/order?apikey=YOUR_API_KEY&service_id=SERVICE_ID&target=TARGET&quantity=QUANTITY'"
    },
    {
      "id": "sosmed_status",
      "group": "Suntik Sosmed",
      "title": "Cek Status Sosmed",
      "method": "GET",
      "path": "/api/sosmed/status",
      "url": "https://averpay.web.id/api/sosmed/status",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "id",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "ID transaksi."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/sosmed/status?apikey=YOUR_API_KEY&id=ID'"
    },
    {
      "id": "sosmed_refill",
      "group": "Suntik Sosmed",
      "title": "Ajukan Refill",
      "method": "GET",
      "path": "/api/sosmed/refill",
      "url": "https://averpay.web.id/api/sosmed/refill",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "id",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "ID transaksi Suntik Sosmed (bukan ID refill)."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/sosmed/refill?apikey=YOUR_API_KEY&id=ID'"
    },
    {
      "id": "sosmed_refill_status",
      "group": "Suntik Sosmed",
      "title": "Cek Status Refill",
      "method": "GET",
      "path": "/api/sosmed/refill/status",
      "url": "https://averpay.web.id/api/sosmed/refill/status",
      "access": "Semua akun",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "id",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "ID transaksi Suntik Sosmed (bukan ID refill)."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/sosmed/refill/status?apikey=YOUR_API_KEY&id=ID'"
    },
    {
      "id": "produk_list",
      "group": "Produk & Reseller",
      "title": "Daftar Produk",
      "method": "GET",
      "path": "/api/produk/list",
      "url": "https://averpay.web.id/api/produk/list",
      "access": "Khusus role Reseller / Admin Panel",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/produk/list?apikey=YOUR_API_KEY'"
    },
    {
      "id": "produk_beli",
      "group": "Produk & Reseller",
      "title": "Beli Produk",
      "method": "GET",
      "path": "/api/produk/beli",
      "url": "https://averpay.web.id/api/produk/beli",
      "access": "Khusus role Reseller / Admin Panel",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "id",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "ID produk dari Daftar Produk (alias: produk_id)."
        },
        {
          "name": "voucherCode",
          "in": "query",
          "type": "string",
          "required": false,
          "description": "Kode voucher aktif untuk layanan ini, contoh VOCHER10. Harga dipotong sesuai persen voucher. Top up, penarikan, dan transfer saldo tidak termasuk."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/produk/beli?apikey=YOUR_API_KEY&id=ID'"
    },
    {
      "id": "produk_status",
      "group": "Produk & Reseller",
      "title": "Cek Status Produk",
      "method": "GET",
      "path": "/api/produk/status",
      "url": "https://averpay.web.id/api/produk/status",
      "access": "Khusus role Reseller / Admin Panel",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "id",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "order_id dari Beli Produk (alias: order_id)."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/produk/status?apikey=YOUR_API_KEY&id=ID'"
    },
    {
      "id": "panel_servers",
      "group": "Produk & Reseller",
      "title": "Daftar Server Panel Role",
      "method": "GET",
      "path": "/api/panel/servers",
      "url": "https://averpay.web.id/api/panel/servers",
      "access": "Khusus role Reseller / Admin Panel",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/panel/servers?apikey=YOUR_API_KEY'"
    },
    {
      "id": "panel_eggs",
      "group": "Produk & Reseller",
      "title": "Daftar Egg Server",
      "method": "GET",
      "path": "/api/panel/eggs",
      "url": "https://averpay.web.id/api/panel/eggs",
      "access": "Khusus role Reseller / Admin Panel",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "slot",
          "in": "query",
          "type": "integer",
          "required": true,
          "description": "1, 2, atau 3 dari Daftar Server."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/panel/eggs?apikey=YOUR_API_KEY&slot=SLOT'"
    },
    {
      "id": "panel_add_server",
      "group": "Produk & Reseller",
      "title": "Tambah Server",
      "method": "POST",
      "path": "/api/panel/add-server",
      "url": "https://averpay.web.id/api/panel/add-server",
      "access": "Khusus role Reseller",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "slot",
          "in": "body",
          "type": "integer",
          "required": true,
          "description": "1, 2, atau 3."
        },
        {
          "name": "account_id",
          "in": "body",
          "type": "integer",
          "required": true,
          "description": "ID user Pterodactyl yang sudah dibuat."
        },
        {
          "name": "egg_id",
          "in": "body",
          "type": "integer",
          "required": false,
          "description": "Jika kosong/tidak valid, memakai egg default server."
        }
      ],
      "example_request": "curl -X POST 'https://averpay.web.id/api/panel/add-server?apikey=YOUR_API_KEY' -d \"slot=SLOT&account_id=ACCOUNT_ID\""
    },
    {
      "id": "panel_create_admin",
      "group": "Produk & Reseller",
      "title": "Buat Akun Admin Panel",
      "method": "POST",
      "path": "/api/panel/create-admin",
      "url": "https://averpay.web.id/api/panel/create-admin",
      "access": "Khusus role Admin Panel",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "slot",
          "in": "body",
          "type": "integer",
          "required": true,
          "description": "Server tujuan."
        },
        {
          "name": "username",
          "in": "body",
          "type": "string",
          "required": true,
          "description": "Huruf/angka/underscore, 3-20 karakter."
        },
        {
          "name": "email",
          "in": "body",
          "type": "string",
          "required": true,
          "description": "Email akun admin."
        }
      ],
      "example_request": "curl -X POST 'https://averpay.web.id/api/panel/create-admin?apikey=YOUR_API_KEY' -d \"slot=SLOT&username=USERNAME&email=EMAIL\""
    },
    {
      "id": "coins_state",
      "group": "Coin & Misi",
      "title": "Ringkasan Coin & Misi",
      "method": "GET",
      "path": "/api/coins",
      "url": "https://averpay.web.id/api/coins",
      "access": "Semua akun",
      "description": "Saldo coin, misi minggu ini beserta progres, dan paket tukar coin. Misi dipilih acak tiap minggu (reset Senin 00:00 WIB) dan sama untuk semua akun. Field status misi: in_progress, ready (siap diklaim), claimed. Misi bertipe via_api:true bisa dikerjakan lewat endpoint pada api_endpoints; misi sosial (like, komentar, share, gift) hanya bisa dikerjakan di website.",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/coins?apikey=YOUR_API_KEY'",
      "response_example": {
        "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 Pembelian Layanan",
              "description": "Beli layanan sebanyak 3 kali",
              "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/gacha-nokos/tarik",
                "/api/pterodactyl/order",
                "/api/premium/order",
                "/api/sosmed/order",
                "/api/produk/beli"
              ]
            }
          ],
          "exchange_tiers": [
            {
              "tier_id": "6720a1b2c3d4e5f607182930",
              "coins": 1000,
              "rupiah": 500,
              "affordable": false
            }
          ]
        }
      }
    },
    {
      "id": "coins_missions",
      "group": "Coin & Misi",
      "title": "Daftar Misi Minggu Ini",
      "method": "GET",
      "path": "/api/coins/missions",
      "url": "https://averpay.web.id/api/coins/missions",
      "access": "Semua akun",
      "description": "Hanya daftar misi + progres (ringan, cocok untuk polling). Progres bertambah otomatis saat akun melakukan transaksi pembelian layanan (minimal nominal sesuai misi) atau top up saldo lewat API maupun website.",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/coins/missions?apikey=YOUR_API_KEY'",
      "response_example": {
        "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"
              ]
            }
          ]
        }
      }
    },
    {
      "id": "coins_claim",
      "group": "Coin & Misi",
      "title": "Klaim Hadiah Misi",
      "method": "GET",
      "path": "/api/coins/claim",
      "url": "https://averpay.web.id/api/coins/claim",
      "access": "Semua akun",
      "description": "Klaim coin untuk misi berstatus ready. Hadiah acak di antara reward_min dan reward_max, satu kali per misi per minggu. Bisa dipanggil dengan GET atau POST. Batas 20 klaim per menit per akun.",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "type",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "Jenis misi dari field type (transaction, topup, like, comment, share, gift). Alias: mission."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/coins/claim?apikey=YOUR_API_KEY&type=TYPE'",
      "response_example": {
        "success": true,
        "message": "Kamu mendapat 64 coin!",
        "data": {
          "type": "transaction",
          "reward": 64,
          "coins": 214
        }
      }
    },
    {
      "id": "coins_exchange",
      "group": "Coin & Misi",
      "title": "Tukar Coin jadi Saldo",
      "method": "GET",
      "path": "/api/coins/exchange",
      "url": "https://averpay.web.id/api/coins/exchange",
      "access": "Semua akun",
      "description": "Menukar coin sesuai paket pada exchange_tiers. Role merchant masuk ke Saldo Top Up, role lain ke Saldo. Bisa dipanggil dengan GET atau POST. Batas 10 penukaran per menit per akun.",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "tier_id",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "ID paket dari exchange_tiers. Alias: tierId."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/coins/exchange?apikey=YOUR_API_KEY&tier_id=TIER_ID'",
      "response_example": {
        "success": true,
        "message": "Berhasil! Saldo bertambah Rp 500.",
        "data": {
          "coins": 214,
          "rupiah": 500,
          "wallet": "Saldo",
          "balance": 25500
        }
      }
    },
    {
      "id": "coins_history",
      "group": "Coin & Misi",
      "title": "Riwayat Coin",
      "method": "GET",
      "path": "/api/coins/history",
      "url": "https://averpay.web.id/api/coins/history",
      "access": "Semua akun",
      "description": "Riwayat klaim misi (coins positif) dan penukaran (coins negatif), terbaru dulu.",
      "parameters": [
        {
          "name": "apikey",
          "in": "query",
          "type": "string",
          "required": true,
          "description": "API Key akun (menu Profil). Alternatif: header x-api-key, atau parameter api_key."
        },
        {
          "name": "limit",
          "in": "query",
          "type": "integer",
          "required": false,
          "description": "Jumlah data, 1-50. Default 20."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.web.id/api/coins/history?apikey=YOUR_API_KEY'",
      "response_example": {
        "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"
          }
        ]
      }
    }
  ],
  "ai_prompts": [
    {
      "id": "website-lengkap",
      "title": "Website Payment Gateway Lengkap",
      "description": "Frontend + backend: checkout QRIS, status otomatis, dan halaman saldo.",
      "prompt": "Buatkan website payment gateway (checkout QRIS) yang terhubung ke API AVERPAY di https://averpay.web.id.\n\nDokumentasi lengkap (JSON): https://averpay.web.id/docs.json\nBaca dokumentasi itu dulu dan ikuti persis nama endpoint, parameter, dan format response-nya. Jangan mengarang endpoint.\n\nFitur yang saya mau:\n1. Halaman checkout: input nominal -> panggil GET /api/invoice -> tampilkan gambar QRIS (qris_image), total bayar, dan hitung mundur sampai expired_at.\n2. Cek status otomatis tiap 5 detik lewat GET /api/invoice/status sampai status = paid atau kedaluwarsa, lalu tampilkan halaman sukses.\n3. Halaman dashboard: saldo (GET /api/balance) dan riwayat invoice yang dibuat lewat website ini.\n4. Endpoint webhook (POST /webhook/averpay) untuk menerima event deposit.paid; verifikasi ulang ke /api/invoice/status sebelum menandai lunas.\n\nAturan penting:\n- API Key HANYA dipakai di backend (simpan di file .env), jangan pernah muncul di kode frontend.\n- Browser memanggil backend saya, backend saya yang memanggil API AVERPAY.\n- Validasi nominal di server. Tampilkan pesan error yang ramah dari field \"error\".\n- Gunakan Node.js + Express dan HTML/CSS/JS biasa. Beri struktur folder, isi tiap file, dan cara menjalankannya."
    },
    {
      "id": "integrasi-checkout",
      "title": "Integrasi Checkout ke Toko yang Sudah Ada",
      "description": "Tambahkan pembayaran QRIS ke aplikasi/toko online milik kamu.",
      "prompt": "Saya sudah punya aplikasi toko online. Tambahkan pembayaran QRIS memakai API AVERPAY (https://averpay.web.id).\nDokumentasi (JSON): https://averpay.web.id/docs.json\n\nYang perlu dibuat:\n- Fungsi createInvoice(orderId, amount) memanggil GET /api/invoice, simpan invoice_id di tabel pesanan.\n- Fungsi checkInvoice(invoiceId) memanggil GET /api/invoice/status.\n- 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).\n- Cron/job ulang untuk pesanan pending yang webhook-nya tidak masuk.\n\nBahasa/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."
    },
    {
      "id": "bot-topup",
      "title": "Bot Telegram / WhatsApp Top-up",
      "description": "Bot yang bisa cek saldo, buat QRIS, dan cek status pembayaran.",
      "prompt": "Buatkan bot [ISI: Telegram / WhatsApp] yang terhubung ke API AVERPAY di https://averpay.web.id.\nDokumentasi (JSON): https://averpay.web.id/docs.json\n\nPerintah bot:\n- /saldo -> GET /api/balance\n- /topup <nominal> -> GET /api/invoice, kirim gambar QRIS dan total bayar\n- /cek <invoice_id> -> GET /api/invoice/status\n- Otomatis kirim notifikasi ke chat begitu invoice berstatus paid (polling tiap 5-10 detik, berhenti saat expired).\n\nAPI Key disimpan di .env. Tambahkan penanganan error dari field \"error\" dan rate limit sederhana per pengguna. Berikan kode lengkap + cara menjalankan."
    },
    {
      "id": "dashboard-merchant",
      "title": "Dashboard Merchant + Withdraw",
      "description": "Panel untuk memantau saldo, membuat invoice, dan menarik saldo.",
      "prompt": "Buatkan dashboard merchant sederhana di atas API AVERPAY (https://averpay.web.id). Dokumentasi (JSON): https://averpay.web.id/docs.json\n\nHalaman:\n1. Ringkasan: saldo dari GET /api/balance.\n2. Buat invoice: nominal -> GET /api/invoice, tampilkan QRIS dan status live.\n3. Withdraw: ambil GET /api/withdraw/methods, tampilkan fee/min/max per metode, lalu GET /api/withdraw; halaman status memakai GET /api/withdraw/status.\n4. Penerima webhook untuk deposit.paid, withdraw.success, withdraw.rejected yang memperbarui tampilan.\n\nSemua panggilan API lewat backend (API Key di .env). Validasi min/max withdraw dan nominal sebelum kirim. Berikan struktur project dan kode lengkap."
    },
    {
      "id": "toko-otomatis",
      "title": "Toko Digital Otomatis (Premium / Nokos / Sosmed)",
      "description": "Jual ulang layanan AVERPAY dengan alur beli otomatis.",
      "prompt": "Buatkan toko digital otomatis yang menjual ulang layanan dari API AVERPAY (https://averpay.web.id). Dokumentasi (JSON): https://averpay.web.id/docs.json\n\nLayanan yang saya mau: [ISI: Aplikasi Premium / Nokos OTP / Suntik Sosmed].\nIkuti urutan endpoint dari dokumentasi (mis. Premium: products -> stock -> order -> status; Nokos: servers -> services -> countries -> products -> order -> status).\n\nSyarat:\n- Harga jual = harga modal + margin yang bisa saya atur di file config.\n- Cek saldo (GET /api/balance) dan stok sebelum order; tampilkan pesan jelas jika tidak cukup.\n- Simpan setiap transaksi (id AVERPAY, status, waktu) di database, polling status sampai selesai.\n- API Key hanya di backend (.env).\nBerikan kode lengkap dan langkah menjalankan."
    },
    {
      "id": "bot-misi-coin",
      "title": "Bot Misi Coin Otomatis",
      "description": "Bot yang memantau misi mingguan, klaim hadiah, dan tukar coin jadi saldo.",
      "prompt": "Buatkan bot/skrip [ISI: Telegram / WhatsApp / cron Node.js] yang terhubung ke API AVERPAY di https://averpay.web.id.\nDokumentasi (JSON): https://averpay.web.id/docs.json\n\nFitur:\n- /misi -> GET /api/coins/missions, tampilkan tiap misi: judul, progres (progress/target), rentang hadiah, dan status (in_progress / ready / claimed).\n- /klaim <type> -> GET /api/coins/claim?type=<type> hanya untuk misi berstatus ready, tampilkan coin yang didapat.\n- /coin -> GET /api/coins, tampilkan jumlah coin, paket tukar (exchange_tiers) dan waktu reset (seconds_until_reset).\n- /tukar <tier_id> -> GET /api/coins/exchange?tier_id=<tier_id>, tampilkan saldo baru.\n- Pengingat otomatis: saat ada misi berstatus ready, kirim notifikasi (polling maksimal tiap 60 detik).\n\nCatatan: 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."
    },
    {
      "id": "ringkas",
      "title": "Prompt Ringkas (Cukup Link Dokumentasi)",
      "description": "Untuk AI yang bisa membuka link. Ganti bagian [ISI] sesuai kebutuhan.",
      "prompt": "Baca dokumentasi API ini: https://averpay.web.id/docs.json\nLalu buatkan [ISI: apa yang ingin dibuat, mis. website payment gateway seperti AVERPAY].\nGunakan hanya endpoint yang ada di dokumentasi, simpan API Key di backend/.env, dan jelaskan cara menjalankannya."
    }
  ]
}