/v1/client/leaderboards/{slug}/scoresSubmit a score
Parameters
| Name | In | Type | Required |
|---|---|---|---|
| slug | path | string | Yes |
Request Body
Responses
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
REST API reference for TurnKit server endpoints.
https://api.turnkit.devUse the API key or bearer token scheme defined in the OpenAPI document for each secured endpoint.
TurnKit game backend.
/v1/client/leaderboards/{slug}/scores| Name | In | Type | Required |
|---|---|---|---|
| slug | path | string | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/client/pingHealth check endpoint that returns current game key status and CCU
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/client/leaderboards/{slug}/top| Name | In | Type | Required |
|---|---|---|---|
| slug | path | string | Yes |
| limit | query | integer · int32 | No |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/client/leaderboards/{slug}/me| Name | In | Type | Required |
|---|---|---|---|
| slug | path | string | Yes |
| surrounding | query | integer · int32 | No |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/client/leaderboards/{slug}/combined| Name | In | Type | Required |
|---|---|---|---|
| slug | path | string | Yes |
| topLimit | query | integer · int32 | No |
| surrounding | query | integer · int32 | No |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/dashboard/{gameKeyId}/upgrade/confirmConfirms an upgrade after the frontend shows the proration preview
| Name | In | Type | Required |
|---|---|---|---|
| gameKeyId | path | string · uuid | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/dashboard/{gameKeyId}/upgrade/checkoutCreates a checkout for new subscriptions or a proration preview for existing subscriptions
| Name | In | Type | Required |
|---|---|---|---|
| gameKeyId | path | string · uuid | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/dashboard/{gameKeyId}/auto-upgradeEnables or disables automatic tier upgrades when limits are exceeded
| Name | In | Type | Required |
|---|---|---|---|
| gameKeyId | path | string · uuid | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | None |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/dashboardRetrieves overview of all game keys with current CCU, tiers, and billing status
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/dashboard/{gameKeyId}/ccuRetrieves hourly CCU peak data for the last 7 days for a specific game key
| Name | In | Type | Required |
|---|---|---|---|
| gameKeyId | path | string · uuid | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/dashboard/{gameKeyId}/billingRetrieves billing status, tiers, and limits for a specific game key
| Name | In | Type | Required |
|---|---|---|---|
| gameKeyId | path | string · uuid | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keysRetrieves all game keys owned by the authenticated developer
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keysCreates a new game key with the specified name for the authenticated developer
| Name | In | Type | Required |
|---|---|---|---|
| name | query | string | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keys/{gameKeyId}/client-keysRetrieves all active client keys for the specified game key
| Name | In | Type | Required |
|---|---|---|---|
| gameKeyId | path | string · uuid | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keys/{gameKeyId}/client-keysGenerates a new client key for the specified game key
| Name | In | Type | Required |
|---|---|---|---|
| gameKeyId | path | string · uuid | Yes |
| displayName | query | string | No |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keys/{gameKeyId}/dashboardRetrieves the summary data needed to render the dashboard for a single game key
| Name | In | Type | Required |
|---|---|---|---|
| gameKeyId | path | string · uuid | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keys/{gameKeyId}Permanently deletes a game key and all associated data
| Name | In | Type | Required |
|---|---|---|---|
| gameKeyId | path | string · uuid | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | None |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keys/{gameKeyId}/client-keys/{clientKeyId}Revokes a client key, making it invalid for future API calls
| Name | In | Type | Required |
|---|---|---|---|
| gameKeyId | path | string · uuid | Yes |
| clientKeyId | path | string · uuid | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | None |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keys/{gameKeyId}/leaderboardsRetrieves all leaderboards for the current game key
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keys/{gameKeyId}/leaderboardsCreates a new leaderboard with the specified configuration. Available enum values: sortOrder: ASC (for time-based where lower is better), DESC (for points where higher is better); scoreStrategy: BEST_ONLY (keeps only best score per player), MULTIPLE_ENTRIES (stores all submissions), CUMULATIVE (sums all submissions); resetFrequency: NONE, DAILY, WEEKLY, MONTHLY
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keys/{gameKeyId}/leaderboards/{slug}/resetResets all scores for a leaderboard. Optionally archives scores before reset and applies a reset label
| Name | In | Type | Required |
|---|---|---|---|
| slug | path | string | Yes |
| archive | query | boolean | No |
| resetLabel | query | string | No |
| Status | Description | Content |
|---|---|---|
| 200 | OK | None |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keys/{gameKeyId}/leaderboards/banned-players/{playerId}Bans a player from all leaderboards for the current game key
| Name | In | Type | Required |
|---|---|---|---|
| playerId | path | string | Yes |
| reason | query | string | No |
| Status | Description | Content |
|---|---|---|
| 200 | OK | None |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keys/{gameKeyId}/leaderboards/banned-players/{playerId}Removes a player from the banned list for the current game key
| Name | In | Type | Required |
|---|---|---|---|
| playerId | path | string | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | None |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keys/{gameKeyId}/leaderboards/{slug}Permanently deletes a leaderboard and all its scores
| Name | In | Type | Required |
|---|---|---|---|
| slug | path | string | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | None |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keys/{gameKeyId}/leaderboards/{slug}Updates only the display name of an existing leaderboard
| Name | In | Type | Required |
|---|---|---|---|
| slug | path | string | Yes |
| displayName | query | string | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keys/{gameKeyId}/leaderboards/{slug}/scoresRetrieves paginated scores for a specific leaderboard
| Name | In | Type | Required |
|---|---|---|---|
| slug | path | string | Yes |
| page | query | integer · int32 | No |
| size | query | integer · int32 | No |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keys/{gameKeyId}/leaderboards/banned-playersRetrieves all banned player IDs for the current game key
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keys/{gameKeyId}/leaderboards/{slug}/scores/{scoreId}Removes a specific score entry from a leaderboard
| Name | In | Type | Required |
|---|---|---|---|
| scoreId | path | string · uuid | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | None |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/project-setupCreates the same default project setup used by Unity, or returns the existing setup for the authenticated developer and project name
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/auth/refresh| Name | In | Type | Required |
|---|---|---|---|
| turnkit_dev_refresh | cookie | string | No |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/auth/logout| Name | In | Type | Required |
|---|---|---|---|
| turnkit_dev_refresh | cookie | string | No |
| Status | Description | Content |
|---|---|---|
| 200 | OK | None |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/auth/exchange| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
TurnKit player authentication for SIGNED and TURNKIT_AUTH modes
/v1/client/auth/signed/exchange| Name | In | Type | Required |
|---|---|---|---|
| Authorization | header | string | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/client/auth/otp/verify| Name | In | Type | Required |
|---|---|---|---|
| Authorization | header | string | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/client/auth/otp/request| Name | In | Type | Required |
|---|---|---|---|
| Authorization | header | string | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | None |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
Configure player identity verification per game key
/v1/dev/game-keys/{gameKeyId}/player-id/smtp| Name | In | Type | Required |
|---|---|---|---|
| gameKeyId | path | string · uuid | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keys/{gameKeyId}/player-id/smtp| Name | In | Type | Required |
|---|---|---|---|
| gameKeyId | path | string · uuid | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | None |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keys/{gameKeyId}/player-id/smtp| Name | In | Type | Required |
|---|---|---|---|
| gameKeyId | path | string · uuid | Yes |
| Status | Description | Content |
|---|---|---|
| 204 | No Content | None |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keys/{gameKeyId}/player-id/mode| Name | In | Type | Required |
|---|---|---|---|
| gameKeyId | path | string · uuid | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | None |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keys/{gameKeyId}/player-id/secret/rotate| Name | In | Type | Required |
|---|---|---|---|
| gameKeyId | path | string · uuid | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/game-keys/{gameKeyId}/player-id/secret/generate| Name | In | Type | Required |
|---|---|---|---|
| gameKeyId | path | string · uuid | Yes |
| Status | Description | Content |
|---|---|---|
| 201 | Created | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
Manage TurnRelay match configurations
/v1/dev/relay-configs/{slug}| Name | In | Type | Required |
|---|---|---|---|
| gameKeyId | query | string · uuid | Yes |
| slug | path | string | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/relay-configs/{slug}Updates an existing relay configuration. Enum values: turnEnforcement: ROUND_ROBIN, FREE; votingMode: SYNC, ASYNC; failAction: SKIP_TURN, END_GAME
| Name | In | Type | Required |
|---|---|---|---|
| gameKeyId | query | string · uuid | Yes |
| slug | path | string | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/relay-configs/{slug}| Name | In | Type | Required |
|---|---|---|---|
| gameKeyId | query | string · uuid | Yes |
| slug | path | string | Yes |
| Status | Description | Content |
|---|---|---|
| 204 | No Content | None |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/relay-configs| Name | In | Type | Required |
|---|---|---|---|
| gameKeyId | query | string · uuid | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/relay-configsCreates a new relay configuration with the specified parameters. Enum values: turnEnforcement: ROUND_ROBIN, FREE; votingMode: SYNC, ASYNC; failAction: SKIP_TURN, END_GAME
| Name | In | Type | Required |
|---|---|---|---|
| gameKeyId | query | string · uuid | Yes |
| Status | Description | Content |
|---|---|---|
| 201 | Created | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
Join matchmaking queue
/v1/client/relay/queue| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/client/relay/queue/{slug}| Name | In | Type | Required |
|---|---|---|---|
| slug | path | string | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | None |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |
/v1/dev/auth-status| Name | In | Type | Required |
|---|---|---|---|
| pollId | query | string | Yes |
| Status | Description | Content |
|---|---|---|
| 200 | OK | */* |
| 403 | Forbidden | */* |
| 404 | Not Found | */* |
| 409 | Conflict | */* |