Skip to Content
API ReferenceEndpoints

API Endpoints

Health Check

GET /health

Returns API health status.

Response:

{ "ok": true }

Ingest Batch

POST /ingest Authorization: Bearer <SERVER_TOKEN> Content-Type: application/x-ndjson Content-Encoding: gzip X-Server-Id: <server_id> X-Session-Id: <session_id>

Upload a gzipped NDJSON batch of packets.

Headers:

HeaderRequiredDescription
AuthorizationYesBearer token (api.token from the plugin)
X-Server-IdYesUnique server identifier
X-Session-IdYesSession identifier
Content-TypeYesMust be application/x-ndjson
Content-EncodingYesMust be gzip

Response:

{ "ok": true, "batch_id": "550e8400-e29b-41d4-a716-446655440000", "s3_key": "events/<server_id>/<YYYY-MM-DD>/<session_id>/<batch_id>.ndjson.gz" }

The S3 key format includes a date partition for efficient lifecycle management and prefix listing.

List Modules

GET /servers/:server_id/modules Authorization: Bearer <INGEST_TOKEN>

List all registered modules for a server.

Response:

[ { "id": "uuid", "server_id": "my-server", "name": "Movement Module", "base_url": "https://module.example.com", "enabled": true, "transform": "movement_events_v1_ndjson_gz", "last_healthcheck_ok": true, "last_error": null } ]

Register Module

POST /servers/:server_id/modules Authorization: Bearer <INGEST_TOKEN> Content-Type: application/json

Register or update a detection module subscription.

Body:

{ "name": "Movement Module", "base_url": "https://module.example.com", "enabled": true, "transform": "raw_ndjson_gz" }

Transforms:

TransformDescription
raw_ndjson_gzRaw packets, gzipped NDJSON
movement_events_v1_ndjson_gzPre-processed movement events

Submit Findings

POST /callbacks/findings Authorization: Bearer <MODULE_CALLBACK_TOKEN> Content-Type: application/json

Module endpoint to report detected violations.

Body:

{ "server_id": "my-server", "session_id": "session-uuid", "batch_id": "550e8400-e29b-41d4-a716-446655440000", "findings": [ { "player_uuid": "123e4567-e89b-12d3-a456-426614174000", "detector_name": "movement_core_speed_blatant", "detector_version": "1.0.0", "severity": "high", "title": "Speed violation detected", "description": "Player moving faster than allowed threshold", "evidence_json": { "expected_speed": 0.2, "actual_speed": 0.8 } } ] }

Fields:

FieldRequiredDescription
server_idYesServer identifier
session_idNoSession identifier
batch_idNoBatch that triggered this finding
findings[].player_uuidNoPlayer UUID
findings[].detector_nameYesCheck/detector name (e.g., combat_core_killaura_multi)
findings[].detector_versionNoVersion of the detector
findings[].severityNoSeverity level: low, medium, high, critical (default: low)
findings[].titleYesShort description of the finding
findings[].descriptionNoDetailed description
findings[].evidence_s3_keyNoS3 key to related batch data
findings[].evidence_jsonNoStructured evidence data

Response:

{ "ok": true, "inserted": 1 }

Dashboard Endpoints

These require user authentication via Supabase:

GET /dashboard/servers GET /dashboard/servers/:id/findings GET /dashboard/servers/:id/modules GET /dashboard/servers/:id/stats

See the dashboard integration guide for details.

Last updated on
AsyncAnticheat v0.1.0Go to Dashboard →