REST API Reference
NxGate menyediakan dua kelompok endpoint: Public API untuk verifikasi lisensi (tidak memerlukan autentikasi) dan Admin API untuk manajemen lisensi (memerlukan API Key).
Base URL (ganti dengan domain Anda)
https://api.yourdomain.comPublic API — Verifikasi Lisensi
Endpoint ini tidak memerlukan autentikasi dan dapat dipanggil langsung dari plugin Minecraft.{userId} adalah User ID dalam format hex 8 karakter (mis. 0000000a). Temukan User ID Anda di Settings dashboard.
/license/{userId}/{licenseKey}/verifyVerifikasi lisensi menggunakan GET request dengan query parameters opsional.
1GET /license/{userId}/{licenseKey}/verify?scope=premium&productSlug=my-app23# Response4{5 "valid": true,6 "result": "VALID"7}
Query Parameters (semua opsional)
scope | string | Scope verifikasi. Wajib jika lisensi memiliki license scope restriction. |
challenge | string | Timestamp Unix (ms) untuk RSA challenge-response. Server akan menandatangani challenge dengan private key. |
metadata | string | String bebas yang akan dicatat di log verifikasi (mis. nama server, hostname). |
productSlug | string | Slug produk yang akan dicocokkan. Wajib jika lisensi memiliki product assignment. |
/license/{userId}/{licenseKey}/verifyVerifikasi menggunakan POST request dengan body JSON. Direkomendasikan untuk request dengan challenge (RSA).
1POST /license/{userId}/{licenseKey}/verify2Content-Type: application/json34{5 "scope": "premium",6 "challenge": "1719196800000",7 "metadata": "server=my-mc-server",8 "productSlug": "my-app"9}1011# Response12{13 "valid": true,14 "result": "VALID",15 "signedChallenge": "base64encodedSignature..."16}
Nilai Result
1// Semua kemungkinan nilai field "result":2"VALID" // Lisensi valid3"NOT_FOUND" // Lisensi tidak ditemukan untuk userId tersebut4"NOT_ACTIVE" // Lisensi dinonaktifkan secara manual5"EXPIRED" // Lisensi sudah melewati tanggal expirasi6"LICENSE_SCOPE_FAILED" // Scope yang dikirim tidak cocok dengan lisensi7"IP_LIMIT_EXCEEDED" // Jumlah IP unik sudah melebihi batas8"RATE_LIMIT_EXCEEDED" // Rate limit (validation points) habis9"PRODUCT_MISMATCH" // productSlug tidak cocok atau product-level expiry habis10"CHALLENGE_EXPIRED" // Challenge timestamp terlalu lama (> 5 menit)
Untuk deskripsi lengkap setiap hasil, lihat halaman Verification Results.
Admin API — Manajemen Lisensi
Semua endpoint Admin API memerlukan API Key yang dibuat di Settings → API Keys dashboard. Kirim API Key di header Authorization:
1# Semua request Admin API memerlukan header Authorization2Authorization: Bearer YOUR_API_KEY
/admin/licensesBuat lisensi baru. licenseKey akan di-generate otomatis jika tidak diisi.
1POST /admin/licenses2Authorization: Bearer YOUR_API_KEY3Content-Type: application/json45{6 "name": "Server Premium A",7 "notes": "License untuk server survival utama",8 "active": true,9 "licenseKey": "XXXX-XXXX-XXXX-XXXX", // opsional — auto-generate jika tidak diisi10 "ipLimit": 3,11 "licenseScope": "premium",12 "expirationDate": "2025-12-31T00:00:00.000Z",13 "validationLimit": 1000,14 "replenishAmount": 100,15 "replenishInterval": "DAY"16}1718# Response 20119{20 "id": 42,21 "userId": 1,22 "licenseKey": "XXXX-XXXX-XXXX-XXXX",23 "name": "Server Premium A",24 "notes": "...",25 "active": true,26 "ipLimit": 3,27 "licenseScope": "premium",28 "expirationDate": "2025-12-31T00:00:00.000Z",29 "validationPoints": 1000,30 "validationLimit": 1000,31 "replenishAmount": 100,32 "replenishInterval": "DAY",33 "createdAt": "2024-06-24T00:00:00.000Z"34}
Nilai replenishInterval
TEN_SECONDSMINUTEHOURDAY/admin/licenses/{id}  | /admin/licenses/key/{licenseKey}1# Baca license berdasarkan ID2GET /admin/licenses/423Authorization: Bearer YOUR_API_KEY45# Baca license berdasarkan license key6GET /admin/licenses/key/XXXX-XXXX-XXXX-XXXX7Authorization: Bearer YOUR_API_KEY89# Response sama — object License
/admin/licensesList semua lisensi dengan paginasi. filterStatus: active atau disabled/expired
1# List semua license (dengan paginasi)2GET /admin/licenses?take=10&skip=0&filterStatus=active&includeLogs=false3Authorization: Bearer YOUR_API_KEY45# Response6{7 "licenses": [ ... ],8 "count": 1509}
/admin/licenses/{id}Update lisensi. Semua field opsional — hanya field yang dikirim yang akan diupdate.
1# Update license (PATCH — partial update)2PATCH /admin/licenses/423Authorization: Bearer YOUR_API_KEY4Content-Type: application/json56{7 "active": false,8 "expirationDate": "2026-01-01T00:00:00.000Z"9}1011# Response — object License yang sudah diupdate
/admin/licenses/{id}1# Hapus license2DELETE /admin/licenses/423Authorization: Bearer YOUR_API_KEY45# Response — object License yang dihapus
Error Responses
| HTTP Status | Keterangan |
|---|---|
| 400 | Bad Request — mis. license dengan key yang sama sudah ada |
| 401 | Unauthorized — API Key tidak valid atau tidak ada |
| 404 | Not Found — license tidak ditemukan atau bukan milik Anda |
| 422 | Unprocessable Entity — schema request tidak valid (Zod validation error) |