CEEJAYDocs

Get a connect session

Read one connect session: its status, who approved, and the connection once it is approved.

GET /v1/games/{game}/connect/sessions/{sessionId} · requires players:connect

Use it to check how a session your server started ended, and to get the Discord name to show your player before the game approves.

Path parameters

Prop

Type

Returns

Prop

Type

connection holds:

Prop

Type

statusThe session
pendingWaiting for the member to approve on the connect page
needs_game_confirmationThe member approved, or the game attached a member's code. Waiting for the game to confirm
needs_confirmationA session a member started in Discord that the game has confirmed. The member confirms in Discord
approvedBoth approved. The connection is saved
declinedThe member pressed Cancel, or kept the player they were connected to
cancelledThe game declined, or a newer session for the same player superseded it
expiredThe 10 minutes have passed
lockedThe code was entered incorrectly five times
refusedThe connection could not be made: see reason

This list may grow: handle unknown values.

reasonWhy the session ended
member_cancelledThe member pressed Cancel, or kept the player they had
game_declinedThe game declined
bannedThe Discord account is banned from the server
player_blockedThe community blocked the player
player_already_connectedThe player is connected to another Discord account, and could not be moved
expiredThe 10 minutes passed
too_many_triesThe code was entered incorrectly five times
under_ageThe player is under age
nullThe session is open or approved, a newer session for the same player superseded it, or the member connected another player in the meantime

Example

Request
curl "https://ceejay.communitystudios.xyz/api/v1/games/rugby_manager/connect/sessions/kT3v9QmZ1xY7bLw2RfA8cN" \
  -H "Authorization: Bearer $CEEJAY_API_KEY"

The TypeScript tab calls ceejay.connect.getSession from the TypeScript SDK. It returns the data of the response below.

200 OK, approved
{
  "success": true,
  "data": {
    "sessionId": "kT3v9QmZ1xY7bLw2RfA8cN",
    "status": "approved",
    "reason": null,
    "expiresAt": "2026-10-08T18:14:11.000Z",
    "member": {
      "displayName": "Nova",
      "avatarUrl": "https://cdn.discordapp.com/avatars/409876543210987654/a1b2c3d4e5f60718293a4b5c6d7e8f90.png"
    },
    "connection": {
      "discordId": "409876543210987654",
      "playerId": "p_19",
      "proof": "verified",
      "connectedAt": "2026-10-08T18:06:40.000Z",
      "moved": false,
      "previousPlayerId": null
    }
  }
}
200 OK, waiting for the game to confirm
{
  "success": true,
  "data": {
    "sessionId": "kT3v9QmZ1xY7bLw2RfA8cN",
    "status": "needs_game_confirmation",
    "reason": null,
    "expiresAt": "2026-10-08T18:14:11.000Z",
    "member": {
      "displayName": "Nova",
      "avatarUrl": "https://cdn.discordapp.com/avatars/409876543210987654/a1b2c3d4e5f60718293a4b5c6d7e8f90.png"
    },
    "connection": null
  }
}

Reading a session

A session a member's code was attached to is read by the same ID. A session past its 10 minutes reads expired. A paused game can still be read.

member is present from needs_game_confirmation onwards: it is the name your game shows its player before Confirm a connect session. connection is present once the session is approved, and contains the member's Discord ID, which is never sent to the game.

The scope

players:connect lets a server act for a player: it can create a pass, and with a pass any player who is already connected at the verified level can be signed in. Keep it on your own server. It is never part of *: a Full Access key returns 403 here. Tick Act for a player when you make the key.

Limits

The Connect requests of a server have a limit of their own: 600 requests a minute for each game, across all five Connect endpoints. They are not counted against the key's own requests per minute. One API key is also capped at 6,000 requests a minute across all five Connect endpoints. The three X-RateLimit headers report the game's limit of 600 once the request has resolved its game, and the key's limit of 6,000 on a response returned before that: see Rate limits.

Errors

StatuscodeerrorWhen
404not_availableThis is not available on this instance yet.Connect is not enabled for this instance. It is enabled per instance. The body adds feature, which is players. Retrying will not change the response
403community_not_activeThis community is no longer active on CEEJAYThe community removed CEEJAY from its server
404game_not_foundGame not foundThe community has no game with this slug, or the game was removed. A slug that is not 2 to 32 lower-case letters, digits and underscores, starting with a letter, gets this response too
403game_not_allowedThis API key is limited to other gamesThe key is limited to other games of the community
403audience_not_allowedA game made for children cannot connect players or send player dataThe game is set up as made for children. Such a game connects nobody
404session_not_foundConnect session not foundThe game has no session with this ID. A session of another game or community is not found either

Every error body also carries requestId, and a 400 with the code bad_request names the invalid field in field. Match on code, not on the message text, which can change.

The errors every request shares (401, 403 for a missing scope, 405, 429, 500) are on the Errors page.

On this page

Community StudiosPrivacyTerms