API & integration
How the anticheat plugin talks to oceanac.esoxxii.cc. Base URL for
every call below is https://oceanac.esoxxii.cc/api/v1.
1. The licence key
Each customer gets one key, shaped OAC-XXXX-XXXX-XXXX-XXXX. It goes in the
plugin config:
license: key: "OAC-XXXX-XXXX-XXXX-XXXX" # optional: a human name for this server, shown in the panel server-name: "PvP-1"
The key authenticates every request as Authorization: Bearer <key>. It is
stored on the panel only as a SHA-256 hash โ a database leak never reveals a working key.
2. Handshake โ on start
POST /handshake. The plugin blocks on the answer: it may run only if the licence
is active and has room for this server.
POST /api/v1/handshake
Authorization: Bearer OAC-...
Content-Type: application/json
{ "fingerprint": "<stable host hash>", "name": "PvP-1",
"version": "1.0.0", "mcVersion": "1.21.4" }
โ 200 { "ok": true, "plan": "network", "graceHours": 72, "token": "<token>" }
โ 402 unknown key 403 suspended/expired 409 server limit reached
Send the returned token back on later calls. The plugin keeps running through a
brief panel outage on its own; you do not need to handle that.
3. Heartbeat โ every ~60s
POST /heartbeat. Liveness, and the performance figures the panel's server view
shows.
{ "fingerprint": "...", "players": 42, "tps": 19.9, "msPerTick": 0.4 }
4. Events โ batched
POST /events. Flags and punishments, buffered by the plugin and posted together
so a busy server is not one request per flag.
{ "fingerprint": "...",
"flags": [ { "uuid": "...", "name": "Steve", "check": "KillAuraI",
"category": "combat", "vl": 12, "severity": 0.8,
"debug": "confidence=61 ...", "time": 1737400000000 } ],
"punishments": [ { "uuid": "...", "name": "Steve", "type": "ban",
"reason": "Gameplay analysis", "check": "KillAuraI" } ] }
Each flag also appears on the panel's live feed the instant it lands.
5. Cross-server sync โ on join
GET /sync/player/<uuid>. What every other server on the same licence
already knows about this player, so a cheater caught on one server arrives at the next already
under suspicion.
โ { "ok": true, "totalFlags": 34, "bannedElsewhere": true,
"checks": [ { "check": "KillAuraI", "count": 20, "severity": 0.9 } ] }
6. Evidence upload โ on ban
POST /recording. The movement bundle behind a ban, so the panel can replay the
path that caused it.
{ "fingerprint": "...", "uuid": "...", "name": "Steve",
"check": "ElytraB", "format": "oceanac-tsv-1", "ticks": 200,
"body": "<the .tsv, verbatim>" }
Failure handling, in one line each
- 402 / 403 โ the licence is genuinely not valid. The plugin logs it and stops.
- network error / 5xx โ the panel is unreachable. The plugin keeps running on the cached grace window and retries; it does not disable itself.
- 409 โ one server too many. The operator unbinds one in the panel.