SUKUNA API
REST API to programmatically create, list, verify and revoke SUKUNA proxy keys. Built so resellers and panels can integrate SUKUNA in minutes.
Overview
Base URL: https://proxy.vezxa.com/api
Interactive playground (Swagger UI): https://proxy.vezxa.com/docs
All endpoints accept and return application/json.
Authentication
Send your API token on every protected request. Either header is accepted:
Authorization: Bearer <YOUR_API_TOKEN> X-API-Key: <YOUR_API_TOKEN>
/opt/zentrax/api/.env.Create a key
POST/api/keys
Body fields (provide at least one duration source):
| Field | Type | Description |
|---|---|---|
duration | string | Shorthand like 30m, 6h, 14d |
days | int | Number of days |
hours | int | Number of hours |
seconds | int | Number of seconds |
ip | string? | Pre-bind to a specific public IP |
note | string? | Free-text label (customer name, order id…) |
curl -X POST https://proxy.vezxa.com/api/keys \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"duration":"7d","note":"customer-42"}'
200 OK
{
"key": "SUKUNA-AB12CD34",
"status": "active",
"expires_at": 1761501234,
"expires_at_iso": "2026-10-26T14:30:34Z",
"remaining_seconds": 604800,
"ip": null,
"created_at": 1760896434,
"source": "api",
"note": "customer-42"
}
List keys
GET/api/keys?status=active&limit=100
Optional query: status = active | expired | revoked. limit defaults to 1000.
curl -H "Authorization: Bearer $TOKEN" \ "https://proxy.vezxa.com/api/keys?status=active"
Get a key
GET/api/keys/{key}
curl -H "Authorization: Bearer $TOKEN" \ https://proxy.vezxa.com/api/keys/SUKUNA-AB12CD34
Update / Extend a key
PATCH/api/keys/{key}
| Field | Type | Description |
|---|---|---|
status | string | active or revoked |
extend | string | Add duration, e.g. 30d |
extend_seconds | int | Add seconds |
ip | string | Override / set bound IP |
note | string | Update label |
curl -X PATCH https://proxy.vezxa.com/api/keys/SUKUNA-AB12CD34 \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"extend":"30d"}'
Revoke / Reactivate
POST/api/keys/{key}/revoke
POST/api/keys/{key}/reactivate
curl -X POST -H "Authorization: Bearer $TOKEN" \ https://proxy.vezxa.com/api/keys/SUKUNA-AB12CD34/revoke
Delete a key
DELETE/api/keys/{key}
curl -X DELETE -H "Authorization: Bearer $TOKEN" \ https://proxy.vezxa.com/api/keys/SUKUNA-AB12CD34
Verify (public, no auth)
GET/api/keys/{key}/verify?ip=1.2.3.4
Useful from client apps. Returns { "valid": true|false, "reason": ... }.
curl "https://proxy.vezxa.com/api/keys/SUKUNA-AB12CD34/verify?ip=1.2.3.4"
Stats
GET/api/stats
{"total": 42, "active": 30, "expired": 8, "revoked": 4}
Errors
| Code | Meaning |
|---|---|
400 | Bad request — missing/invalid fields |
401 | Missing or invalid API token |
404 | Key not found |
500 | Server misconfig (token not set) |
Quick integration (Node.js)
const TOKEN = process.env.SUKUNA_API_TOKEN;
const BASE = "https://proxy.vezxa.com/api";
async function createKey(days, note) {
const r = await fetch(`${BASE}/keys`, {
method: "POST",
headers: { "Authorization": `Bearer ${TOKEN}`, "Content-Type": "application/json" },
body: JSON.stringify({ days, note }),
});
return r.json();
}
createKey(7, "order-#1024").then(console.log);
Python
import requests
BASE = "https://proxy.vezxa.com/api"
TOKEN = "YOUR_TOKEN"
H = {"Authorization": f"Bearer {TOKEN}"}
r = requests.post(f"{BASE}/keys", json={"duration":"30d"}, headers=H)
print(r.json())
PHP
$ch = curl_init("https://proxy.vezxa.com/api/keys");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer $TOKEN","Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode(["duration"=>"7d"]),
]);
echo curl_exec($ch);