HomeGetting startedRegistering with an HTTP keyGetting a credential without DiscordServer claim flowReport rules and the block windowVersion check and 426Authentication and server keysThe blocking modelError handlingRate limitsVersions and compatibilityPOST /v1/servers/claimPOST /v1/servers/reportPOST /v1/servers/revokePOST /plugin/v1/claimPOST /plugin/v1/reportGET /plugin/v1/versionGET /maps/{seed}GET /jobs/{seed}GET /seedsGET /stats/overviewGET /stats/protectionAPI changelog
Blocking API
POST
/api/plugin/v1/claim
Registers a game server with a code issued by the Discord bot and returns the credential used for reports. The server is registered at the IP and port the request came from. This path needs a code, so if you are writing your own client use /api/v1/servers/claim, which needs no Discord.
Request headers
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | UTF-8 JSON. |
Request body
| Field | In | Type | Required | Description |
|---|---|---|---|---|
| code | body | string | required | 1..128 characters. The code from /server claim in Discord. |
| port | body | integer | required | 1..65535. The game server port. |
| pluginVersion | body | string | optional | 1..32 characters. Used for the minimum-version check. |
| gameVersion | body | string | optional | 1..32 characters. |
| labApiVersion | body | string | optional | 1..32 characters. |
Responses
| Status | Body | When |
|---|---|---|
| 200 | {"status":"verified","serverId":"8b1c…-uuid","credential":"slsrv_…","issuedAt":"2026-09-15T08:00:00Z"} | Verified. The credential is returned only once. An earlier registration at the same IP:port is revoked. |
| 202 | {"status":"review","reason":"ip_mismatch","retryAfterSeconds":60} | Manual review of an old request. Resend the same code after retryAfterSeconds. |
| 400 | {"error":"invalid request"} | Malformed request. |
| 401 | {"error":"invalid code"} | Unknown, expired, used or cancelled code. Do not retry. |
| 403 | {"error":"claim rejected"} | Rejected in manual review. |
| 426 | {"error":"plugin_outdated","minimum":"1.2.0","downloadUrl":"https://…"} | pluginVersion is below the minimum. |
| 429 | {"error":"rate limited"} | More than 10 requests per minute from this IP. |
| 503 | {"error":"db unavailable"} | Retry shortly. |
Response fields
| Field | Type | null | Description |
|---|---|---|---|
| status | string | no | verified on 200, review on 202. |
| serverId | string | no | Public ID (UUID) of the registered server. 200 only. |
| credential | string | no | The server key, returned only in this response. 200 only. |
| issuedAt | string | no | Issue time, ISO-8601 UTC. 200 only. |
| reason | string | no | 202 only. ip_mismatch or port_mismatch. |
| retryAfterSeconds | integer | no | 202 only. Resend the same code after this many seconds. |
Example
curl -X POST https://slmaps.com/api/plugin/v1/claim -H "User-Agent: MyServer/1.0" -H "Content-Type: application/json" -d "{\"code\":\"slclm_…\",\"port\":7777,\"pluginVersion\":\"1.2.2\",\"gameVersion\":\"14.2.7\",\"labApiVersion\":\"1.1.7\"}"Request example
{
"code": "slclm_…",
"port": 7777,
"pluginVersion": "1.2.2",
"gameVersion": "14.2.7",
"labApiVersion": "1.1.7"
}Response example
{
"status": "verified",
"serverId": "8b1c…-uuid",
"credential": "slsrv_…",
"issuedAt": "2026-09-15T08:00:00Z"
}What the plugin does
On 200 the plugin stores the credential (replacing any existing one), clears claim_code and starts reporting. On 202 it resends the same code after retryAfterSeconds. 401 and 403 are logged once and stop. 429, 503 and network errors are retried with a growing interval.
SLMAPS is the seed-map viewer for SCP: Secret Laboratory. These pages describe the public API of slmaps.com.slmaps.com ·