Content¶
7 endpoints. Paths are relative to https://rmhstudios.com.
Endpoint |
Scope |
Summary |
|---|---|---|
|
|
List public builds |
|
|
Get a build |
|
|
List blog posts |
|
|
Get a blog post |
|
|
List news articles |
|
|
Get a news article |
|
|
Get a game leaderboard |
Reference¶
GET /api/v1/builds¶
The public builds marketplace, newest first.
Scope: read:builds · Success: 200 · Paginated: keyset — see Pagination · Operation id: listBuilds
Parameter |
In |
Type |
Required |
Description |
|---|---|---|---|---|
|
query |
string |
no |
Filter by category slug. |
|
query |
integer |
no |
Page size, 1–50 (default 20). |
|
query |
string |
no |
Opaque cursor from a previous |
Example response (200)
{
"data": [
{
"slug": "my-build",
"title": "My Build",
"description": "…",
"author": {
"id": "ck_user123",
"name": "Ada",
"handle": "ada",
"image": "https://…"
},
"technologies": [
"react"
],
"price": null,
"metrics": {
"likes": 4,
"comments": 1,
"views": 90
},
"publishedAt": "2026-06-01T00:00:00.000Z"
}
],
"nextCursor": null
}
GET /api/v1/builds/{slug}¶
A single public build, including its readme.
Scope: read:builds · Success: 200 · Operation id: getBuild
Parameter |
In |
Type |
Required |
Description |
|---|---|---|---|---|
|
path |
string |
yes |
The build slug. |
Example response (200)
{
"slug": "my-build",
"title": "My Build",
"description": "…",
"readme": "# My Build",
"repoUrl": null,
"demoUrl": null,
"author": {
"id": "ck_user123",
"name": "Ada",
"handle": "ada",
"image": "https://…"
},
"technologies": [
"react"
],
"metrics": {
"likes": 4,
"comments": 1,
"views": 90
}
}
GET /api/v1/blog¶
RMH Studios devlog posts, newest first.
Scope: read:content · Success: 200 · Paginated: keyset — see Pagination · Operation id: listBlog
Parameter |
In |
Type |
Required |
Description |
|---|---|---|---|---|
|
query |
integer |
no |
Page size, 1–50 (default 20). |
|
query |
string |
no |
Opaque cursor from a previous |
Example response (200)
{
"data": [
{
"slug": "hello",
"title": "Hello",
"description": "…",
"date": "2026-06-01",
"tags": [
"news"
]
}
],
"nextCursor": null
}
GET /api/v1/blog/{slug}¶
A single blog post, including markdown content.
Scope: read:content · Success: 200 · Operation id: getBlogPost
Parameter |
In |
Type |
Required |
Description |
|---|---|---|---|---|
|
path |
string |
yes |
The post slug. |
Example response (200)
{
"slug": "hello",
"title": "Hello",
"description": "…",
"date": "2026-06-01",
"tags": [
"news"
],
"content": "# Hello"
}
GET /api/v1/news¶
Published news articles, newest first.
Scope: read:content · Success: 200 · Paginated: keyset — see Pagination · Operation id: listNews
Parameter |
In |
Type |
Required |
Description |
|---|---|---|---|---|
|
query |
string |
no |
Filter by category. |
|
query |
integer |
no |
Page size, 1–50 (default 20). |
|
query |
string |
no |
Opaque cursor from a previous |
Example response (200)
{
"data": [
{
"slug": "big-news",
"title": "Big News",
"description": "…",
"date": "2026-06-01",
"category": "updates",
"featured": false
}
],
"nextCursor": null
}
GET /api/v1/news/{slug}¶
A single published news article.
Scope: read:content · Success: 200 · Operation id: getNewsArticle
Parameter |
In |
Type |
Required |
Description |
|---|---|---|---|---|
|
path |
string |
yes |
The article slug. |
Example response (200)
{
"slug": "big-news",
"title": "Big News",
"description": "…",
"date": "2026-06-01",
"category": "updates",
"content": "…",
"source": {
"title": "…",
"url": "https://…",
"publisher": "…"
}
}
GET /api/v1/leaderboards/{game}¶
Top scores for a game. Supported games are listed in the response of an unknown game (400).
Scope: read:leaderboards · Success: 200 · Paginated: keyset — see Pagination · Operation id: getLeaderboard
Parameter |
In |
Type |
Required |
Description |
|---|---|---|---|---|
|
path |
string |
yes |
Game key, e.g. |
|
query |
integer |
no |
Page size, 1–100 (default 25). |
Example response (200)
{
"game": "vega",
"metric": "highScore",
"data": [
{
"rank": 1,
"username": "ada",
"score": 99999,
"gamesPlayed": 12
}
]
}