Skip to content

HTTP API and OpenAPI ​

ozProtect HTTP services have separate origins, methods and credentials. The same /methods/account.* prefix does not identify one backend. Panel actions also use Socket.IO API.

Specifications ​

ServiceReadable referenceOpenAPI 3.1.1
NetworkMethods and routesnetwork.json
SSOImplemented methodssso.json
AntiCheat backendRPC and HTTP routesanticheat.json

Import JSON into a compatible OpenAPI client. servers: / means your selected origin, not an operational public endpoint. These specifications do not authorize financial, administrative or game actions against another environment or production.

The format follows the official OpenAPI specification. This describes HTTP; Socket.IO events are not disguised as REST paths.

Network RPC ​

Route: GET|POST /methods/category.method. Some registered objects also have nested groups. Network matches exported keys; preserve method case. The HTTP layer handles JSON, urlencoded and multipart. GetParam reads merged query/body, with body taking precedence. GetBody and GetQuery read only their respective location.

Use POST for credentials and mutations. A legacy dispatcher accepting GET for a mutation does not make it safe for retries, links, crawlers or caching.

Catalogue read example without an actual token:

bash
curl "$NETWORK_ORIGIN/methods/front.getLicenses"

Normal response:

json
{"status":"success","response":{},"info":{"category":"front","method":"getLicenses"}}

An application error can use HTTP 200:

json
{"status":"error","error":{"name":"access_denied","message":"..."}}

Always check status, then response or the error. Do not treat info/debug fields as a stable data model or retain credentials from diagnostic responses in logs.

Authentication ​

ContextCredentialsAdditional checks
Network HTTP v2Authorization: Bearer with a personal RS256 account tokenSignature/issuer/audience/expiry/version plus method access
Legacy Network HTTP accountaccess_token request field, normally POST bodyAuth hash, owner/staff/server access, feature and dedicated scope per method
Server token issuancecore.genToken: project, server, keyServer/project association and project key
Panel network tokenaccount.genNetToken: project, server, key, client_id, access_tokenCurrent key uses SessionDecrypt; it is not a plain Bearer credential
Appeals integrationX-Appeal-Key / supported aliasesProduction guard rejects missing/placeholder keys; development behavior follows the shared-key helper
Cron/internalIntended cron credential and infrastructure isolationNot a public API; guard configuration matters
SSOLegacy application/token fields and valider checksSeparate contract and errors
AntiCheat panel/clientJWT, server key, API key or SecureChannel depending on routeDo not substitute a Network token

OpenAPI AccessToken models legacy query credentials for GET; POST documents them as a body field. Missing security on an extracted method does not establish anonymous access: middleware/modules can own checks. x-source-checks is an observation list, not authorization certification.

New SSO browser login ​

Cookie-based /auth/login/session/logout/profile/projects/network-token, Steam, registration and recovery are described in SSO and included in SSO OpenAPI. Browsers send no application keys. api_v=2 on old /methods/* is a separate transitional application contract.

SSO issues short-lived personal RS256 tokens; Network needs separate support for HTTP Authorization: Bearer and Socket.IO auth.token verification. Network source verifier is present in 50e0478; client integration/acceptance is separate. Legacy credentials above serve compatible applications, not new browser forms.

AntiCheat SecureChannel ​

Allowlisted POST /methods/client.method uses X-HWID, X-Timestamp in milliseconds, X-Nonce and {iv, ct, tag} body. iv/tag are hex; ciphertext ct is base64. AES-256-GCM AAD includes HWID, timestamp and nonce; current clock tolerance is 30 seconds. Obtain the key through the implemented challenge/register flow, not from documentation data.

Successful channel responses are encrypted too. Middleware can return a plain HTTP error before handler execution. Some legacy aliases have hybrid HMAC/JWT/server-key paths; these are not plaintext RPC equivalents. Use the existing client and AntiCheat contract, rather than inventing signature formats.

Coverage and updates ​

The reference extracts registered RPC, explicit HTTP registrations and Socket.IO handlers by reading AST without importing backend code or loading .env. Source snapshot records commit/dirty markers. Dirty source includes local changes and is not a published release.

x-source identifies file/line; x-observed-required-input, x-observed-errors, x-feature-keys record visible guards. Table * marks a direct required-input guard. Branches, dynamic payloads, nested forms and delegated validation may require more fields. Unknown types and response schemas are deliberately left open. Administrative/debug helpers can appear in registered objects; their presence does not make them supported external APIs.

Some AC aliases are registered through wrappers; the specification records their existence but leaves response schemas open for redirects, binary or encrypted results. It is not an exhaustive model of every payload.

Regenerate against sibling source:

bash
npm run reference:generate -- --sso-ref origin/claude/dev-work
npm run docs:check

These commands change only documentation and do not call APIs. Runtime/production compatibility requires separate service-owner verification.

Errors and retries · Sockets

Developed with ❤️ by ozLiginus