{"openapi":"3.1.0","externalDocs":{"description":"User guide: tokens, scopes, examples and every error type","url":"https://wiki.mygameplatform.com/user-api.html"},"info":{"title":"MyGamePlatform User API","version":"1.0.0","description":"Manage your own MyGamePlatform game servers and read your account with a personal API token. Errors are application/problem+json (RFC 9457); compare type or code, never the text. The type URIs of token and account errors open their explanation in the user guide.\n\nAn API token ends at the lifetime chosen when it was created (30, 90, 365 days, or no expiration: then it only ends when it is revoked, and GET /api/v1/account reports neverExpires true and expiresAt 9999-12-31T23:59:59.000Z). When it has not been used for 30 days, it is paused, with or without expiration; every call resets the 30 days. A token is also paused when the sign-in behind it ends (sign-out, password change).\n- Lifetime over: 401 with type https://mygameplatform.com/docs/api/problems/token-expired (code token_expired). Create a new API token in your account settings.\n- Paused: 401 with type https://mygameplatform.com/docs/api/problems/token-paused (code token_paused). Resume it in your account settings (API Tokens); the token string stays the same, so scripts keep working once it is resumed. The lifetime keeps running while a token is paused; an expired token cannot be resumed.\nRetrying with the same token will not help until it is resumed or replaced."},"tags":[{"name":"system","description":"Health and specification, no token required."},{"name":"account","description":"Your own account and install limits."},{"name":"servers","description":"Your own game servers: read them (scope servers:read), start, stop, restart, kill and rename them (scope servers:control), read their console logs, also live (scope servers:console), and send console commands to them (scope servers:command). Servers cannot be deleted through the API."}],"components":{"securitySchemes":{"apiToken":{"type":"http","scheme":"bearer","bearerFormat":"mgp_pat_…","description":"Personal API token, sent as Authorization: Bearer mgp_pat_… .\nEach operation requires one scope:\n- servers:read: Read your own game servers and their status.\n- servers:control: Start, stop, restart and kill your own game servers and rename them.\n- servers:console: Read the console logs of your own game servers.\n- servers:command: Send commands to the console of your own game servers.\n- servers:install: Install new game servers from the catalog.\n- account:read: Read your own account: profile, memberships and install limits.\n\nAn API token ends at the lifetime chosen when it was created (30, 90, 365 days, or no expiration: then it only ends when it is revoked, and GET /api/v1/account reports neverExpires true and expiresAt 9999-12-31T23:59:59.000Z). When it has not been used for 30 days, it is paused, with or without expiration; every call resets the 30 days. A token is also paused when the sign-in behind it ends (sign-out, password change).\n- Lifetime over: 401 with type https://mygameplatform.com/docs/api/problems/token-expired (code token_expired). Create a new API token in your account settings.\n- Paused: 401 with type https://mygameplatform.com/docs/api/problems/token-paused (code token_paused). Resume it in your account settings (API Tokens); the token string stays the same, so scripts keep working once it is resumed. The lifetime keeps running while a token is paused; an expired token cannot be resumed.\nRetrying with the same token will not help until it is resumed or replaced."}},"schemas":{"Health":{"type":"object","properties":{"status":{"type":"string","enum":["UP"]}},"required":["status"],"description":"Liveness of the API itself, without its backends."},"Problem":{"type":"object","properties":{"type":{"type":"string","example":"about:blank"},"title":{"type":"string","example":"Unauthorized"},"status":{"type":"integer","example":401},"detail":{"type":"string"},"code":{"type":"string","description":"Machine-readable reason, snake_case.","example":"invalid_token"},"requestId":{"type":"string","description":"Same value as the X-Request-Id header; quote it when reporting a problem."}},"required":["type","title","status","code"],"description":"Problem Details for HTTP APIs (RFC 9457), media type application/problem+json."},"OpenApiDocument":{"type":"object","properties":{"openapi":{"type":"string","example":"3.1.0"}},"required":["openapi"],"additionalProperties":{},"description":"An OpenAPI 3.1 document."},"Account":{"type":"object","properties":{"userId":{"type":"string","description":"Your user ID (Keycloak subject)."},"name":{"type":["string","null"],"description":"Your display name as greeted in the MyGamePlatform user app (part before the @ if it is an email address); null if none is set.","example":"fo0"},"memberships":{"type":"array","items":{"$ref":"#/components/schemas/Membership"},"description":"Memberships you hold, lowest rank first.","example":["FREE","GOLD"]},"highestMembership":{"type":"string","enum":["FREE","DEVELOPER","BRONZE","SILVER","GOLD","VOTE"],"description":"Your highest membership, as shown in the user app; FREE if you hold none."},"token":{"type":"object","properties":{"id":{"type":"string","description":"ID of the API token used for this request."},"scopes":{"type":"array","items":{"$ref":"#/components/schemas/Scope"},"description":"Scopes granted to this API token."},"expiresAt":{"type":"string","format":"date-time","description":"When this API token expires (UTC). A token created with \"No expiration\" reports 9999-12-31T23:59:59.000Z; check neverExpires instead."},"neverExpires":{"type":"boolean","description":"true if this API token has no expiration (\"No expiration\"); expiresAt then reports the placeholder 9999-12-31T23:59:59.000Z. Clients should check neverExpires instead of the placeholder date.","example":false}},"required":["id","scopes","expiresAt","neverExpires"],"description":"The API token used for this request."}},"required":["userId","name","memberships","highestMembership","token"],"description":"Your own account. Never more than you see in the MyGamePlatform user app."},"Membership":{"type":"string","enum":["FREE","DEVELOPER","BRONZE","SILVER","GOLD","VOTE"],"description":"A MyGamePlatform membership."},"Scope":{"type":"string","enum":["servers:read","servers:control","servers:console","servers:command","servers:install","account:read"],"description":"Permission of an API token."},"AccountLimits":{"type":"object","properties":{"serverInstallationEnabled":{"type":"boolean","description":"false while installing servers is switched off for everyone."},"suspendedUntil":{"type":["string","null"],"format":"date-time","description":"End of your install suspension (UTC); null if you are not suspended. While suspended, you cannot install."},"installedServers":{"type":"integer","minimum":0,"description":"Number of all your servers.","example":2},"catalogs":{"type":"array","items":{"$ref":"#/components/schemas/CatalogLimits"},"description":"The catalogs you may install from and every catalog you have servers in, sorted by name."}},"required":["serverInstallationEnabled","suspendedUntil","installedServers","catalogs"],"description":"Your own install limits, computed by the same rules as an install. Never more than the user app shows you: no IDs, no usage of other users."},"CatalogLimits":{"type":"object","properties":{"catalogName":{"type":["string","null"],"description":"Name of the catalog, as on the server cards of the user app.","example":"Free"},"membershipName":{"type":["string","null"],"description":"Name of the membership the catalog belongs to; null if it has none.","example":"Free"},"installAccess":{"type":"boolean","description":"true: you may install from this catalog. Catalogs you have servers in are listed even without access."},"installable":{"type":"boolean","description":"true: an install from this catalog passes every limit right now (access, installation switch, suspension and all limits here). A single game can still be too big for the free capacity; the install decides."},"catalogUserLimit":{"$ref":"#/components/schemas/LimitUsage"},"membershipUserLimit":{"type":["object","null"],"properties":{"used":{"type":"integer","minimum":0,"description":"Your servers that count against this limit.","example":1},"limit":{"type":["integer","null"],"minimum":1,"description":"Most servers this limit allows; null if there is no limit (unlimited is true).","example":2},"unlimited":{"type":"boolean","description":"true: this limit does not apply; limit is null then."},"status":{"$ref":"#/components/schemas/LimitStatusValue"}},"required":["used","limit","unlimited","status"],"description":"Your servers in all catalogs of this membership against the membership limit per user; null if the membership is unknown."},"catalogFull":{"type":"boolean","description":"true: the catalog takes no new server right now (its overall cap is reached or no game fits any more). Shared by all users, so without numbers."},"membershipFull":{"type":"boolean","description":"true: the membership takes no new server here (its shared cap is reached). Without numbers."}},"required":["catalogName","membershipName","installAccess","installable","catalogUserLimit","membershipUserLimit","catalogFull","membershipFull"],"description":"Your limits in one catalog. Your own limits come with numbers (catalogUserLimit: your servers in this catalog against the catalog limit per user; membershipUserLimit: see there), the shared ones (catalogFull, membershipFull) only as full or not."},"LimitUsage":{"type":"object","properties":{"used":{"type":"integer","minimum":0,"description":"Your servers that count against this limit.","example":1},"limit":{"type":["integer","null"],"minimum":1,"description":"Most servers this limit allows; null if there is no limit (unlimited is true).","example":2},"unlimited":{"type":"boolean","description":"true: this limit does not apply; limit is null then."},"status":{"$ref":"#/components/schemas/LimitStatusValue"}},"required":["used","limit","unlimited","status"],"description":"Your usage of one of your own limits, counted as an install counts it."},"LimitStatusValue":{"type":"string","enum":["ok","at_limit","over_limit"],"description":"State of one limit. ok: room left, or no limit. at_limit: full, your next install there is rejected. over_limit: you have more servers than the limit allows (for example after it was lowered); nothing is removed, but new installs there are rejected.","example":"ok"},"ServerList":{"type":"array","items":{"$ref":"#/components/schemas/Server"},"description":"All your game servers, sorted by name. Idle detection and maintenance are only in GET /api/v1/servers/{id}."},"Server":{"type":"object","properties":{"id":{"type":"string","description":"ID of the server, as in the address of its dashboard in the user app.","example":"3f1c2b9e-8d4a-4c6b-9f0e-2a7d5b1c9e44"},"name":{"type":["string","null"],"description":"Name of the server; null if none is set.","example":"My Valheim"},"game":{"type":["string","null"],"description":"Game as named in the catalog.","example":"Valheim"},"catalog":{"type":["string","null"],"description":"Catalog the server was installed from.","example":"Free"},"status":{"$ref":"#/components/schemas/ServerStatusValue"},"node":{"type":["string","null"],"description":"Name of the node the server runs on.","example":"node-7"},"address":{"type":["string","null"],"description":"Address to connect to (host:port); null until the panel has assigned one.","example":"node-7.mygameplatform.com:27015"},"createdAt":{"type":["string","null"],"format":"date-time","description":"When the server was installed (UTC)."}},"required":["id","name","game","catalog","status","node","address","createdAt"],"description":"One of your game servers. Never more than the user app shows you."},"ServerStatusValue":{"type":"string","enum":["running","starting","stopping","stopped","unknown"],"description":"Power state from the game panel, as shown on the server card in the user app. unknown while the state cannot be read (for example during installation).","example":"running"},"ServerDetail":{"type":"object","properties":{"id":{"type":"string","description":"ID of the server, as in the address of its dashboard in the user app.","example":"3f1c2b9e-8d4a-4c6b-9f0e-2a7d5b1c9e44"},"name":{"type":["string","null"],"description":"Name of the server; null if none is set.","example":"My Valheim"},"game":{"type":["string","null"],"description":"Game as named in the catalog.","example":"Valheim"},"catalog":{"type":["string","null"],"description":"Catalog the server was installed from.","example":"Free"},"status":{"$ref":"#/components/schemas/ServerStatusValue"},"node":{"type":["string","null"],"description":"Name of the node the server runs on.","example":"node-7"},"address":{"type":["string","null"],"description":"Address to connect to (host:port); null until the panel has assigned one.","example":"node-7.mygameplatform.com:27015"},"createdAt":{"type":["string","null"],"format":"date-time","description":"When the server was installed (UTC)."},"idle":{"type":["object","null"],"properties":{"enabled":{"type":"boolean","description":"true while idle detection checks this server (it is on for the platform and for the server). While false, no deadline applies and all times below are null.","example":true},"expiresAt":{"type":["string","null"],"format":"date-time","description":"Earliest of the three deadlines below (UTC): from then on the next idle-detection run (every 30 minutes) removes the server. null if none applies."},"termExpiresAt":{"type":["string","null"],"format":"date-time","description":"End of the term of the server (UTC). Starting the server does not extend it."},"idleExpiresAt":{"type":["string","null"],"format":"date-time","description":"Deadline because the server is idle (UTC): set when it has not run for 4 hours, cleared again once it runs."},"earlyExpiresAt":{"type":["string","null"],"format":"date-time","description":"Deadline for a new server that was never started (UTC). It no longer applies once the server has run."}},"required":["enabled","expiresAt","termExpiresAt","idleExpiresAt","earlyExpiresAt"],"description":"Idle detection; null if it cannot be read right now (retry later)."},"maintenance":{"type":["object","null"],"properties":{"enabled":{"type":"boolean","description":"true if the weekly maintenance stops this server when it is running (on for the platform and for the server). Start it again afterwards.","example":true},"nextAt":{"type":["string","null"],"format":"date-time","description":"Next maintenance run (UTC); null while enabled is false.","example":"2026-10-29T02:00:00.000Z"}},"required":["enabled","nextAt"],"description":"Maintenance; null if it cannot be read right now (retry later)."}},"required":["id","name","game","catalog","status","node","address","createdAt","idle","maintenance"],"description":"One of your game servers with idle detection and maintenance — the fields of Server plus idle and maintenance. Never more than the user app shows you."},"RenameServer":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[^\\x00-\\x1F\\x7F-\\x9F]+$","description":"New name, 1 to 191 characters, no control characters; leading and trailing spaces are removed.","example":"My Valheim"}},"required":["name"],"additionalProperties":false,"description":"New name of the server. No other fields."},"ServerStatus":{"type":"object","properties":{"id":{"type":"string","description":"ID of the server, as in the address of its dashboard in the user app.","example":"3f1c2b9e-8d4a-4c6b-9f0e-2a7d5b1c9e44"},"status":{"$ref":"#/components/schemas/ServerStatusValue"}},"required":["id","status"],"description":"Live power state of one of your game servers."},"ServerActionAccepted":{"type":"object","properties":{"id":{"type":"string","description":"ID of the server, as in the address of its dashboard in the user app.","example":"3f1c2b9e-8d4a-4c6b-9f0e-2a7d5b1c9e44"},"action":{"type":"string","enum":["start","stop","kill"],"description":"The power action that was sent."}},"required":["id","action"],"description":"The power action was handed to the game panel. It does not wait until the server has changed its state; poll GET /api/v1/servers/{id}/status for that."},"ServerRestartAccepted":{"type":"object","properties":{"id":{"type":"string","description":"ID of the server, as in the address of its dashboard in the user app.","example":"3f1c2b9e-8d4a-4c6b-9f0e-2a7d5b1c9e44"},"action":{"type":"string","enum":["restart"],"description":"The power action that was sent; always restart."}},"required":["id","action"],"description":"The restart signal was handed to the game panel: it stops the server and starts it again. It does not wait for that; poll GET /api/v1/servers/{id}/status until it is running again."},"ServerLogs":{"type":"object","properties":{"id":{"type":"string","description":"ID of the server, as in the address of its dashboard in the user app.","example":"3f1c2b9e-8d4a-4c6b-9f0e-2a7d5b1c9e44"},"state":{"$ref":"#/components/schemas/ServerStatusValue"},"lines":{"type":"array","items":{"$ref":"#/components/schemas/ServerLogLine"},"description":"The newest console lines, oldest first."},"truncated":{"type":"boolean","description":"true: the console had more lines than were returned."},"fetchedAt":{"type":"string","format":"date-time","description":"When the lines were read (UTC)."}},"required":["id","state","lines","truncated","fetchedAt"],"description":"The newest console lines of one of your game servers, as the console in the user app shows them. For a live feed use GET /api/v1/servers/{id}/logs/stream."},"ServerLogLine":{"type":"object","properties":{"text":{"type":"string","description":"One console line, cleaned of colour codes and control characters; secrets the panel knows are masked. Long lines are cut at 2000 characters.","example":"[12:00:01] [Server thread/INFO]: Done (3.2s)! For help, type \"help\""},"at":{"type":["string","null"],"format":"date-time","description":"When the line was received from the game server (UTC); null for lines from the history the panel replays on connect, which carry no time."}},"required":["text","at"],"description":"One line of the console of your game server."},"ServerCommandAccepted":{"type":"object","properties":{"id":{"type":"string","description":"ID of the server, as in the address of its dashboard in the user app.","example":"3f1c2b9e-8d4a-4c6b-9f0e-2a7d5b1c9e44"}},"required":["id"],"description":"The command was handed to the console of the game server. It does not wait for the game to run it; its output shows in the console logs (GET /api/v1/servers/{id}/logs, scope servers:console)."},"ServerCommand":{"type":"object","properties":{"command":{"type":"string","minLength":1,"maxLength":1000,"pattern":"^[^\\x00-\\x1F\\x7F-\\x9F]+$","description":"The console command, as you would type it in the game panel console: one line, 1 to 1000 characters, no control characters (no line breaks), not only spaces. Sent unchanged.","example":"say Server restarts in 5 minutes"}},"required":["command"],"additionalProperties":false,"description":"One console command. No other fields."}},"parameters":{}},"paths":{"/api/v1/health":{"get":{"operationId":"getHealth","summary":"Health check","description":"Liveness of the API process. Does not call any backend. No token required.","tags":["system"],"security":[],"responses":{"200":{"description":"The API is up.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}},"500":{"description":"Unexpected error (code internal_error).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/openapi.json":{"get":{"operationId":"getOpenApi","summary":"OpenAPI document","description":"This specification (OpenAPI 3.1). No token required.","tags":["system"],"security":[],"responses":{"200":{"description":"The OpenAPI document of the API.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenApiDocument"}}}},"429":{"description":"Rate limit exceeded (code rate_limited).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."},"Retry-After":{"schema":{"type":"string","description":"Seconds to wait before retrying."},"required":true,"description":"Seconds to wait before retrying."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error (code internal_error).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/account":{"get":{"operationId":"getAccount","summary":"Your account","description":"Your own account: user ID, display name and memberships, plus the scopes and expiry of the API token used. Read from your login, no other data.","tags":["account"],"security":[{"apiToken":["account:read"]}],"x-mgp-scope":"account:read","responses":{"200":{"description":"Your account.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Account"}}}},"401":{"description":"No valid API token. `type` and `code` tell why:\n- https://mygameplatform.com/docs/api/problems/missing-token (code missing_token): API token missing\n- https://mygameplatform.com/docs/api/problems/invalid-token (code invalid_token): API token invalid\n- https://mygameplatform.com/docs/api/problems/token-expired (code token_expired): API token expired\n- https://mygameplatform.com/docs/api/problems/token-paused (code token_paused): API token paused\nAn API token ends at the lifetime chosen when it was created (30, 90, 365 days, or no expiration: then it only ends when it is revoked, and GET /api/v1/account reports neverExpires true and expiresAt 9999-12-31T23:59:59.000Z). When it has not been used for 30 days, it is paused, with or without expiration; every call resets the 30 days. A token is also paused when the sign-in behind it ends (sign-out, password change).\n- Lifetime over: 401 with type https://mygameplatform.com/docs/api/problems/token-expired (code token_expired). Create a new API token in your account settings.\n- Paused: 401 with type https://mygameplatform.com/docs/api/problems/token-paused (code token_paused). Resume it in your account settings (API Tokens); the token string stays the same, so scripts keep working once it is resumed. The lifetime keeps running while a token is paused; an expired token cannot be resumed.\nRetrying with the same token will not help until it is resumed or replaced.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Not allowed. The token lacks the required scope (code insufficient_scope, type about:blank), or the account may not use the API:\n- https://mygameplatform.com/docs/api/problems/account-locked (code account_locked): Account locked\n- https://mygameplatform.com/docs/api/problems/api-access-not-enabled (code api_access_not_enabled): API access not enabled\n- https://mygameplatform.com/docs/api/problems/user-blocked (code user_blocked): API access blocked","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded (code rate_limited).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."},"Retry-After":{"schema":{"type":"string","description":"Seconds to wait before retrying."},"required":true,"description":"Seconds to wait before retrying."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error (code internal_error).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable; retry later. code tells why:\n- api_disabled: the API is switched off by the operators.\n- identity_provider_unavailable: the login service is unreachable.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/account/limits":{"get":{"operationId":"getAccountLimits","summary":"Your install limits","description":"Your own install limits, computed live by the same rules as an install: whether installing is switched on, a running install suspension, the number of your servers and, per catalog, whether you may install there and how many of your servers count against your limits. installable tells whether an install from that catalog would pass every limit right now. Never more than the user app shows you: no IDs, no usage of other users.","tags":["account"],"security":[{"apiToken":["account:read"]}],"x-mgp-scope":"account:read","responses":{"200":{"description":"Your install limits.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountLimits"}}}},"401":{"description":"No valid API token. `type` and `code` tell why:\n- https://mygameplatform.com/docs/api/problems/missing-token (code missing_token): API token missing\n- https://mygameplatform.com/docs/api/problems/invalid-token (code invalid_token): API token invalid\n- https://mygameplatform.com/docs/api/problems/token-expired (code token_expired): API token expired\n- https://mygameplatform.com/docs/api/problems/token-paused (code token_paused): API token paused\nAn API token ends at the lifetime chosen when it was created (30, 90, 365 days, or no expiration: then it only ends when it is revoked, and GET /api/v1/account reports neverExpires true and expiresAt 9999-12-31T23:59:59.000Z). When it has not been used for 30 days, it is paused, with or without expiration; every call resets the 30 days. A token is also paused when the sign-in behind it ends (sign-out, password change).\n- Lifetime over: 401 with type https://mygameplatform.com/docs/api/problems/token-expired (code token_expired). Create a new API token in your account settings.\n- Paused: 401 with type https://mygameplatform.com/docs/api/problems/token-paused (code token_paused). Resume it in your account settings (API Tokens); the token string stays the same, so scripts keep working once it is resumed. The lifetime keeps running while a token is paused; an expired token cannot be resumed.\nRetrying with the same token will not help until it is resumed or replaced.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Not allowed. The token lacks the required scope (code insufficient_scope, type about:blank), or the account may not use the API:\n- https://mygameplatform.com/docs/api/problems/account-locked (code account_locked): Account locked\n- https://mygameplatform.com/docs/api/problems/api-access-not-enabled (code api_access_not_enabled): API access not enabled\n- https://mygameplatform.com/docs/api/problems/user-blocked (code user_blocked): API access blocked","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded (code rate_limited).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."},"Retry-After":{"schema":{"type":"string","description":"Seconds to wait before retrying."},"required":true,"description":"Seconds to wait before retrying."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error (code internal_error).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"A backend service failed or did not respond (code backend_unavailable). Retry later.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable; retry later. code tells why:\n- api_disabled: the API is switched off by the operators.\n- identity_provider_unavailable: the login service is unreachable.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/servers":{"get":{"operationId":"listServers","summary":"Your servers","description":"All your game servers with their live power state, sorted by name. Only your own servers, with the fields the user app shows on its server cards.","tags":["servers"],"security":[{"apiToken":["servers:read"]}],"x-mgp-scope":"servers:read","responses":{"200":{"description":"Your servers (an empty list if you have none).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerList"}}}},"401":{"description":"No valid API token. `type` and `code` tell why:\n- https://mygameplatform.com/docs/api/problems/missing-token (code missing_token): API token missing\n- https://mygameplatform.com/docs/api/problems/invalid-token (code invalid_token): API token invalid\n- https://mygameplatform.com/docs/api/problems/token-expired (code token_expired): API token expired\n- https://mygameplatform.com/docs/api/problems/token-paused (code token_paused): API token paused\nAn API token ends at the lifetime chosen when it was created (30, 90, 365 days, or no expiration: then it only ends when it is revoked, and GET /api/v1/account reports neverExpires true and expiresAt 9999-12-31T23:59:59.000Z). When it has not been used for 30 days, it is paused, with or without expiration; every call resets the 30 days. A token is also paused when the sign-in behind it ends (sign-out, password change).\n- Lifetime over: 401 with type https://mygameplatform.com/docs/api/problems/token-expired (code token_expired). Create a new API token in your account settings.\n- Paused: 401 with type https://mygameplatform.com/docs/api/problems/token-paused (code token_paused). Resume it in your account settings (API Tokens); the token string stays the same, so scripts keep working once it is resumed. The lifetime keeps running while a token is paused; an expired token cannot be resumed.\nRetrying with the same token will not help until it is resumed or replaced.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Not allowed. The token lacks the required scope (code insufficient_scope, type about:blank), or the account may not use the API:\n- https://mygameplatform.com/docs/api/problems/account-locked (code account_locked): Account locked\n- https://mygameplatform.com/docs/api/problems/api-access-not-enabled (code api_access_not_enabled): API access not enabled\n- https://mygameplatform.com/docs/api/problems/user-blocked (code user_blocked): API access blocked","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded (code rate_limited).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."},"Retry-After":{"schema":{"type":"string","description":"Seconds to wait before retrying."},"required":true,"description":"Seconds to wait before retrying."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error (code internal_error).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"A backend service failed or did not respond (code backend_unavailable). Retry later.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable; retry later. code tells why:\n- api_disabled: the API is switched off by the operators.\n- identity_provider_unavailable: the login service is unreachable.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/servers/{id}":{"get":{"operationId":"getServer","summary":"One of your servers","description":"One of your game servers with its live power state, idle detection (whether it runs and when it would remove the server) and weekly maintenance. idle and maintenance are null if they cannot be read right now; the rest of the answer is still valid. They are not in GET /api/v1/servers.","tags":["servers"],"security":[{"apiToken":["servers:read"]}],"x-mgp-scope":"servers:read","parameters":[{"schema":{"type":"string","description":"ID of the server, as in the address of its dashboard in the user app.","example":"3f1c2b9e-8d4a-4c6b-9f0e-2a7d5b1c9e44"},"required":true,"description":"ID of the server, as in the address of its dashboard in the user app.","name":"id","in":"path"}],"responses":{"200":{"description":"The server.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerDetail"}}}},"401":{"description":"No valid API token. `type` and `code` tell why:\n- https://mygameplatform.com/docs/api/problems/missing-token (code missing_token): API token missing\n- https://mygameplatform.com/docs/api/problems/invalid-token (code invalid_token): API token invalid\n- https://mygameplatform.com/docs/api/problems/token-expired (code token_expired): API token expired\n- https://mygameplatform.com/docs/api/problems/token-paused (code token_paused): API token paused\nAn API token ends at the lifetime chosen when it was created (30, 90, 365 days, or no expiration: then it only ends when it is revoked, and GET /api/v1/account reports neverExpires true and expiresAt 9999-12-31T23:59:59.000Z). When it has not been used for 30 days, it is paused, with or without expiration; every call resets the 30 days. A token is also paused when the sign-in behind it ends (sign-out, password change).\n- Lifetime over: 401 with type https://mygameplatform.com/docs/api/problems/token-expired (code token_expired). Create a new API token in your account settings.\n- Paused: 401 with type https://mygameplatform.com/docs/api/problems/token-paused (code token_paused). Resume it in your account settings (API Tokens); the token string stays the same, so scripts keep working once it is resumed. The lifetime keeps running while a token is paused; an expired token cannot be resumed.\nRetrying with the same token will not help until it is resumed or replaced.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Not allowed. The token lacks the required scope (code insufficient_scope, type about:blank), or the account may not use the API:\n- https://mygameplatform.com/docs/api/problems/account-locked (code account_locked): Account locked\n- https://mygameplatform.com/docs/api/problems/api-access-not-enabled (code api_access_not_enabled): API access not enabled\n- https://mygameplatform.com/docs/api/problems/user-blocked (code user_blocked): API access blocked","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No server with this ID in your account (code server_not_found). Servers of other users answer the same way.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded (code rate_limited).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."},"Retry-After":{"schema":{"type":"string","description":"Seconds to wait before retrying."},"required":true,"description":"Seconds to wait before retrying."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error (code internal_error).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"A backend service failed or did not respond (code backend_unavailable). Retry later.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable; retry later. code tells why:\n- api_disabled: the API is switched off by the operators.\n- identity_provider_unavailable: the login service is unreachable.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"operationId":"renameServer","summary":"Rename a server","description":"Changes the name of one of your game servers, in the user app and in the game panel.","tags":["servers"],"security":[{"apiToken":["servers:control"]}],"x-mgp-scope":"servers:control","parameters":[{"schema":{"type":"string","description":"ID of the server, as in the address of its dashboard in the user app.","example":"3f1c2b9e-8d4a-4c6b-9f0e-2a7d5b1c9e44"},"required":true,"description":"ID of the server, as in the address of its dashboard in the user app.","name":"id","in":"path"}],"requestBody":{"description":"The new name.","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenameServer"}}}},"responses":{"204":{"description":"The server was renamed.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."}}},"400":{"description":"The body is not {\"name\": \"...\"} with a valid name, or has other fields (code invalid_body).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"No valid API token. `type` and `code` tell why:\n- https://mygameplatform.com/docs/api/problems/missing-token (code missing_token): API token missing\n- https://mygameplatform.com/docs/api/problems/invalid-token (code invalid_token): API token invalid\n- https://mygameplatform.com/docs/api/problems/token-expired (code token_expired): API token expired\n- https://mygameplatform.com/docs/api/problems/token-paused (code token_paused): API token paused\nAn API token ends at the lifetime chosen when it was created (30, 90, 365 days, or no expiration: then it only ends when it is revoked, and GET /api/v1/account reports neverExpires true and expiresAt 9999-12-31T23:59:59.000Z). When it has not been used for 30 days, it is paused, with or without expiration; every call resets the 30 days. A token is also paused when the sign-in behind it ends (sign-out, password change).\n- Lifetime over: 401 with type https://mygameplatform.com/docs/api/problems/token-expired (code token_expired). Create a new API token in your account settings.\n- Paused: 401 with type https://mygameplatform.com/docs/api/problems/token-paused (code token_paused). Resume it in your account settings (API Tokens); the token string stays the same, so scripts keep working once it is resumed. The lifetime keeps running while a token is paused; an expired token cannot be resumed.\nRetrying with the same token will not help until it is resumed or replaced.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Not allowed. The token lacks the required scope (code insufficient_scope, type about:blank), or the account may not use the API:\n- https://mygameplatform.com/docs/api/problems/account-locked (code account_locked): Account locked\n- https://mygameplatform.com/docs/api/problems/api-access-not-enabled (code api_access_not_enabled): API access not enabled\n- https://mygameplatform.com/docs/api/problems/user-blocked (code user_blocked): API access blocked","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No server with this ID in your account (code server_not_found). Servers of other users answer the same way.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The server cannot do this right now (code server_conflict). Retry later.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"The body is too large (code body_too_large).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"The body is not application/json (code unsupported_media_type).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded (code rate_limited).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."},"Retry-After":{"schema":{"type":"string","description":"Seconds to wait before retrying."},"required":true,"description":"Seconds to wait before retrying."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error (code internal_error).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"A backend service failed or did not respond (code backend_unavailable). Retry later.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable; retry later. code tells why:\n- api_disabled: the API is switched off by the operators.\n- identity_provider_unavailable: the login service is unreachable.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/servers/{id}/status":{"get":{"operationId":"getServerStatus","summary":"Power state of a server","description":"Reads the power state of one of your game servers live from the game panel. Use it to follow a start or stop.","tags":["servers"],"security":[{"apiToken":["servers:read"]}],"x-mgp-scope":"servers:read","parameters":[{"schema":{"type":"string","description":"ID of the server, as in the address of its dashboard in the user app.","example":"3f1c2b9e-8d4a-4c6b-9f0e-2a7d5b1c9e44"},"required":true,"description":"ID of the server, as in the address of its dashboard in the user app.","name":"id","in":"path"}],"responses":{"200":{"description":"The power state.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerStatus"}}}},"401":{"description":"No valid API token. `type` and `code` tell why:\n- https://mygameplatform.com/docs/api/problems/missing-token (code missing_token): API token missing\n- https://mygameplatform.com/docs/api/problems/invalid-token (code invalid_token): API token invalid\n- https://mygameplatform.com/docs/api/problems/token-expired (code token_expired): API token expired\n- https://mygameplatform.com/docs/api/problems/token-paused (code token_paused): API token paused\nAn API token ends at the lifetime chosen when it was created (30, 90, 365 days, or no expiration: then it only ends when it is revoked, and GET /api/v1/account reports neverExpires true and expiresAt 9999-12-31T23:59:59.000Z). When it has not been used for 30 days, it is paused, with or without expiration; every call resets the 30 days. A token is also paused when the sign-in behind it ends (sign-out, password change).\n- Lifetime over: 401 with type https://mygameplatform.com/docs/api/problems/token-expired (code token_expired). Create a new API token in your account settings.\n- Paused: 401 with type https://mygameplatform.com/docs/api/problems/token-paused (code token_paused). Resume it in your account settings (API Tokens); the token string stays the same, so scripts keep working once it is resumed. The lifetime keeps running while a token is paused; an expired token cannot be resumed.\nRetrying with the same token will not help until it is resumed or replaced.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Not allowed. The token lacks the required scope (code insufficient_scope, type about:blank), or the account may not use the API:\n- https://mygameplatform.com/docs/api/problems/account-locked (code account_locked): Account locked\n- https://mygameplatform.com/docs/api/problems/api-access-not-enabled (code api_access_not_enabled): API access not enabled\n- https://mygameplatform.com/docs/api/problems/user-blocked (code user_blocked): API access blocked","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No server with this ID in your account (code server_not_found). Servers of other users answer the same way.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded (code rate_limited).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."},"Retry-After":{"schema":{"type":"string","description":"Seconds to wait before retrying."},"required":true,"description":"Seconds to wait before retrying."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error (code internal_error).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"A backend service failed or did not respond (code backend_unavailable). Retry later.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable; retry later. code tells why:\n- api_disabled: the API is switched off by the operators.\n- identity_provider_unavailable: the login service is unreachable.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/servers/{id}/start":{"post":{"operationId":"startServer","summary":"Start a server","description":"Starts one of your game servers. Answers 202 as soon as the game panel has the signal; poll GET /api/v1/servers/{id}/status to see the new state. No request body.","tags":["servers"],"security":[{"apiToken":["servers:control"]}],"x-mgp-scope":"servers:control","parameters":[{"schema":{"type":"string","description":"ID of the server, as in the address of its dashboard in the user app.","example":"3f1c2b9e-8d4a-4c6b-9f0e-2a7d5b1c9e44"},"required":true,"description":"ID of the server, as in the address of its dashboard in the user app.","name":"id","in":"path"}],"responses":{"202":{"description":"The signal was sent.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerActionAccepted"}}}},"401":{"description":"No valid API token. `type` and `code` tell why:\n- https://mygameplatform.com/docs/api/problems/missing-token (code missing_token): API token missing\n- https://mygameplatform.com/docs/api/problems/invalid-token (code invalid_token): API token invalid\n- https://mygameplatform.com/docs/api/problems/token-expired (code token_expired): API token expired\n- https://mygameplatform.com/docs/api/problems/token-paused (code token_paused): API token paused\nAn API token ends at the lifetime chosen when it was created (30, 90, 365 days, or no expiration: then it only ends when it is revoked, and GET /api/v1/account reports neverExpires true and expiresAt 9999-12-31T23:59:59.000Z). When it has not been used for 30 days, it is paused, with or without expiration; every call resets the 30 days. A token is also paused when the sign-in behind it ends (sign-out, password change).\n- Lifetime over: 401 with type https://mygameplatform.com/docs/api/problems/token-expired (code token_expired). Create a new API token in your account settings.\n- Paused: 401 with type https://mygameplatform.com/docs/api/problems/token-paused (code token_paused). Resume it in your account settings (API Tokens); the token string stays the same, so scripts keep working once it is resumed. The lifetime keeps running while a token is paused; an expired token cannot be resumed.\nRetrying with the same token will not help until it is resumed or replaced.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Not allowed. The token lacks the required scope (code insufficient_scope, type about:blank), or the account may not use the API:\n- https://mygameplatform.com/docs/api/problems/account-locked (code account_locked): Account locked\n- https://mygameplatform.com/docs/api/problems/api-access-not-enabled (code api_access_not_enabled): API access not enabled\n- https://mygameplatform.com/docs/api/problems/user-blocked (code user_blocked): API access blocked","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No server with this ID in your account (code server_not_found). Servers of other users answer the same way.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The server cannot do this right now (code server_conflict). Retry later.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded (code rate_limited).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."},"Retry-After":{"schema":{"type":"string","description":"Seconds to wait before retrying."},"required":true,"description":"Seconds to wait before retrying."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error (code internal_error).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"A backend service failed or did not respond (code backend_unavailable). Retry later.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable; retry later. code tells why:\n- api_disabled: the API is switched off by the operators.\n- identity_provider_unavailable: the login service is unreachable.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/servers/{id}/stop":{"post":{"operationId":"stopServer","summary":"Stop a server","description":"Stops one of your game servers gracefully. Answers 202 as soon as the game panel has the signal; poll GET /api/v1/servers/{id}/status to see the new state. No request body.","tags":["servers"],"security":[{"apiToken":["servers:control"]}],"x-mgp-scope":"servers:control","parameters":[{"schema":{"type":"string","description":"ID of the server, as in the address of its dashboard in the user app.","example":"3f1c2b9e-8d4a-4c6b-9f0e-2a7d5b1c9e44"},"required":true,"description":"ID of the server, as in the address of its dashboard in the user app.","name":"id","in":"path"}],"responses":{"202":{"description":"The signal was sent.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerActionAccepted"}}}},"401":{"description":"No valid API token. `type` and `code` tell why:\n- https://mygameplatform.com/docs/api/problems/missing-token (code missing_token): API token missing\n- https://mygameplatform.com/docs/api/problems/invalid-token (code invalid_token): API token invalid\n- https://mygameplatform.com/docs/api/problems/token-expired (code token_expired): API token expired\n- https://mygameplatform.com/docs/api/problems/token-paused (code token_paused): API token paused\nAn API token ends at the lifetime chosen when it was created (30, 90, 365 days, or no expiration: then it only ends when it is revoked, and GET /api/v1/account reports neverExpires true and expiresAt 9999-12-31T23:59:59.000Z). When it has not been used for 30 days, it is paused, with or without expiration; every call resets the 30 days. A token is also paused when the sign-in behind it ends (sign-out, password change).\n- Lifetime over: 401 with type https://mygameplatform.com/docs/api/problems/token-expired (code token_expired). Create a new API token in your account settings.\n- Paused: 401 with type https://mygameplatform.com/docs/api/problems/token-paused (code token_paused). Resume it in your account settings (API Tokens); the token string stays the same, so scripts keep working once it is resumed. The lifetime keeps running while a token is paused; an expired token cannot be resumed.\nRetrying with the same token will not help until it is resumed or replaced.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Not allowed. The token lacks the required scope (code insufficient_scope, type about:blank), or the account may not use the API:\n- https://mygameplatform.com/docs/api/problems/account-locked (code account_locked): Account locked\n- https://mygameplatform.com/docs/api/problems/api-access-not-enabled (code api_access_not_enabled): API access not enabled\n- https://mygameplatform.com/docs/api/problems/user-blocked (code user_blocked): API access blocked","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No server with this ID in your account (code server_not_found). Servers of other users answer the same way.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The server cannot do this right now (code server_conflict). Retry later.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded (code rate_limited).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."},"Retry-After":{"schema":{"type":"string","description":"Seconds to wait before retrying."},"required":true,"description":"Seconds to wait before retrying."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error (code internal_error).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"A backend service failed or did not respond (code backend_unavailable). Retry later.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable; retry later. code tells why:\n- api_disabled: the API is switched off by the operators.\n- identity_provider_unavailable: the login service is unreachable.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/servers/{id}/restart":{"post":{"operationId":"restartServer","summary":"Restart a server","description":"Restarts one of your game servers: the game panel stops it and starts it again in one step. Answers 202 as soon as the game panel has the signal; poll GET /api/v1/servers/{id}/status to see the new state. No request body.","tags":["servers"],"security":[{"apiToken":["servers:control"]}],"x-mgp-scope":"servers:control","parameters":[{"schema":{"type":"string","description":"ID of the server, as in the address of its dashboard in the user app.","example":"3f1c2b9e-8d4a-4c6b-9f0e-2a7d5b1c9e44"},"required":true,"description":"ID of the server, as in the address of its dashboard in the user app.","name":"id","in":"path"}],"responses":{"202":{"description":"The signal was sent.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerRestartAccepted"}}}},"401":{"description":"No valid API token. `type` and `code` tell why:\n- https://mygameplatform.com/docs/api/problems/missing-token (code missing_token): API token missing\n- https://mygameplatform.com/docs/api/problems/invalid-token (code invalid_token): API token invalid\n- https://mygameplatform.com/docs/api/problems/token-expired (code token_expired): API token expired\n- https://mygameplatform.com/docs/api/problems/token-paused (code token_paused): API token paused\nAn API token ends at the lifetime chosen when it was created (30, 90, 365 days, or no expiration: then it only ends when it is revoked, and GET /api/v1/account reports neverExpires true and expiresAt 9999-12-31T23:59:59.000Z). When it has not been used for 30 days, it is paused, with or without expiration; every call resets the 30 days. A token is also paused when the sign-in behind it ends (sign-out, password change).\n- Lifetime over: 401 with type https://mygameplatform.com/docs/api/problems/token-expired (code token_expired). Create a new API token in your account settings.\n- Paused: 401 with type https://mygameplatform.com/docs/api/problems/token-paused (code token_paused). Resume it in your account settings (API Tokens); the token string stays the same, so scripts keep working once it is resumed. The lifetime keeps running while a token is paused; an expired token cannot be resumed.\nRetrying with the same token will not help until it is resumed or replaced.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Not allowed. The token lacks the required scope (code insufficient_scope, type about:blank), or the account may not use the API:\n- https://mygameplatform.com/docs/api/problems/account-locked (code account_locked): Account locked\n- https://mygameplatform.com/docs/api/problems/api-access-not-enabled (code api_access_not_enabled): API access not enabled\n- https://mygameplatform.com/docs/api/problems/user-blocked (code user_blocked): API access blocked","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No server with this ID in your account (code server_not_found). Servers of other users answer the same way.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The server cannot do this right now (code server_conflict). Retry later.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded (code rate_limited).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."},"Retry-After":{"schema":{"type":"string","description":"Seconds to wait before retrying."},"required":true,"description":"Seconds to wait before retrying."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error (code internal_error).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"A backend service failed or did not respond (code backend_unavailable). Retry later.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable; retry later. code tells why:\n- api_disabled: the API is switched off by the operators.\n- identity_provider_unavailable: the login service is unreachable.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/servers/{id}/kill":{"post":{"operationId":"killServer","summary":"Kill a server","description":"Stops one of your game servers at once, without letting it shut down cleanly. Try stop first. Answers 202 as soon as the game panel has the signal; poll GET /api/v1/servers/{id}/status to see the new state. No request body.","tags":["servers"],"security":[{"apiToken":["servers:control"]}],"x-mgp-scope":"servers:control","parameters":[{"schema":{"type":"string","description":"ID of the server, as in the address of its dashboard in the user app.","example":"3f1c2b9e-8d4a-4c6b-9f0e-2a7d5b1c9e44"},"required":true,"description":"ID of the server, as in the address of its dashboard in the user app.","name":"id","in":"path"}],"responses":{"202":{"description":"The signal was sent.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerActionAccepted"}}}},"401":{"description":"No valid API token. `type` and `code` tell why:\n- https://mygameplatform.com/docs/api/problems/missing-token (code missing_token): API token missing\n- https://mygameplatform.com/docs/api/problems/invalid-token (code invalid_token): API token invalid\n- https://mygameplatform.com/docs/api/problems/token-expired (code token_expired): API token expired\n- https://mygameplatform.com/docs/api/problems/token-paused (code token_paused): API token paused\nAn API token ends at the lifetime chosen when it was created (30, 90, 365 days, or no expiration: then it only ends when it is revoked, and GET /api/v1/account reports neverExpires true and expiresAt 9999-12-31T23:59:59.000Z). When it has not been used for 30 days, it is paused, with or without expiration; every call resets the 30 days. A token is also paused when the sign-in behind it ends (sign-out, password change).\n- Lifetime over: 401 with type https://mygameplatform.com/docs/api/problems/token-expired (code token_expired). Create a new API token in your account settings.\n- Paused: 401 with type https://mygameplatform.com/docs/api/problems/token-paused (code token_paused). Resume it in your account settings (API Tokens); the token string stays the same, so scripts keep working once it is resumed. The lifetime keeps running while a token is paused; an expired token cannot be resumed.\nRetrying with the same token will not help until it is resumed or replaced.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Not allowed. The token lacks the required scope (code insufficient_scope, type about:blank), or the account may not use the API:\n- https://mygameplatform.com/docs/api/problems/account-locked (code account_locked): Account locked\n- https://mygameplatform.com/docs/api/problems/api-access-not-enabled (code api_access_not_enabled): API access not enabled\n- https://mygameplatform.com/docs/api/problems/user-blocked (code user_blocked): API access blocked","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No server with this ID in your account (code server_not_found). Servers of other users answer the same way.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The server cannot do this right now (code server_conflict). Retry later.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded (code rate_limited).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."},"Retry-After":{"schema":{"type":"string","description":"Seconds to wait before retrying."},"required":true,"description":"Seconds to wait before retrying."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error (code internal_error).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"A backend service failed or did not respond (code backend_unavailable). Retry later.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable; retry later. code tells why:\n- api_disabled: the API is switched off by the operators.\n- identity_provider_unavailable: the login service is unreachable.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/servers/{id}/logs":{"get":{"operationId":"getServerLogs","summary":"Console logs of a server","description":"The newest console lines of one of your game servers, oldest first, with its power state. While the server runs, the lines come with the time they were received; otherwise the game panel replays its history without times. Requires the scope servers:console. Only your own servers; the lines are cleaned of colour codes, and secrets the game panel knows (passwords, keys in the server settings) are masked. For a live feed use GET /api/v1/servers/{id}/logs/stream.","tags":["servers"],"security":[{"apiToken":["servers:console"]}],"x-mgp-scope":"servers:console","parameters":[{"schema":{"type":"string","description":"ID of the server, as in the address of its dashboard in the user app.","example":"3f1c2b9e-8d4a-4c6b-9f0e-2a7d5b1c9e44"},"required":true,"description":"ID of the server, as in the address of its dashboard in the user app.","name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100,"description":"How many of the newest lines to return, 1 to 500.","example":100},"required":false,"description":"How many of the newest lines to return, 1 to 500.","name":"lines","in":"query"}],"responses":{"200":{"description":"The newest console lines.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerLogs"}}}},"400":{"description":"lines is not a whole number from 1 to 500 (code invalid_query).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"No valid API token. `type` and `code` tell why:\n- https://mygameplatform.com/docs/api/problems/missing-token (code missing_token): API token missing\n- https://mygameplatform.com/docs/api/problems/invalid-token (code invalid_token): API token invalid\n- https://mygameplatform.com/docs/api/problems/token-expired (code token_expired): API token expired\n- https://mygameplatform.com/docs/api/problems/token-paused (code token_paused): API token paused\nAn API token ends at the lifetime chosen when it was created (30, 90, 365 days, or no expiration: then it only ends when it is revoked, and GET /api/v1/account reports neverExpires true and expiresAt 9999-12-31T23:59:59.000Z). When it has not been used for 30 days, it is paused, with or without expiration; every call resets the 30 days. A token is also paused when the sign-in behind it ends (sign-out, password change).\n- Lifetime over: 401 with type https://mygameplatform.com/docs/api/problems/token-expired (code token_expired). Create a new API token in your account settings.\n- Paused: 401 with type https://mygameplatform.com/docs/api/problems/token-paused (code token_paused). Resume it in your account settings (API Tokens); the token string stays the same, so scripts keep working once it is resumed. The lifetime keeps running while a token is paused; an expired token cannot be resumed.\nRetrying with the same token will not help until it is resumed or replaced.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Not allowed. The token lacks the required scope (code insufficient_scope, type about:blank), or the account may not use the API:\n- https://mygameplatform.com/docs/api/problems/account-locked (code account_locked): Account locked\n- https://mygameplatform.com/docs/api/problems/api-access-not-enabled (code api_access_not_enabled): API access not enabled\n- https://mygameplatform.com/docs/api/problems/user-blocked (code user_blocked): API access blocked","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No server with this ID in your account (code server_not_found). Servers of other users answer the same way.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The server cannot do this right now (code server_conflict). Retry later.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded (code rate_limited).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."},"Retry-After":{"schema":{"type":"string","description":"Seconds to wait before retrying."},"required":true,"description":"Seconds to wait before retrying."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error (code internal_error).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"A backend service failed or did not respond (code backend_unavailable). Retry later.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable; retry later. code tells why:\n- api_disabled: the API is switched off by the operators.\n- identity_provider_unavailable: the login service is unreachable.\n- console_unavailable: the console of this server is busy or rate limited by the game panel; retry in a minute.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/servers/{id}/logs/stream":{"get":{"operationId":"streamServerLogs","summary":"Live console logs of a server (Server-Sent Events)","description":"Streams the console of one of your running game servers as Server-Sent Events (text/event-stream) until you disconnect or the stream ends (event end, at the latest after 30 minutes by default). Errors before the stream starts are application/problem+json as everywhere. Requires the scope servers:console. Only your own servers; the lines are cleaned of colour codes, and secrets the game panel knows (passwords, keys in the server settings) are masked.\n\nServer-Sent Events (text/event-stream, UTF-8). Every event has one line of JSON as data:\n- event: state — data {\"state\": \"<ServerStatusValue>\"}: first event, then on every change of the power state.\n- event: line — data {\"text\": \"...\", \"at\": \"<UTC time>\" | null}: one console line (schema ServerLogLine); with lines=N the N newest buffered lines come first.\n- event: skipped — data {\"lines\": N, \"detail\": \"...\"}: your server printed more console lines per second than the stream passes on (by default 200 per second), so N lines were left out at this point. The stream goes on; the server's log files keep the full output.\n- event: end — data {\"reason\": \"...\", \"detail\": \"...\"}: the stream ends and the connection closes. Reasons: max_duration (a stream lasts at most 30 minutes by default; reconnect to continue), access_revoked (the API token was revoked, expired or paused, your account was blocked or the API was switched off; checked every minute — reconnecting will not help), server_unavailable (the server stopped or a backend ended the stream; reconnect once the server runs), shutdown (the API is restarting; reconnect in a moment). Treat unknown reasons like server_unavailable.\n- Comment lines (\":hb\") about every 20 seconds keep the connection open; ignore them.\n- Ignore events you do not know; more may be added.\nThere are no event IDs and no Last-Event-ID resume: after a reconnect, ask for the recent lines again with lines=N. A limited number of streams may be open at once, by default 3 per API token and 10 per user (code too_many_streams).","tags":["servers"],"security":[{"apiToken":["servers:console"]}],"x-mgp-scope":"servers:console","parameters":[{"schema":{"type":"string","description":"ID of the server, as in the address of its dashboard in the user app.","example":"3f1c2b9e-8d4a-4c6b-9f0e-2a7d5b1c9e44"},"required":true,"description":"ID of the server, as in the address of its dashboard in the user app.","name":"id","in":"path"},{"schema":{"type":"integer","minimum":0,"maximum":500,"default":0,"description":"How many buffered recent lines to send first, 0 to 500; then the stream continues live.","example":50},"required":false,"description":"How many buffered recent lines to send first, 0 to 500; then the stream continues live.","name":"lines","in":"query"}],"responses":{"200":{"description":"The stream is open. Events: state, line, end (see the operation description).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."},"Cache-Control":{"schema":{"type":"string","description":"no-cache, no-transform","example":"no-cache, no-transform"},"required":true,"description":"no-cache, no-transform"},"X-Accel-Buffering":{"schema":{"type":"string","description":"no: proxies must not buffer the stream.","example":"no"},"required":true,"description":"no: proxies must not buffer the stream."}},"content":{"text/event-stream":{"schema":{"type":"string","description":"Server-Sent Events: state, line and end, each with one line of JSON as data.","example":":ok\n\nevent: state\ndata: {\"state\":\"running\"}\n\nevent: line\ndata: {\"text\":\"[12:00:01] [Server thread/INFO]: Done (3.2s)!\",\"at\":\"2026-10-20T12:00:01.123Z\"}\n\nevent: skipped\ndata: {\"lines\":4800,\"detail\":\"Your server printed more console lines per second than the stream passes on; these lines were left out. Log files on the server keep the full output.\"}\n\n:hb\n\nevent: end\ndata: {\"reason\":\"max_duration\",\"detail\":\"The stream reached its maximum duration. Reconnect to continue.\"}\n\n"}}}},"400":{"description":"lines is not a whole number from 0 to 500 (code invalid_query).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"No valid API token. `type` and `code` tell why:\n- https://mygameplatform.com/docs/api/problems/missing-token (code missing_token): API token missing\n- https://mygameplatform.com/docs/api/problems/invalid-token (code invalid_token): API token invalid\n- https://mygameplatform.com/docs/api/problems/token-expired (code token_expired): API token expired\n- https://mygameplatform.com/docs/api/problems/token-paused (code token_paused): API token paused\nAn API token ends at the lifetime chosen when it was created (30, 90, 365 days, or no expiration: then it only ends when it is revoked, and GET /api/v1/account reports neverExpires true and expiresAt 9999-12-31T23:59:59.000Z). When it has not been used for 30 days, it is paused, with or without expiration; every call resets the 30 days. A token is also paused when the sign-in behind it ends (sign-out, password change).\n- Lifetime over: 401 with type https://mygameplatform.com/docs/api/problems/token-expired (code token_expired). Create a new API token in your account settings.\n- Paused: 401 with type https://mygameplatform.com/docs/api/problems/token-paused (code token_paused). Resume it in your account settings (API Tokens); the token string stays the same, so scripts keep working once it is resumed. The lifetime keeps running while a token is paused; an expired token cannot be resumed.\nRetrying with the same token will not help until it is resumed or replaced.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Not allowed. The token lacks the required scope (code insufficient_scope, type about:blank), or the account may not use the API:\n- https://mygameplatform.com/docs/api/problems/account-locked (code account_locked): Account locked\n- https://mygameplatform.com/docs/api/problems/api-access-not-enabled (code api_access_not_enabled): API access not enabled\n- https://mygameplatform.com/docs/api/problems/user-blocked (code user_blocked): API access blocked","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No server with this ID in your account (code server_not_found). Servers of other users answer the same way.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The server is not running, or it is being installed (code server_not_running). Start it and retry.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Too many requests or streams. code tells why:\n- rate_limited: rate limit exceeded.\n- too_many_streams: this API token (default 3) or your account (default 10) already has the most open log streams allowed; close one first.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."},"Retry-After":{"schema":{"type":"string","description":"Seconds to wait before retrying."},"required":true,"description":"Seconds to wait before retrying."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error (code internal_error).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"A backend service failed or did not respond (code backend_unavailable). Retry later.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable; retry later. code tells why:\n- api_disabled: the API is switched off by the operators.\n- identity_provider_unavailable: the login service is unreachable.\n- console_unavailable: the console of this server is busy or rate limited by the game panel; retry in a minute.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/servers/{id}/command":{"post":{"operationId":"sendServerCommand","summary":"Send a console command","description":"Sends one command to the console of one of your running game servers, as if you typed it in the console of the game panel. Answers 202 as soon as the console has it; it does not wait for the game to run it. Read the output with GET /api/v1/servers/{id}/logs or …/logs/stream (scope servers:console). Requires the scope servers:command; servers:console alone only reads. Only your own servers. The command itself is never logged.","tags":["servers"],"security":[{"apiToken":["servers:command"]}],"x-mgp-scope":"servers:command","parameters":[{"schema":{"type":"string","description":"ID of the server, as in the address of its dashboard in the user app.","example":"3f1c2b9e-8d4a-4c6b-9f0e-2a7d5b1c9e44"},"required":true,"description":"ID of the server, as in the address of its dashboard in the user app.","name":"id","in":"path"}],"requestBody":{"description":"The command.","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerCommand"}}}},"responses":{"202":{"description":"The command was sent.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerCommandAccepted"}}}},"400":{"description":"The body is not {\"command\": \"...\"} with one line of 1 to 1000 characters without control characters, or has other fields (code invalid_body).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"No valid API token. `type` and `code` tell why:\n- https://mygameplatform.com/docs/api/problems/missing-token (code missing_token): API token missing\n- https://mygameplatform.com/docs/api/problems/invalid-token (code invalid_token): API token invalid\n- https://mygameplatform.com/docs/api/problems/token-expired (code token_expired): API token expired\n- https://mygameplatform.com/docs/api/problems/token-paused (code token_paused): API token paused\nAn API token ends at the lifetime chosen when it was created (30, 90, 365 days, or no expiration: then it only ends when it is revoked, and GET /api/v1/account reports neverExpires true and expiresAt 9999-12-31T23:59:59.000Z). When it has not been used for 30 days, it is paused, with or without expiration; every call resets the 30 days. A token is also paused when the sign-in behind it ends (sign-out, password change).\n- Lifetime over: 401 with type https://mygameplatform.com/docs/api/problems/token-expired (code token_expired). Create a new API token in your account settings.\n- Paused: 401 with type https://mygameplatform.com/docs/api/problems/token-paused (code token_paused). Resume it in your account settings (API Tokens); the token string stays the same, so scripts keep working once it is resumed. The lifetime keeps running while a token is paused; an expired token cannot be resumed.\nRetrying with the same token will not help until it is resumed or replaced.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Not allowed. The token lacks the required scope (code insufficient_scope, type about:blank), or the account may not use the API:\n- https://mygameplatform.com/docs/api/problems/account-locked (code account_locked): Account locked\n- https://mygameplatform.com/docs/api/problems/api-access-not-enabled (code api_access_not_enabled): API access not enabled\n- https://mygameplatform.com/docs/api/problems/user-blocked (code user_blocked): API access blocked","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"WWW-Authenticate":{"schema":{"type":"string"},"required":true}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No server with this ID in your account (code server_not_found). Servers of other users answer the same way.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The server is not running, or it is being installed (code server_not_running). Start it and retry.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"The body is too large (code body_too_large).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"The body is not application/json (code unsupported_media_type).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded (code rate_limited).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."},"RateLimit-Limit":{"schema":{"type":"string","description":"Requests allowed per window."},"required":true,"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"string","description":"Requests left in the current window."},"required":true,"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"string","description":"Seconds until the window resets."},"required":true,"description":"Seconds until the window resets."},"RateLimit-Policy":{"schema":{"type":"string","description":"Quota and window, e.g. 60;w=60."},"required":true,"description":"Quota and window, e.g. 60;w=60."},"Retry-After":{"schema":{"type":"string","description":"Seconds to wait before retrying."},"required":true,"description":"Seconds to wait before retrying."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error (code internal_error).","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"A backend service failed or did not respond (code backend_unavailable). Retry later.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Temporarily unavailable; retry later. code tells why:\n- api_disabled: the API is switched off by the operators.\n- identity_provider_unavailable: the login service is unreachable.","headers":{"X-Request-Id":{"schema":{"type":"string","description":"ID of this request, also in the log."},"required":true,"description":"ID of this request, also in the log."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"webhooks":{}}