Aktivasi, validasi & deaktivasi¶
Semua endpoint: POST, body JSON, header Content-Type: application/json,
dan X-Berlanggan-Secret bila produk mewajibkannya. Selalu balas HTTP 200.
POST /v1/activate¶
Daftarkan satu perangkat dan terbitkan token aktivasi.
Request
{
"license_key": "XXXX-XXXX-XXXX",
"fingerprint": "sha256-dari-hardware-id",
"machine_name": "DESKTOP-01"
}
fingerprint— hash stabil per perangkat yang kamu hitung sendiri (mis. SHA-256 dari machine-id + disk serial). Harus konsisten antar-panggilan.machine_name— opsional, tampil di dashboard pengguna.
Response — berhasil
{
"status": "active",
"token": "<token bertanda tangan>",
"expires_at": "2026-07-01T00:00:00Z",
"token_expires_at": "2026-07-01T00:00:00Z",
"license_expires_at": "2027-06-01T00:00:00Z",
"grace_days": 3,
"entitlements": { "MAX_AGENTS": 10, "WHATSAPP": true },
"entitlement": { "license_id": "…", "fingerprint": "…", "product_id": "…", "status": "active", "entitlements": { "MAX_AGENTS": 10 } },
"entitlement_signature": "base64-ed25519"
}
Response — gagal
Simpan token secara lokal (terenkripsi bila memungkinkan). Perlakukan
respons dengan entitlement_signature kosong sebagai tidak tepercaya bila
build kamu punya public key — lihat
Verifikasi tanda tangan entitlement.
POST /v1/validate (heartbeat)¶
Pengecekan berkala. Memvalidasi token dan mengembalikan token baru yang diperpanjang.
Request
{
"license_key": "XXXX-XXXX-XXXX",
"fingerprint": "sha256-dari-hardware-id",
"token": "<token terakhir>"
}
Response — sama bentuknya dengan activate. Selalu ganti token lokal
dengan token terbaru dari respons.
Jika status bukan active/grace, terapkan pembatasan sesuai tabel status
di Ringkasan. Jika request gagal karena jaringan, jangan
langsung mengunci — hormati grace_days (lihat
Heartbeat & masa tenggang offline).
POST /v1/deactivate¶
Lepaskan seat perangkat ini (mis. saat uninstall atau ganti komputer).
Request
Response
Setelah ini, seat bebas dipakai perangkat lain. Token lokal tidak lagi valid.
POST /v1/operation-authorize¶
Minta izin jangka pendek untuk operasi premium yang dikonfigurasi penerbit (mis. ekspor massal, fitur terukur).
Request
{
"license_key": "XXXX-XXXX-XXXX",
"fingerprint": "sha256-dari-hardware-id",
"token": "<token aktif>",
"operation": "bulk_export",
"request_hash": "sha256-payload-opsional"
}
Response
{
"status": "authorized",
"authorization": { "operation": "bulk_export", "expires_at": "…" },
"authorization_signature": "base64-ed25519"
}
Verifikasi authorization_signature dengan cara yang sama seperti
entitlement_signature.
Rate limiting¶
Dibatasi per kunci dan per IP. Saat kena limit, status = rate_limited —
lakukan exponential backoff. Heartbeat yang wajar (harian sampai beberapa jam
sekali) tidak akan kena limit.