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/v1/servers/claim
Receives a credential straight from the game server, without going through Discord. The credential is issued only after an SCP:SL server is confirmed to answer at the request IP and the port you gave.
Request headers
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | UTF-8 JSON. |
| Authorization | Bearer slsrv_… | Optional. The credential of the live registration at this IP:port you want to replace. |
| User-Agent | MyServer/1.0 | Recommended. Put your implementation name and version here; it is kept with the request record so we can tell clients apart. |
Request body
| Field | In | Type | Required | Description |
|---|---|---|---|---|
| port | body | integer | required | 1..65535. The game server port. The check is sent to this port. |
| clientName | body | string | optional | 1..64 characters. A label shown in our admin list. |
| gameVersion | body | string | optional | 1..32 characters. |
Responses
| Status | Body | When |
|---|---|---|
| 200 | {"status":"verified","serverId":"8b1c…-uuid","credential":"slsrv_…","issuedAt":"2026-09-16T08:00:00Z"} | Issued. The credential is returned only once. An earlier self-issued registration at the same IP:port is revoked. |
| 400 | {"error":"invalid request"} | Malformed request. Check that the port is 1..65535. |
| 403 | {"error":"no game server"} | No SCP:SL server answered at that address. Check the port, that the game server is running, and that the request came from that machine. Private and loopback addresses are refused with {"error":"private address"}. This answer does not spend the issue interval, so fix it and resend right away. |
| 409 | {"error":"address in use"} | A live registration exists at this IP:port and you did not present its credential. Send that credential as Authorization: Bearer. If that registration has been silent for over an hour, it is replaced without one. |
| 429 | {"error":"too many credentials","live":3,"max":3} | A limit. One issue per IP every 5 minutes, at most 3 live credentials per IP. Live credentials are never taken away, so wait for an unused one to lapse or re-claim the same IP:port to replace it. When you hit the interval instead, the body is {"error":"rate limited"}. |
| 503 | {"error":"probe unavailable"} | We could not run the check on our side ({"error":"probe unavailable"}) or the database is briefly unavailable ({"error":"db unavailable"}). The issue interval is not spent; retry shortly. This is not a refusal. |
Response fields
| Field | Type | null | Description |
|---|---|---|---|
| status | string | no | Always verified. |
| serverId | string | no | Public ID (UUID) of the registered server. Quote it when asking for help. |
| credential | string | no | The server key, returned only in this response. Starts with slsrv_. |
| issuedAt | string | no | Issue time, ISO-8601 UTC. |
Example
curl -X POST https://slmaps.com/api/v1/servers/claim -H "User-Agent: MyServer/1.0" -H "Content-Type: application/json" -d "{\"port\":7777,\"clientName\":\"my-server\",\"gameVersion\":\"14.2.7\"}"Request example
{
"port": 7777,
"clientName": "my-server",
"gameVersion": "14.2.7"
}Response example
{
"status": "verified",
"serverId": "8b1c…-uuid",
"credential": "slsrv_…",
"issuedAt": "2026-09-16T08:00:00Z"
}What the plugin does
Send it from the machine the game server runs on — the address the request comes from is the address that gets registered. On 200 store the credential and start reporting. A 403 is an address problem, so resending unchanged gives the same answer. On 409 find the earlier credential and resend with it in the header. Retry 429 and 503 with a growing interval. The check runs at most 10 times per minute per IP.
SLMAPS is the seed-map viewer for SCP: Secret Laboratory. These pages describe the public API of slmaps.com.slmaps.com ·