Developers

Connect your Roblox game and your own tools to your workspace. Everything here works with a workspace API key.

Getting started

  1. Make an API key in your workspace's admin centre, under Developers › API keys. Open Rosterr
  2. Send it with every request as: Authorization: Bearer rstr_…
  3. Each key can make 600 requests a minute. Slow down if you get a 429.
curl https://api.rosterr.work/v1/game/workspace \
  -H "Authorization: Bearer rstr_your_key"

Keep keys on your game server or your own server, never in a LocalScript or a website. Anyone with the key can act as your workspace.

Reference

GET /v1/game/workspace

Which workspace this key belongs to

Response

FieldType
slugstring
namestring
robloxGroupIdstring
idleMinutesnumber

POST /v1/game/heartbeat

A game server is running. Send every minute so Admin centre > Game shows it as connected.

Request body

FieldType
serverIdstring
placeId (optional)string
playersinteger
moduleVersion (optional)string

Response

FieldType
everySecondsnumber
latestVersionstring

POST /v1/game/shutdown

A game server is closing. Removes it from the connected list straight away.

Request body

FieldType
serverIdstring

Answers 204 with no body when it works.

GET /v1/game/hiring/jobs

The workspace's job listings and how many applications each has

Response

FieldType
idstring (uuid)
titlestring
jobTypestring
visibilitystring
stateone of: open, closed, full
applicationsnumber
closesAtstring (date-time) or null
urlstring or null

GET /v1/game/hiring/applications

Applications, newest first, optionally only those since a time

Parameters

  • jobId in the query string · string (uuid) · (optional)
  • since in the query string · string (date-time) · (optional)

Response

FieldType
idstring (uuid)
jobIdstring (uuid)
jobstring
statusstring
robloxUserIdstring or null
robloxUsernamestring or null
createdAtstring (date-time)

GET /v1/game/members/{robloxUserId}

A player's roles and permissions, for in-game checks

Parameters

  • robloxUserId in the address · string

Response

FieldType
memberboolean
ranknumber or null
rolesstring[]
departmentsstring[]
permissionsstring[]

GET /v1/game/bans/{robloxUserId}

Whether a player is banned, for kicking them as they join

Parameters

  • robloxUserId in the address · string

Response

FieldType
bannedboolean
caseobject or null
case.numbernumber
case.reasonstring
case.expiresAtstring (date-time) or null

POST /v1/game/activity/join

Players joined the game. Starts tracking their time.

Request body

FieldType
robloxUserIdsstring[]

Response

FieldType
trackednumber
unknownstring[]

POST /v1/game/activity/leave

Players left the game. Stops tracking their time.

Request body

FieldType
robloxUserIdsstring[]

Response

FieldType
trackednumber
unknownstring[]

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

FieldType
robloxUserIdsstring[]

Response

FieldType
trackednumber
unknownstring[]

POST /v1/game/orders

A staff member served an order. Counts towards their orders on the leaderboard.

Request body

FieldType
robloxUserIdstring
customerName (optional)string
itemsobject[]
items[].namestring
items[].quantityinteger

Response

FieldType
idstring (uuid)

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

FieldType
minutesnumber
quotanumber or null
excusedboolean
canModerateboolean
canHostboolean
sessionsobject[]
sessions[].idstring (uuid)
sessions[].titlestring
sessions[].startsAtstring (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

FieldType
staffRobloxUserIdstring
targetobject
target.robloxUserIdstring
target.namestring
actionone of: note, warning, kick, temp_ban, ban
reasonstring
durationHours (optional)integer

Response

FieldType
numbernumber
expiresAtstring (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

FieldType
staffRobloxUserIdstring
titlestring
kind (optional)one of: training, shift, event, meeting
durationMinutes (optional)integer
serverId (optional)string

Response

FieldType
idstring (uuid)

POST /v1/game/logs/admin

Someone ran an admin command in the game. Shown in Moderation > Game logs for 90 days.

Request body

FieldType
actorobject
actor.robloxUserIdstring
actor.namestring
commandstring
target (optional)object
target.robloxUserId (optional)string
target.namestring
details (optional)string
serverId (optional)string

Response

FieldType
idstring (uuid)

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

FieldType
serverId (optional)string
messagesobject[]
messages[].robloxUserIdstring
messages[].namestring
messages[].textstring

Response

FieldType
forwardedboolean