14.2.7
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.

no auth1 / 5 min · IPsince v1
Request headers
HeaderValueDescription
Content-Typeapplication/jsonUTF-8 JSON.
AuthorizationBearer slsrv_…Optional. The credential of the live registration at this IP:port you want to replace.
User-AgentMyServer/1.0Recommended. Put your implementation name and version here; it is kept with the request record so we can tell clients apart.
Request body
FieldInTypeRequiredDescription
portbodyintegerrequired1..65535. The game server port. The check is sent to this port.
clientNamebodystringoptional1..64 characters. A label shown in our admin list.
gameVersionbodystringoptional1..32 characters.
Responses
StatusBodyWhen
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
FieldTypenullDescription
statusstringnoAlways verified.
serverIdstringnoPublic ID (UUID) of the registered server. Quote it when asking for help.
credentialstringnoThe server key, returned only in this response. Starts with slsrv_.
issuedAtstringnoIssue 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 ·