CEEJAYDocs

Get the player's profile

Read the connection and the member card of a connected player, with a player session.

GET /v1/player/me · for player session

Use it to show the member in the game: name, avatar, level, coins and shared roles. It takes no parameters. Send the player session as the bearer token.

Returns

Prop

Type

member is the member card. A game receives only these fields:

Prop

Type

connection contains:

Prop

Type

sharing contains agreed, the kinds of data the member has consented to share with the community's team (progress, activity, purchases, location) and, for a game with the game loop enabled, hub: the community's quests, rewards, shop and rank. It also contains needed, the kinds the game has added since. A kind in needed is not shared for this member until they consent to it at manageUrl. hub is part of connecting, so the member is not offered it as a separate choice, and it is needed again when the game enables the loop, raises its daily spending limit or adds a shop item.

hub contains enabled. It is true when the game has the loop enabled and this instance supports it. When it is false, every game loop request returns 409 with the code hub_not_enabled, or 404 with the code not_available: do not show the community's quests, shop or rank in the game.

reward contains status and items. CEEJAY's bot grants the reward for connecting shortly after the member consents, so a new connection reads pending at first: request again in a few seconds. items lists what was granted once status is paid. The other values explain why nothing was granted: none (the game has no reward for connecting, or it ended without a grant), already_paid (this member or this player was rewarded before), needs_verified_proof (the game rewards only verified connections), not_member (the person is not in the server) and waiting_screening (the member has not passed Discord's membership screening; CEEJAY checks again every 15 minutes for 7 days). See Game rewards.

Example

Request
curl "https://ceejay.communitystudios.xyz/api/v1/player/me" \
  -H "Authorization: Bearer $CEEJAY_PLAYER_SESSION"

The TypeScript example uses connect.getProfile from the Connect client in the TypeScript SDK. It obtains a player session automatically and returns the profile, or null when this device has no connection.

200 OK
{
  "success": true,
  "data": {
    "connection": {
      "connectionId": "8841",
      "game": "rugby_manager",
      "playerId": "p_19",
      "proof": "verified",
      "connectedAt": "2026-10-08T18:06:40.000Z",
      "moved": false,
      "alreadyConnected": false,
      "spendHoldUntil": "2026-10-09T18:06:40.000Z"
    },
    "member": {
      "displayName": "Nova",
      "nickname": "Nova | EU",
      "avatarUrl": "https://cdn.discordapp.com/avatars/409876543210987654/a1b2c3d4e5f60718293a4b5c6d7e8f90.png",
      "level": 12,
      "xp": 5420,
      "coins": 1450,
      "roles": [
        {
          "id": "982371004827100394",
          "name": "Tournament winner"
        }
      ],
      "membership": "member",
      "joinUrl": null
    },
    "sharing": {
      "agreed": [
        "progress",
        "activity",
        "hub"
      ],
      "needed": []
    },
    "hub": {
      "enabled": true
    },
    "reward": {
      "status": "pending",
      "items": []
    },
    "manageUrl": "https://ceejay.communitystudios.xyz/connect/mine"
  }
}

What the card is read from

The card is read from data CEEJAY stores about the member, never from Discord, so a game can request it as often as its limit allows. The nickname and the shared roles are those from when the member consented.

The connection and the device are checked on every request. A disconnect, a move to another player and "sign this device out" take effect immediately: the response is then 401 with the code connection_ended. Call Renew a player session to find out why.

In this response connection.moved and connection.alreadyConnected are always false: they describe one session's result.

Limits

140 requests a minute for one player session. Every request made with a player session shares it, the requests of the game loop included. The three X-RateLimit headers report that count.

Errors

StatuscodeerrorWhen
401connection_endedThis connection has endedThe connection was ended or moved, or this device was signed out, since the player session was made. Call Renew a player session to find out why

Every error body also includes requestId, and a 400 with the code bad_request identifies the invalid field in field. Match on code; message text can change.

The errors every request of a game shares (the key, the state of the game, the origin, 405, 429, 500) are on the Errors page.

On this page

Community StudiosPrivacyTerms