Documentation / API / Steam Link Endpoints
On this page
Player Profile Query Parameters Example Requests Response (200) Response Fields Not Found (404) List Players Query Parameters Example Requests Response (200) Response Headers Response Fields

Steam Links API — Endpoints Premium

The two read-only routes exposed under /api/v1/steam-link, with full request and response shapes.

GET Player Profile

Retrieve a single player's profile — their Discord account details and every Steam connection (active and disconnected) — scoped to your server.

Endpoint

GET /api/v1/steam-link/player-profile

Query Parameters

ParameterTypeRequiredDescription
discord_idstringConditional*The Discord user ID (snowflake) of the player to look up.
steam_idstringConditional*The SteamID64 of the player to look up.

* Exactly one of discord_id or steam_id must be provided. Sending both returns 422; sending neither returns 422.

Example Requests

cURL (by Discord ID)

curl -X GET \
  "https://mokito.bippymiester.dev/api/v1/steam-link/player-profile?discord_id=575805961315287061" \
  -H "Authorization: Bearer mok_yourTokenHere" \
  -H "Accept: application/json"

cURL (by Steam ID)

curl -X GET \
  "https://mokito.bippymiester.dev/api/v1/steam-link/player-profile?steam_id=76561197960435530" \
  -H "Authorization: Bearer mok_yourTokenHere" \
  -H "Accept: application/json"

Response 200 OK

{
  "data": {
    "discordId": "575805961315287061",
    "discordAccount": {
      "discordId": "575805961315287061",
      "username": "bippymiester",
      "avatar": "https://cdn.discordapp.com/avatars/575805961315287061/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4.png?size=64",
      "createdAt": "2025-08-15T12:30:00+00:00"
    },
    "steamAccounts": [
      {
        "steamId": "76561197960435530",
        "username": "GamerTag123",
        "avatar": "https://mokito.bippymiester.dev/storage/steam-avatars/76561197960435530.jpg",
        "linked": true
      },
      {
        "steamId": "76561198084399999",
        "username": "OldAccount",
        "avatar": "https://mokito.bippymiester.dev/storage/steam-avatars/76561198084399999.jpg",
        "linked": false
      }
    ]
  },
  "message": "Player profile retrieved successfully."
}

Response Fields

FieldTypeDescription
data.discordIdstringDiscord user ID.
data.discordAccount.discordIdstringDiscord user ID (same as above).
data.discordAccount.usernamestringDiscord username.
data.discordAccount.avatarstringDiscord CDN avatar URL (or default avatar URL).
data.discordAccount.createdAtstring|nullISO-8601 datetime of Mokito account creation. null if unknown.
data.steamAccountsarrayEvery Steam connection for this user, newest first.
data.steamAccounts[].steamIdstringSteamID64.
data.steamAccounts[].usernamestring|nullSteam profile name at connection time. null if not captured.
data.steamAccounts[].avatarstring|nullSteam avatar URL (served from Mokito's public storage).
data.steamAccounts[].linkedbooleantrue = currently connected; false = disconnected (retained for history).
messagestringHuman-readable status message.
Scoped to your guild. If the looked-up user is not a member of the server your API token belongs to, the response is 404 — the API never leaks data about users outside your server, even if you know their Discord or Steam ID.

Not Found 404

{
  "message": "No player found matching the provided identifier in this server."
}

GET List Players

Retrieve a paginated list of every Steam-linked account in your server. Each row is one (Discord user, Steam account) pair — a member with multiple Steam connections appears multiple times.

Endpoint

GET /api/v1/steam-link/players

Query Parameters

ParameterTypeDefaultDescription
limitinteger100Items per page (1–100). Values above 100 are clamped to 100, not rejected.
pageinteger0Zero-indexed page number. Page 0 is the first page.
created_afterstring (datetime)Optional UTC datetime filter. Only return Steam connections created after this timestamp. ISO-8601 recommended (e.g. 2026-01-01T00:00:00Z). Invalid values are silently ignored.
Pages are zero-indexed. The first page is page=0, not page=1. The meta.page field in the response is also zero-indexed.

Example Requests

Basic pagination

curl -X GET \
  "https://mokito.bippymiester.dev/api/v1/steam-link/players?limit=25&page=0" \
  -H "Authorization: Bearer mok_yourTokenHere" \
  -H "Accept: application/json"

With a date filter

curl -X GET \
  "https://mokito.bippymiester.dev/api/v1/steam-link/players?created_after=2026-01-01T00:00:00Z&page=2&limit=50" \
  -H "Authorization: Bearer mok_yourTokenHere" \
  -H "Accept: application/json"

Response 200 OK

{
  "data": [
    {
      "discordId": "575805961315287061",
      "steamId": "76561197960435530",
      "linked": true
    },
    {
      "discordId": "987654321098765432",
      "steamId": "76561198084399999",
      "linked": false
    }
  ],
  "meta": {
    "page": 0,
    "limit": 25,
    "total": 142,
    "total_pages": 5,
    "has_more": true
  },
  "message": "Players retrieved successfully."
}

Response Headers

HeaderExampleMeaning
X-Total142Total number of linked accounts matching the query.
X-Total-Pages5Total number of pages (zero-indexed count: 6 pages = 5).

Response Fields

FieldTypeDescription
dataarrayArray of player rows.
data[].discordIdstringDiscord user ID.
data[].steamIdstringSteamID64.
data[].linkedbooleantrue = currently connected; false = disconnected (retained).
meta.pageintegerCurrent page (zero-indexed).
meta.limitintegerItems per page.
meta.totalintegerTotal matching items.
meta.total_pagesintegerTotal pages (zero-indexed: last page index = total_pages).
meta.has_morebooleantrue if more pages exist after this one.
messagestringHuman-readable status message.