Content
Generate, list, retrieve, rename, and delete game content from your servers. Each endpoint has an interactive console below — paste your API key and try it.
The content endpoints are the server-side equivalent of Hub → Content. Use them to back automation: generating puzzles from your CMS, archiving completed campaigns, syncing publication state with your warehouse.
List content
Page through your workspace's content. Filter by status, game, or language.
/api/v2/contentscope · content:readlimit querystatus querygame_type querylanguage querycurl -X GET 'https://hub.playgent.com/api/v2/content'The response shape:
{
"object": "list",
"data": [
{
"id": "65f…",
"content": "pub_history_42",
"game_type": "trivia",
"language": "en",
"title": "Curious Minds",
"status": "published",
"source_input_type": "topic",
"source_input": "History of Science",
"preview_url": "https://static.playgent.com/play/v2/?game=trivia&mode=pinned&content=pub_history_42",
"created_at": "2026-05-06T10:30:00.000Z",
"updated_at": "2026-05-06T10:35:00.000Z",
"published_at": "2026-05-06T10:35:00.000Z"
}
]
}
Create content
Generate a new puzzle from a topic, URL, or pasted text. The result is published to the CDN automatically — the returned preview_url is ready to embed.
/api/v2/contentscope · content:writeinput_type body·reqinput body·reqgame_type body·reqlanguage bodytitle bodycurl -X POST 'https://hub.playgent.com/api/v2/content' \
-H 'Content-Type: application/json' \
--data '{"input_type":"topic","input":"History of Science","game_type":"trivia"}'input_type decides how input is interpreted:
topic— a short subject ("History of Science"). The generator picks the angle.url— a public URL. The generator fetches and reads the page.text— pasted text. Useful when the source isn't on the public web (intranet, paywalled, etc.).
Retrieve
GET /api/v2/content/{content}
/api/v2/content/{content}scope · content:readcontent path·reqcurl -X GET 'https://hub.playgent.com/api/v2/content/pub_abc123'Returns the same metadata shape as list. The underlying game payload is internal and isn't exposed through the API.
Rename
Update the displayed title. title is the only editable field.
/api/v2/content/{content}scope · content:writecontent path·reqtitle body·reqcurl -X PATCH 'https://hub.playgent.com/api/v2/content/pub_abc123' \
-H 'Content-Type: application/json' \
--data '{"title":"New title"}'{ "title": "New title" }
Delete
DELETE /api/v2/content/{content}
/api/v2/content/{content}scope · content:deletecontent path·reqcurl -X DELETE 'https://hub.playgent.com/api/v2/content/pub_abc123'Permanently removes the content and revokes the CDN copy.
{ "deleted": true, "content": "pub_history_42" }
Leaderboard
Read the top scores submitted by players for a piece of content. Use this to surface a custom leaderboard inside your own dashboard or pipe scores into a downstream system.
/api/v2/content/{content}/leaderboardscope · content:readcontent path·reqdifficulty querycurl -X GET 'https://hub.playgent.com/api/v2/content/pub_abc123/leaderboard'{
"object": "list",
"content": "pub_history_42",
"game_type": "trivia",
"difficulty": "default",
"entries": [
{
"rank": 1,
"player_id": "p_8mY2…",
"username": "alex",
"time_ms": 41200,
"hints_used": 0,
"score": 940,
"moves": null,
"updated_at": 1746628800
}
]
}
How the bucket is selected:
- Pinned content (created via
POST /api/v2/content): one cumulative leaderboard per(content, difficulty). - Daily content (scheduled into a channel by date): one leaderboard per
(content, date, difficulty). The endpoint resolves the date from the publication automatically — you don't pass it.
difficulty defaults to default. For games with multiple difficulties (e.g. wordsearch's mini / easy), pass the bucket you want with ?difficulty=mini.
player_id here is the leaderboard player identifier (a stable per-browser id) — it is not the Player embed configuration.