Spaces
A space is one published surface: documentation, a forum, a blog, a changelog, a roadmap, a status page. Everything you sync lives in one.
List the spaces in an organization
GET /api/orgs/{orgId}/spaces
Authorization: Bearer cft_…{
"spaces": [
{
"id": "0f1c…",
"type": "DOCS",
"slug": "guides",
"name": "Guides",
"visibility": "PUBLIC",
"itemCount": 6,
"createdAt": "2026-08-17T21:04:11.882Z",
"settings": {}
}
]
}visibility is PUBLIC or PRIVATE, and itemCount is how many pieces are in it — enough for a picker to warn "this will import 4,812 pages" before an operator commits to it.
This is the step between having a token and syncing something. It was documented nowhere, which meant the first thing an integrator had to do was guess.
A space is one published surface: documentation, a forum, a blog, a changelog, a roadmap, a status page. Everything you sync lives in one.
List the spaces in an organization
GET /api/orgs/{orgId}/spaces
Authorization: Bearer cft_…{
"spaces": [
{
"id": "0f1c…",
"type": "DOCS",
"slug": "guides",
"name": "Guides",
"visibility": "PUBLIC",
"itemCount": 6,
"createdAt": "2026-08-17T21:04:11.882Z",
"settings": {}
}
]
}visibility is PUBLIC or PRIVATE, and itemCount is how many pieces are in it — enough for a picker to warn "this will import 4,812 pages" before an operator commits to it.
This is the step between having a token and syncing something. It was documented nowhere, which meant the first thing an integrator had to do was guess.
Where the space is published
Every space in the list carries url: their domain, then a site of theirs, then ours. It is null for a space that is not PUBLIC, which is the same thing as "nobody outside can read this yet".
The organization in the path may be the uuid or the slug — see Conventions.