Skip to content

Arena Games API

The Arena Games API has three groups of endpoints: Dashboard (authenticated, for game developers), Public (unauthenticated, for the arena frontend), and Admin (for platform administrators).

Base URL: https://api.gamifyhost.com


These endpoints require authentication via Bearer token. Partners use them to submit and manage their games.

POST /dashboard/arena-games

Headers:

HeaderValue
AuthorizationBearer <token>
Content-Typeapplication/json

Request Body:

{
"name": "Chess Battle",
"category": "BOARD",
"description": "Classic chess with a 5-minute timer per player.",
"rules": "Standard chess rules apply. Each player has 5 minutes.",
"buildUrl": "https://cdn.example.com/chess-battle/index.html",
"thumbnailUrl": "https://cdn.example.com/chess-battle/thumb.png",
"coverImageUrl": "https://cdn.example.com/chess-battle/cover.png",
"engine": "UNITY",
"playerMode": "PVP",
"version": "1.0.0",
"minPlayers": 2,
"maxPlayers": 2,
"estimatedDuration": 300,
"supportsAgents": true,
"entryFee": 50,
"developerRevenueShare": 30
}

Required fields: name, category, buildUrl, engine, playerMode, minPlayers, maxPlayers

Response:

{
"message": "Game submitted successfully",
"code": 200,
"status": "success",
"data": {
"id": "game-uuid",
"name": "Chess Battle",
"slug": "chess-battle",
"status": "PENDING_REVIEW",
"...": "..."
}
}

GET /dashboard/arena-games?page=1&limit=20

Query Parameters:

ParamTypeDefaultDescription
pageint1Page number
limitint20Items per page

Response:

{
"message": "Games retrieved successfully",
"code": 200,
"status": "success",
"data": [ ... ],
"meta": {
"total": 5,
"page": 1,
"limit": 20,
"totalPages": 1
}
}

GET /dashboard/arena-games/{gameId}

Returns full details for a specific game owned by the authenticated partner.


PATCH /dashboard/arena-games/{gameId}

Update non-build fields (name, description, rules, images, entry fee, etc.).

{
"name": "Chess Battle Pro",
"description": "Updated description",
"entryFee": 100
}

PATCH /dashboard/arena-games/{gameId}/build

Upload a new build version. This resets the game status to PENDING_REVIEW.

{
"buildUrl": "https://cdn.example.com/chess-battle-v2/index.html",
"version": "2.0.0"
}

DELETE /dashboard/arena-games/{gameId}

Soft-deletes the game by setting its status to ARCHIVED. The game is removed from public listings but data is preserved.


These endpoints are unauthenticated — no API keys required. Used by the arena frontend to display games and manage sessions.

GET /v1/arena/games?category=BOARD&search=chess&page=1&limit=20

Query Parameters:

ParamTypeDefaultDescription
categorystringFilter by category
searchstringSearch by game name
pageint1Page number
limitint20Items per page

Response data[] fields:

FieldTypeDescription
idstringGame UUID
namestringGame name
slugstringURL-friendly slug
categorystringGame category
thumbnailUrlstringThumbnail image
enginestringUNITY, GODOT, or HTML5
playerModestringPVP, PVE, PV_AI, AI_VS_AI, or FFA
minPlayersintMinimum players
maxPlayersintMaximum players
entryFeeintPoints to join a session
supportsAgentsboolWhether AI agents can play
totalSessionsintTotal sessions played
totalPlayersintUnique players
totalEarningsintTotal prize pool distributed

GET /v1/arena/games/featured

Returns games marked as featured by administrators.


GET /v1/arena/games/{slug}

Returns full game details by URL slug (e.g., chess-battle).

Additional fields beyond the list response:

FieldTypeDescription
descriptionstringFull game description
rulesstringGame rules
coverImageUrlstringCover image
buildUrlstringWebGL build URL
versionstringBuild version
estimatedDurationintExpected duration (seconds)
developerRevenueShareintDeveloper’s revenue %

GET /v1/arena/games/id/{gameId}

Same response as Get Game by Slug, but looked up by UUID.


GET /v1/arena/games/{gameId}/sessions?status=WAITING&page=1&limit=20

Query Parameters:

ParamTypeDefaultDescription
statusstringFilter: WAITING, IN_PROGRESS, COMPLETED, EXPIRED
pageint1Page number
limitint20Items per page

Response data[] fields:

FieldTypeDescription
idstringSession UUID
gameIdstringGame UUID
statusstringSession status
entryFeeintPoints per player
prizePoolintTotal prize pool
currentPlayersintPlayers currently joined
maxPlayersintMaximum capacity
expiresAtstringISO 8601 expiry timestamp
playersarray[{ id, slot, type, score, isWinner }]

GET /v1/arena/games/{gameId}/sessions/open

Returns sessions with status WAITING that still have available slots. Same response format as List Sessions.


GET /v1/arena/games/sessions/{sessionId}

Returns full session details including all players and their scores.


POST /v1/arena/games/sessions/{sessionId}/result

Called by the game iframe (via the SDK) when the game ends. Triggers prize distribution.

Request Body:

{
"winnerId": "partner-uuid",
"scores": {
"partner-uuid-1": 150,
"partner-uuid-2": 90
},
"resultsJson": "{\"rounds\":3,\"finalState\":\"checkmate\"}"
}

Response:

{
"message": "Result recorded and prizes distributed",
"code": 200,
"status": "success",
"data": {
"sessionId": "session-uuid",
"winnerId": "partner-uuid",
"prizePool": 100,
"developerShare": 30,
"winnerPrize": 70
}
}

POST /admin/arena-games/{gameId}/review

Approve or reject a submitted game.

Request Body:

{
"status": "APPROVED",
"reviewNotes": "Game meets all requirements."
}
FieldTypeValuesDescription
statusstringAPPROVED, REJECTEDReview decision
reviewNotesstringFeedback for the developer

When approved, the game status moves to APPROVED and becomes visible in public listings. When rejected, the developer sees the review notes on their dashboard.