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.com

Public 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.

GET/license/{userId}/{licenseKey}/verify

Verifikasi lisensi menggunakan GET request dengan query parameters opsional.

1GET /license/{userId}/{licenseKey}/verify?scope=premium&productSlug=my-app
2
3# Response
4{
5 "valid": true,
6 "result": "VALID"
7}

Query Parameters (semua opsional)

scopestringScope verifikasi. Wajib jika lisensi memiliki license scope restriction.
challengestringTimestamp Unix (ms) untuk RSA challenge-response. Server akan menandatangani challenge dengan private key.
metadatastringString bebas yang akan dicatat di log verifikasi (mis. nama server, hostname).
productSlugstringSlug produk yang akan dicocokkan. Wajib jika lisensi memiliki product assignment.
POST/license/{userId}/{licenseKey}/verify

Verifikasi menggunakan POST request dengan body JSON. Direkomendasikan untuk request dengan challenge (RSA).

1POST /license/{userId}/{licenseKey}/verify
2Content-Type: application/json
3
4{
5 "scope": "premium",
6 "challenge": "1719196800000",
7 "metadata": "server=my-mc-server",
8 "productSlug": "my-app"
9}
10
11# Response
12{
13 "valid": true,
14 "result": "VALID",
15 "signedChallenge": "base64encodedSignature..."
16}

Nilai Result

1// Semua kemungkinan nilai field "result":
2"VALID" // Lisensi valid
3"NOT_FOUND" // Lisensi tidak ditemukan untuk userId tersebut
4"NOT_ACTIVE" // Lisensi dinonaktifkan secara manual
5"EXPIRED" // Lisensi sudah melewati tanggal expirasi
6"LICENSE_SCOPE_FAILED" // Scope yang dikirim tidak cocok dengan lisensi
7"IP_LIMIT_EXCEEDED" // Jumlah IP unik sudah melebihi batas
8"RATE_LIMIT_EXCEEDED" // Rate limit (validation points) habis
9"PRODUCT_MISMATCH" // productSlug tidak cocok atau product-level expiry habis
10"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 Authorization
2Authorization: Bearer YOUR_API_KEY
POST/admin/licenses

Buat lisensi baru. licenseKey akan di-generate otomatis jika tidak diisi.

1POST /admin/licenses
2Authorization: Bearer YOUR_API_KEY
3Content-Type: application/json
4
5{
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 diisi
10 "ipLimit": 3,
11 "licenseScope": "premium",
12 "expirationDate": "2025-12-31T00:00:00.000Z",
13 "validationLimit": 1000,
14 "replenishAmount": 100,
15 "replenishInterval": "DAY"
16}
17
18# Response 201
19{
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
GET/admin/licenses/{id}  |  /admin/licenses/key/{licenseKey}
1# Baca license berdasarkan ID
2GET /admin/licenses/42
3Authorization: Bearer YOUR_API_KEY
4
5# Baca license berdasarkan license key
6GET /admin/licenses/key/XXXX-XXXX-XXXX-XXXX
7Authorization: Bearer YOUR_API_KEY
8
9# Response sama — object License
GET/admin/licenses

List 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=false
3Authorization: Bearer YOUR_API_KEY
4
5# Response
6{
7 "licenses": [ ... ],
8 "count": 150
9}
PATCH/admin/licenses/{id}

Update lisensi. Semua field opsional — hanya field yang dikirim yang akan diupdate.

1# Update license (PATCH — partial update)
2PATCH /admin/licenses/42
3Authorization: Bearer YOUR_API_KEY
4Content-Type: application/json
5
6{
7 "active": false,
8 "expirationDate": "2026-01-01T00:00:00.000Z"
9}
10
11# Response — object License yang sudah diupdate
DELETE/admin/licenses/{id}
1# Hapus license
2DELETE /admin/licenses/42
3Authorization: Bearer YOUR_API_KEY
4
5# Response — object License yang dihapus

Error Responses

HTTP StatusKeterangan
400Bad Request — mis. license dengan key yang sama sudah ada
401Unauthorized — API Key tidak valid atau tidak ada
404Not Found — license tidak ditemukan atau bukan milik Anda
422Unprocessable Entity — schema request tidak valid (Zod validation error)