LOW.MS API for developers

Build on the LOW.MS API. Manage game servers, run backups, and send console commands from your own scripts and tools with scoped API keys.

LOW.MS API for developers

Manage your game servers from your own scripts, bots, and tools.

Open the API reference

Getting started

Create an API key on the API keys page of your control panel, choose its scopes, and copy the key. Then verify it works:

curl https://api.prod.nexus.low.ms/v1/me \
  -H "Authorization: Bearer lowms_..."

List your servers and act on them. Actions like restarts return a job you can poll until it completes.

# List servers
curl https://api.prod.nexus.low.ms/v1/servers \
  -H "Authorization: Bearer lowms_..."

# Restart one, then poll the job it returns
curl -X POST https://api.prod.nexus.low.ms/v1/servers/SERVER_ID/power \
  -H "Authorization: Bearer lowms_..." \
  -H "Content-Type: application/json" \
  -d '{"action":"restart"}'

curl https://api.prod.nexus.low.ms/v1/jobs/JOB_ID \
  -H "Authorization: Bearer lowms_..."

Authentication and scopes

Send your key as a bearer token. Keys carry only the scopes you grant them: servers:read, servers:power, backups:read, backups:write, console:send. Treat keys like passwords, you can revoke one at any time from the panel.

Rate limits and errors

Each key gets 60 read requests and 12 write requests per minute. Every /v1 request also counts against a shared limit of 300 requests per minute for your source IP address, so several clients behind one address can reach that limit before any of them reaches its own. Responses include X-RateLimit headers, and a 429 answer carries Retry-After.

Errors always look like this:

{"error":{"code":"...","message":"..."}}

Every failure carries one of a fixed set of codes, so your scripts can branch on error.code: invalid_key, missing_scope, console_unavailable, not_found, bad_request, unauthorized, forbidden, conflict, server_busy, transfer_in_progress, node_offline, rate_limited, daemon_unavailable, bad_gateway, method_not_allowed, payload_too_large, unsupported_media_type, unavailable, internal_error. New codes may be added over time, and existing ones are never renamed or removed.

Versioning

The v1 API only changes additively: new endpoints and new optional fields. Anything breaking ships as v2, and deprecations are announced well in advance.

Join our Discord to chat with our staff and community!
Join Discord