{
  "name": "Averpay — Dokumentasi API",
  "version": "1.0",
  "generated_at": "2026-10-01T07:36:49.217Z",
  "base_url": "https://averpay.duckdns.top",
  "spec_url": "https://averpay.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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_countries",
      "group": "Nokos",
      "title": "Daftar Negara",
      "method": "GET",
      "path": "/api/nokos/countries",
      "url": "https://averpay.duckdns.top/api/nokos/countries",
      "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.duckdns.top/api/nokos/countries?apikey=YOUR_API_KEY'"
    },
    {
      "id": "nokos_services",
      "group": "Nokos",
      "title": "Daftar Layanan",
      "method": "GET",
      "path": "/api/nokos/services",
      "url": "https://averpay.duckdns.top/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": "country_id",
          "in": "query",
          "type": "integer",
          "required": false,
          "description": "Filter layanan yang tersedia untuk negara tertentu."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.duckdns.top/api/nokos/services?apikey=YOUR_API_KEY'"
    },
    {
      "id": "nokos_products",
      "group": "Nokos",
      "title": "Daftar Produk",
      "method": "GET",
      "path": "/api/nokos/products",
      "url": "https://averpay.duckdns.top/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": "country_id",
          "in": "query",
          "type": "integer",
          "required": true,
          "description": "Dari Daftar Negara."
        },
        {
          "name": "platform_id",
          "in": "query",
          "type": "integer",
          "required": false,
          "description": "Sangat disarankan; dari Daftar Layanan (mis. WhatsApp = 3)."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.duckdns.top/api/nokos/products?apikey=YOUR_API_KEY&country_id=COUNTRY_ID'"
    },
    {
      "id": "nokos_order",
      "group": "Nokos",
      "title": "Buat Pesanan Nokos",
      "method": "GET",
      "path": "/api/nokos/order",
      "url": "https://averpay.duckdns.top/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": "product_id",
          "in": "query",
          "type": "integer",
          "required": true,
          "description": "Dari Daftar Produk."
        },
        {
          "name": "country_id",
          "in": "query",
          "type": "integer",
          "required": true,
          "description": "Dari Daftar Negara."
        },
        {
          "name": "platform_id",
          "in": "query",
          "type": "integer",
          "required": false,
          "description": "Samakan dengan yang dipakai di Daftar Produk."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.duckdns.top/api/nokos/order?apikey=YOUR_API_KEY&product_id=PRODUCT_ID&country_id=COUNTRY_ID'"
    },
    {
      "id": "nokos_status",
      "group": "Nokos",
      "title": "Cek Status / OTP Nokos",
      "method": "GET",
      "path": "/api/nokos/status",
      "url": "https://averpay.duckdns.top/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 transaksi dari Buat Pesanan."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.duckdns.top/api/nokos/status?apikey=YOUR_API_KEY&id=ID'"
    },
    {
      "id": "gacha_status",
      "group": "Gacha Nokos",
      "title": "Cek Status Akses",
      "method": "GET",
      "path": "/api/gacha-nokos/status",
      "url": "https://averpay.duckdns.top/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.duckdns.top/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.duckdns.top/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."
        }
      ],
      "example_request": "curl -X POST 'https://averpay.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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)."
        }
      ],
      "example_request": "curl -X GET 'https://averpay.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/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.duckdns.top/api/panel/create-admin?apikey=YOUR_API_KEY' -d \"slot=SLOT&username=USERNAME&email=EMAIL\""
    }
  ],
  "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.duckdns.top.\n\nDokumentasi lengkap (JSON): https://averpay.duckdns.top/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.duckdns.top).\nDokumentasi (JSON): https://averpay.duckdns.top/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.duckdns.top.\nDokumentasi (JSON): https://averpay.duckdns.top/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.duckdns.top). Dokumentasi (JSON): https://averpay.duckdns.top/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.duckdns.top). Dokumentasi (JSON): https://averpay.duckdns.top/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: countries -> services -> 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": "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.duckdns.top/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."
    }
  ]
}