POST /v1/game/heartbeat
A game server is running. Send every minute so Admin centre > Game shows it as connected.
Request body
| Field | Type |
|---|
serverId | string |
placeId (optional) | string |
players | integer |
moduleVersion (optional) | string |
Response
| Field | Type |
|---|
everySeconds | number |
latestVersion | string |
POST /v1/game/shutdown
A game server is closing. Removes it from the connected list straight away.
Answers 204 with no body when it works.
POST /v1/game/activity/join
Players joined the game. Starts tracking their time.
Request body
| Field | Type |
|---|
robloxUserIds | string[] |
Response
| Field | Type |
|---|
tracked | number |
unknown | string[] |
POST /v1/game/activity/leave
Players left the game. Stops tracking their time.
Request body
| Field | Type |
|---|
robloxUserIds | string[] |
Response
| Field | Type |
|---|
tracked | number |
unknown | string[] |
POST /v1/game/activity/idle
Players have been idle for the workspace's idle time. Their time stops at the moment they went idle; send /activity/join when they move again.
Request body
| Field | Type |
|---|
robloxUserIds | string[] |
Response
| Field | Type |
|---|
tracked | number |
unknown | string[] |
POST /v1/game/orders
A staff member served an order. Counts towards their orders on the leaderboard.
Request body
| Field | Type |
|---|
robloxUserId | string |
customerName (optional) | string |
items | object[] |
items[].name | string |
items[].quantity | integer |
GET /v1/game/staff/{robloxUserId}
What the in-game staff panel shows: this week's activity against the quota, what the player may do, and the sessions they host today
Parameters
robloxUserId in the address · string
Response
| Field | Type |
|---|
minutes | number |
quota | number or null |
excused | boolean |
canModerate | boolean |
canHost | boolean |
sessions | object[] |
sessions[].id | string (uuid) |
sessions[].title | string |
sessions[].startsAt | string (date-time) |
POST /v1/game/cases
A staff member files a moderation case against a player in game. They need moderation.act, the same as in the app.
Request body
| Field | Type |
|---|
staffRobloxUserId | string |
target | object |
target.robloxUserId | string |
target.name | string |
action | one of: note, warning, kick, temp_ban, ban |
reason | string |
durationHours (optional) | integer |
Response
| Field | Type |
|---|
number | number |
expiresAt | string (date-time) or null |
POST /v1/game/sessions
A staff member starts a session now, in this server. They need sessions.host. Others see it in Sessions and can sign up.
Request body
| Field | Type |
|---|
staffRobloxUserId | string |
title | string |
kind (optional) | one of: training, shift, event, meeting |
durationMinutes (optional) | integer |
serverId (optional) | string |
POST /v1/game/logs/admin
Someone ran an admin command in the game. Shown in Moderation > Game logs for 90 days.
Request body
| Field | Type |
|---|
actor | object |
actor.robloxUserId | string |
actor.name | string |
command | string |
target (optional) | object |
target.robloxUserId (optional) | string |
target.name | string |
details (optional) | string |
serverId (optional) | string |
POST /v1/game/logs/chat
Chat messages from a game server, posted to Discord webhooks that want game chat. Rosterr does not keep them. Send the text after Roblox has filtered it.
Request body
| Field | Type |
|---|
serverId (optional) | string |
messages | object[] |
messages[].robloxUserId | string |
messages[].name | string |
messages[].text | string |
Response
| Field | Type |
|---|
forwarded | boolean |