REST API Documentation
Cek paket, CPU, dan expired server panel kamu secara programatik. Autentikasi lewat header API key berawalan btzpanel_.
Quick Start
- Login ke Server Saya lalu tekan Buat API Key.
- Simpan key (prefix
btzpanel_) — hanya ditampilkan sekali. - Kirim di header:
Authorization: Bearer <apiKey>. - Panggil
GET https://btzpanel.my.id/api/v1/servers.
Autentikasi
Sertakan API key di salah satu header berikut. Key tidak boleh lewat query string.
curl -s https://btzpanel.my.id/api/v1/servers \ -H "Authorization: Bearer btzpanel_xxxxxxxxxxxxxxxx"
Try It Out
Tempel API key kamu, pilih endpoint, lalu kirim. Key hanya dipakai di browser ini dan tidak disimpan oleh server.
—
Rate Limit
Dua lapis, dihitung per API key. Lewat batas = HTTP 429.
Header respons:
X-RateLimit-Limit: 60 X-RateLimit-Remaining: 42 X-RateLimit-Reset: 1730467200 X-RateLimit-TPS-Limit: 2 Retry-After: 1
/api/v1/keyInfo key yang dipakai: preview, email, status, dan limit.
{
"success": true,
"data": {
"keyPreview": "btzpanel_...a1b2",
"email": "user@example.com",
"tier": "default",
"active": true,
"createdAt": "2026-11-01T00:00:00.000Z",
"rotatedAt": null,
"lastUsedAt": "2026-11-01T08:30:00.000Z",
"rateLimit": { "rpm": 60, "tps": 2, "burst": 5, "remaining": 42 }
}
}
/api/v1/serversDaftar semua server milik pemilik key.
{
"success": true,
"data": {
"total": 1,
"servers": [
{
"panelId": "123",
"identifier": "a1b2c3d4",
"name": "server-pro",
"package": "Pro 1",
"cpu": 100,
"cpuLabel": "100%",
"ram": 3584,
"ramLabel": "3584 MB",
"disk": 4608,
"diskLabel": "4608 MB",
"status": "active",
"suspended": false,
"expiredAt": "2026-12-12T00:00:00.000Z",
"expiredLabel": "12/12/2026",
"daysLeft": 41,
"isUnlimited": false
}
]
}
}
/api/v1/servers/:panelIdDetail satu server. Hanya server milik pemilik key.
curl https://btzpanel.my.id/api/v1/servers/123 \ -H "Authorization: Bearer btzpanel_xxxxxxxxxxxxxxxx"
Response 200 memakai skema yang sama dengan item di /api/v1/servers. Jika bukan milik key: 404 NOT_FOUND.
/api/v1/key/rotateRotasi key. Key lama langsung tidak berlaku; key baru hanya dikembalikan sekali.
{
"success": true,
"data": {
"apiKey": "btzpanel_NEWKEYONLYSHOWNONCE",
"keyPreview": "btzpanel_...z9y8",
"rotatedAt": "2026-11-01T09:00:00.000Z"
}
}
Kode Error
| HTTP | code | Arti |
|---|---|---|
| 401 | MISSING_KEY | Header key tidak ada |
| 401 | INVALID_KEY | Key salah / sudah dicabut |
| 403 | FORBIDDEN | Bukan pemilik server |
| 404 | NOT_FOUND | Server tidak ditemukan |
| 429 | RATE_LIMITED | Kena limit RPM / TPS |
| 500 | SERVER_ERROR | Error internal |
{ "success": false, "code": "RATE_LIMITED", "message": "Kuota request per menit habis." }
Contoh Integrasi
Script cek server yang expired < 3 hari:
const KEY = 'btzpanel_xxxxxxxxxxxxxxxx';
const res = await fetch('https://btzpanel.my.id/api/v1/servers', {
headers: { Authorization: `Bearer ${KEY}` }
});
const { data } = await res.json();
for (const s of data.servers) {
if (s.daysLeft !== null && s.daysLeft <= 3) {
console.log(`⚠ ${s.name} (${s.package}) expired dalam ${s.daysLeft} hari`);
}
}
FAQ
POST /api/v1/key/rotate). Key lama langsung tidak berlaku.- / null?isUnlimited.