Endpoints
Factions
List wiki-visible factions or read one faction with its public description as Markdown and text.
Read the factions whose hidden_from_wiki value is false, in the campaign linked to your key. Every call needs authentication and follows the shared rate limits.
List factions
/api/public/v1/factionsReturns faction metadata, sorted first by manual sort order, then by name. Fetch a single faction to read its description.
| Parameter | Type | Description |
|---|---|---|
limit |
integer | Optional positive page size. Defaults to 50. Values above 100 are capped at 100. |
cursor |
string | Optional next_cursor from the previous page. Omit it for the first page. |
curl "https://app.saga20.com/api/public/v1/factions?limit=2" \
-H "Authorization: Bearer $SAGA20_API_KEY"
List response fields
The response holds data and pagination. See pagination to fetch the next page.
| Field | Type | Description |
|---|---|---|
data |
array of objects | Records on this page, with the fields below. |
data[].id |
string | Entry id. Use it in a single-record request. |
data[].name |
string | Entry name. |
data[].icon |
string or null | Stored icon identifier or emoji, or null when unset. |
data[].hidden_from_wiki |
boolean | Always false for returned entries. |
data[].created_at |
string or null | Creation timestamp, or null. |
data[].updated_at |
string or null | Last update timestamp, or null. |
data[].image_url |
string or null | Public image URL, or null when no image is set. |
pagination |
object | Pagination values for this list. |
pagination.next_cursor |
string or null | Cursor for the next page, or null on the last page. |
pagination.has_more |
boolean | True when another page is available. |
{
"data": [
{
"id": "9d3e7b52-18c4-4a6f-8e07-c5a1f2b4d630",
"name": "The Ashen Compact",
"icon": null,
"hidden_from_wiki": false,
"created_at": "2026-09-05T21:40:09+00:00",
"updated_at": "2026-09-18T07:44:01+00:00",
"image_url": null
}
],
"pagination": {
"next_cursor": null,
"has_more": false
}
}
Get one faction
/api/public/v1/factions/{id}Returns a faction visible on the wiki together with its public description. Sections meant for the GM are stripped out. Description formatting works as described in what the API returns.
| Parameter | Type | Description |
|---|---|---|
id |
string | Required path parameter. Use a faction id from the list response. |
A faction that is missing, hidden, or belongs to another campaign gives back 404 with {"error":"Entity not found"}.
curl "https://app.saga20.com/api/public/v1/factions/9d3e7b52-18c4-4a6f-8e07-c5a1f2b4d630" \
-H "Authorization: Bearer $SAGA20_API_KEY"
Faction response fields
The faction object comes back on its own, with no data wrapper.
| Field | Type | Description |
|---|---|---|
id |
string | Entry id. Use it in a single-record request. |
name |
string | Entry name. |
icon |
string or null | Stored icon identifier or emoji, or null when unset. |
hidden_from_wiki |
boolean | Always false for returned entries. |
created_at |
string or null | Creation timestamp, or null. |
updated_at |
string or null | Last update timestamp, or null. |
image_url |
string or null | Public image URL, or null when no image is set. |
description_markdown |
string | Public description as normalized Markdown. Empty when no public description content is available. |
description_text |
string | Matching description without heading or bold markers or images. List and table markers can remain. |
{
"id": "9d3e7b52-18c4-4a6f-8e07-c5a1f2b4d630",
"name": "The Ashen Compact",
"icon": null,
"hidden_from_wiki": false,
"created_at": "2026-09-05T21:40:09+00:00",
"updated_at": "2026-09-18T07:44:01+00:00",
"image_url": null,
"description_markdown": "## The compact\n\nAn order of wardens who keep the **old road** open through winter.",
"description_text": "The compact\n\nAn order of wardens who keep the old road open through winter."
}