List space types

Embed
Preview of the card
<a href="https://forumulate.com/reference/forumulate-api-spacetypes-list"><img src="https://forumulate.com/reference/_api/public/orgs/046a9bc0-d530-43ae-9bae-af7945008cda/spaces/8042f004-e3d9-445f-b7a4-b6c1f86836e6/pages/9558cd88-ce90-4e1b-b608-ff264b927b08/social-card.svg?v=3e7ae33eec8b" alt="List space types" width="600" height="315"></a>
GEThttps://forumulate.com/api/space-types

The whole space-type vocabulary as data: for each type, what a piece is called, what a container is called, which tabs exist and which fields a piece declares. Read it instead of hard-coding that a blog answers articles and a forum answers topics.

Parameters
forumulate-versionstringheader
API version negotiation. Send forumulate-version: 2026-12-01 on every request from a new integration; it is optional only so that integrations written before versioning keep working. Each version includes everything before it:
limitintegerquery
Rows per page. Defaults to 100. 500 is the most this endpoint serves — a larger value is capped, not refused. A value that is not a whole number of 1 or more is a 422, never a silent default.
= 100
cursorstringquery
Where to continue from: pass back the page.nextCursor of the previous answer. Opaque — there is nothing inside one to construct or parse. Sending one also opts into the enveloped shape, exactly as stating Forumulate-Version does.
Code samples
cURL
curl -X GET "https://forumulate.com/api/space-types?limit=&cursor=" \
  -H "forumulate-version: <value>"
TypeScript
const res = await fetch('https://forumulate.com/api/space-types?limit=&cursor=', {
  method: 'GET',
  headers: {
    'forumulate-version': '<value>',
  },
});
const data = await res.json();
Python
import requests

res = requests.request(
    "GET",
    "https://forumulate.com/api/space-types?limit=&cursor=",
    headers={
    "forumulate-version": "<value>",
    },
)
data = res.json()
Go
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://forumulate.com/api/space-types?limit=&cursor=", nil)
	req.Header.Set("forumulate-version", "<value>")
	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}
PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://forumulate.com/api/space-types?limit=&cursor=');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['forumulate-version: <value>']);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
Ruby
require 'net/http'
require 'uri'

uri = URI('https://forumulate.com/api/space-types?limit=&cursor=')
req = Net::HTTP::Get.new(uri)
req['forumulate-version'] = '<value>'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.request(req)
end
puts res.body
Java
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://forumulate.com/api/space-types?limit=&cursor="))
    .header("forumulate-version", "<value>")
    .GET()
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Responses
200 Success.
Example
{
  "spaceTypes": [
    {
      "backing": "event",
      "description": "string",
      "fields": [
        {
          "accept": null,
          "admin": null,
          "allowed": null,
          "allowedBlocks": null,
          "allowedGroups": null,
          "column": null,
          "condition": null,
          "default": null,
          "expr": null,
          "facet": null,
          "fields": null,
          "from": null,
          "hasMany": null,
          "hint": null,
          "indexed": null,
          "internal": null,
          "key": null,
          "label": null,
          "language": null,
          "localized": null,
          "max": null,
          "maxLength": null,
          "meta": null,
          "min": null,
          "minLength": null,
          "options": null,
          "pattern": null,
          "placeholder": null,
          "relationSpaceId": null,
          "required": null,
          "rowLabelField": null,
          "schema": null,
          "schemaProperty": null,
          "sortable": null,
          "to": null,
          "type": null,
          "unique": null,
          "visibility": null
        }
      ],
      "forcedVisibility": "PRIVATE",
      "icon": "string",
      "name": "string",
      "pageKinds": [
        {
          "description": null,
          "key": null,
          "label": null,
          "piece": null
        }
      ],
      "piecePresets": [
        {
          "description": null,
          "label": null,
          "name": null,
          "recommended": null
        }
      ],
      "pieceWriteCapability": "blog.author",
      "presets": [
        {
          "description": null,
          "label": null,
          "name": null,
          "recommended": null
        }
      ],
      "purpose": "string",
      "readerTools": {
        "aiActions": true,
        "copyMarkdown": true,
        "mcp": true,
        "pdf": true,
        "search": true
      },
      "route": {
        "content": "string",
        "defaultSlug": "string",
        "hubs": [
          null
        ],
        "orgIndexed": true,
        "pieceAddressed": true,
        "publicPrefix": "string",
        "rootRedirectsToFirstPiece": true
      },
      "sections": [
        {
          "example": null,
          "hint": null,
          "key": null,
          "kind": null,
          "label": null,
          "render": null,
          "required": null,
          "role": null,
          "schemaProperty": null
        }
      ],
      "settings": {
        "advanced": [
          null
        ],
        "essential": [
          null
        ]
      },
      "space": {
        "index": "board",
        "nav": "categories",
        "order": "activity",
        "summary": [
          null
        ],
        "whoCreates": "anyone"
      },
      "tabs": [
        "acceptance"
      ],
      "type": "BLOG",
      "vocabulary": {
        "container": [
          null
        ],
        "empty": {
          "hint": null,
          "title": null
        },
        "piece": [
          null
        ],
        "primaryAction": "string"
      }
    }
  ],
  "page": {
    "limit": 0,
    "hasMore": true,
    "nextCursor": "string",
    "has_more": true,
    "next_cursor": "string",
    "total": 0
  },
  "data": [
    {
      "backing": "event",
      "description": "string",
      "fields": [
        {
          "accept": null,
          "admin": null,
          "allowed": null,
          "allowedBlocks": null,
          "allowedGroups": null,
          "column": null,
          "condition": null,
          "default": null,
          "expr": null,
          "facet": null,
          "fields": null,
          "from": null,
          "hasMany": null,
          "hint": null,
          "indexed": null,
          "internal": null,
          "key": null,
          "label": null,
          "language": null,
          "localized": null,
          "max": null,
          "maxLength": null,
          "meta": null,
          "min": null,
          "minLength": null,
          "options": null,
          "pattern": null,
          "placeholder": null,
          "relationSpaceId": null,
          "required": null,
          "rowLabelField": null,
          "schema": null,
          "schemaProperty": null,
          "sortable": null,
          "to": null,
          "type": null,
          "unique": null,
          "visibility": null
        }
      ],
      "forcedVisibility": "PRIVATE",
      "icon": "string",
      "name": "string",
      "pageKinds": [
        {
          "description": null,
          "key": null,
          "label": null,
          "piece": null
        }
      ],
      "piecePresets": [
        {
          "description": null,
          "label": null,
          "name": null,
          "recommended": null
        }
      ],
      "pieceWriteCapability": "blog.author",
      "presets": [
        {
          "description": null,
          "label": null,
          "name": null,
          "recommended": null
        }
      ],
      "purpose": "string",
      "readerTools": {
        "aiActions": true,
        "copyMarkdown": true,
        "mcp": true,
        "pdf": true,
        "search": true
      },
      "route": {
        "content": "string",
        "defaultSlug": "string",
        "hubs": [
          null
        ],
        "orgIndexed": true,
        "pieceAddressed": true,
        "publicPrefix": "string",
        "rootRedirectsToFirstPiece": true
      },
      "sections": [
        {
          "example": null,
          "hint": null,
          "key": null,
          "kind": null,
          "label": null,
          "render": null,
          "required": null,
          "role": null,
          "schemaProperty": null
        }
      ],
      "settings": {
        "advanced": [
          null
        ],
        "essential": [
          null
        ]
      },
      "space": {
        "index": "board",
        "nav": "categories",
        "order": "activity",
        "summary": [
          null
        ],
        "whoCreates": "anyone"
      },
      "tabs": [
        "acceptance"
      ],
      "type": "BLOG",
      "vocabulary": {
        "container": [
          null
        ],
        "empty": {
          "hint": null,
          "title": null
        },
        "piece": [
          null
        ],
        "primaryAction": "string"
      }
    }
  ]
}
Schema
spaceTypesSpaceTypeSpec[]required
Show child parameters
backingstringrequired
event | incident | page | topic
descriptionstringrequired
fieldsSpaceTypeField[]
Show child parameters
acceptstring[]
adminobject
allowedstring[]
allowedBlocksstring[]
allowedGroupsstring[]
columnboolean
conditionstring | number | boolean | string | number | boolean | object[] | object[] | object
defaultobject
exprstring | number | boolean | string | number | boolean | object[] | object[] | object
facetboolean
fieldsSpaceTypeField[]
fromstring
hasManyboolean
hintstring
indexedboolean
internalboolean
keystringrequired
labelstringrequired
languagestring
localizedboolean
maxnumber
maxLengthnumber
metaboolean
minnumber
minLengthnumber
optionsstring[]
patternstring
placeholderstring
relationSpaceIdstring
requiredboolean
rowLabelFieldstring
schemaobject
schemaPropertystring
sortableboolean
toReferenceTarget[]
typestringrequired
array | blocks | boolean | code | color | computed | date | datetime | email | file | form | group | hours | image | json | link | media | money | multiselect | number | place | reference | relation | richText | select | seo | slug | text | textarea | url
uniqueboolean
visibilitystring
internal | preview | public
forcedVisibilitystring
PRIVATE
iconstringrequired
namestringrequired
pageKindsSpacePageKind[]
Show child parameters
descriptionstringrequired
keystringrequired
labelstringrequired
piecebooleanrequired
piecePresetsSpaceLayoutPreset[]
Show child parameters
descriptionstringrequired
labelstringrequired
namestringrequired
recommendedboolean
pieceWriteCapabilitystringrequired
blog.author | blog.publish | blog.read | community.manage_standing | content.keys | content.model | content.read | courses.manage | docs.publish | docs.read | docs.write | email.manage | forms.manage | forms.read | forum.moderate | forum.post | forum.read | forum.vote | org.delete | org.impersonate | org.manage_billing | org.manage_integrations | org.manage_members | org.manage_roles | org.manage_settings | org.manage_sso | org.manage_webhooks | org.read | org.run_queries | org.transfer_ownership | org.update | org.view_audit | space.create | space.delete | space.read | space.update | themes.manage
presetsSpaceLayoutPreset[]required
Show child parameters
descriptionstringrequired
labelstringrequired
namestringrequired
recommendedboolean
purposestringrequired
readerToolsobject
Show child parameters
aiActionsboolean
copyMarkdownboolean
mcpboolean
pdfboolean
searchboolean
routeobjectrequired
Show child parameters
contentstringrequired
defaultSlugstringrequired
hubsSpaceHubRoute[]
orgIndexedboolean
pieceAddressedboolean
publicPrefixstring
rootRedirectsToFirstPieceboolean
sectionsSpaceTypeSection[]
Show child parameters
examplestring
hintstring
keystringrequired
kindstringrequired
list | prose | steps | table
labelstringrequired
renderstring
labelled | lede | plain
requiredboolean
rolestring
example | prerequisite | reference | resolution | summary | symptom
schemaPropertystring
settingsobjectrequired
Show child parameters
advancedstring[]required
essentialstring[]required
spaceobjectrequired
Show child parameters
indexstringrequired
board | landing | list | single
navstringrequired
categories | none | sections | tags | tree
orderstringrequired
activity | chronological | manual | status | votes
summarystring[]required
whoCreatesstringrequired
anyone | members | staff
tabsstring[]required
typestringrequired
BLOG | CAREERS | CHANGELOG | CONTACT | CONTENT | COURSES | CUSTOM | DOCS | EVENTS | FAQ | FORUM | LEGAL | ROADMAP | STATUS
vocabularyobjectrequired
Show child parameters
containerstring[]
emptyobjectrequired
piecestring[]required
primaryActionstringrequired
pageobject
The paging envelope a collection carries when the caller states Forumulate-Version. Each operation’s own response schema says whether it has one: a collection either carries page, or answers both this and its pre-envelope shape and picks by the header. No listing pages with keys of its own any more — the allowlists in openapi-collection-shape.test.ts are empty, which is what stops a new one from appearing. Read hasMore and nextCursor: the snake_case pair beside them is deprecated and is not sent to a caller who states 2026-11-01 or later.
Show child parameters
limitintegerrequired
The limit this page was built with — what was asked for, capped. NOT the number of rows returned: a final page under the limit is normal, and hasMore is the only thing that says whether to keep walking.
hasMorebooleanrequired
Whether another page follows this one.
nextCursorstringrequired
Pass back as cursor to continue. Null on the last page.
has_morebooleandeprecated
The same value as hasMore. These two are the only snake_case keys in the API. Sent to callers who state 2026-09-01 or no version at all; ABSENT from 2026-11-01 onwards. Read hasMore instead — it is sent on every version.
next_cursorstringdeprecated
The same value as nextCursor. Absent from 2026-11-01 onwards; read nextCursor.
totalinteger
Rows in the whole collection — the size of the set, not of this page, and not of what you have seen so far. ABSENT where the source cannot count the collection: the append-only logs (staff actions, automation runs, connector activity, ingested questions, chat history) grow without bound and are not counted on every page view. Walk on hasMore, which is exact on every answer; read total only to show a size, and handle its absence.
dataSpaceTypeSpec[]
The same rows as the key named after them (topics, articles, pages, monitors, …), under a key that is the same on every paged list — so one parser reads every collection. The SAME array, not a different selection: read either. Present whenever page is, i.e. when you state Forumulate-Version (or send a cursor); the unversioned shape does not carry it.
Show child parameters
backingstringrequired
event | incident | page | topic
descriptionstringrequired
fieldsSpaceTypeField[]
Show child parameters
acceptstring[]
adminobject
allowedstring[]
allowedBlocksstring[]
allowedGroupsstring[]
columnboolean
conditionstring | number | boolean | string | number | boolean | object[] | object[] | object
defaultobject
exprstring | number | boolean | string | number | boolean | object[] | object[] | object
facetboolean
fieldsSpaceTypeField[]
fromstring
hasManyboolean
hintstring
indexedboolean
internalboolean
keystringrequired
labelstringrequired
languagestring
localizedboolean
maxnumber
maxLengthnumber
metaboolean
minnumber
minLengthnumber
optionsstring[]
patternstring
placeholderstring
relationSpaceIdstring
requiredboolean
rowLabelFieldstring
schemaobject
schemaPropertystring
sortableboolean
toReferenceTarget[]
typestringrequired
array | blocks | boolean | code | color | computed | date | datetime | email | file | form | group | hours | image | json | link | media | money | multiselect | number | place | reference | relation | richText | select | seo | slug | text | textarea | url
uniqueboolean
visibilitystring
internal | preview | public
forcedVisibilitystring
PRIVATE
iconstringrequired
namestringrequired
pageKindsSpacePageKind[]
Show child parameters
descriptionstringrequired
keystringrequired
labelstringrequired
piecebooleanrequired
piecePresetsSpaceLayoutPreset[]
Show child parameters
descriptionstringrequired
labelstringrequired
namestringrequired
recommendedboolean
pieceWriteCapabilitystringrequired
blog.author | blog.publish | blog.read | community.manage_standing | content.keys | content.model | content.read | courses.manage | docs.publish | docs.read | docs.write | email.manage | forms.manage | forms.read | forum.moderate | forum.post | forum.read | forum.vote | org.delete | org.impersonate | org.manage_billing | org.manage_integrations | org.manage_members | org.manage_roles | org.manage_settings | org.manage_sso | org.manage_webhooks | org.read | org.run_queries | org.transfer_ownership | org.update | org.view_audit | space.create | space.delete | space.read | space.update | themes.manage
presetsSpaceLayoutPreset[]required
Show child parameters
descriptionstringrequired
labelstringrequired
namestringrequired
recommendedboolean
purposestringrequired
readerToolsobject
Show child parameters
aiActionsboolean
copyMarkdownboolean
mcpboolean
pdfboolean
searchboolean
routeobjectrequired
Show child parameters
contentstringrequired
defaultSlugstringrequired
hubsSpaceHubRoute[]
orgIndexedboolean
pieceAddressedboolean
publicPrefixstring
rootRedirectsToFirstPieceboolean
sectionsSpaceTypeSection[]
Show child parameters
examplestring
hintstring
keystringrequired
kindstringrequired
list | prose | steps | table
labelstringrequired
renderstring
labelled | lede | plain
requiredboolean
rolestring
example | prerequisite | reference | resolution | summary | symptom
schemaPropertystring
settingsobjectrequired
Show child parameters
advancedstring[]required
essentialstring[]required
spaceobjectrequired
Show child parameters
indexstringrequired
board | landing | list | single
400 The request could not be understood — a malformed header, path or query value (request.malformed). A value that was understood but is not acceptable is a 422 validation.failed.
{
  "error": {
    "code": "string",
    "message": "string",
    "details": {},
    "docs": "string",
    "reason": "string",
    "slugs": [
      "string"
    ],
    "conflict": {
      "etag": "string",
      "ops": [
        null
      ]
    }
  },
  "requestId": "string"
}
429 Rate limited — see the RateLimit-* headers.
{
  "error": {
    "code": "string",
    "message": "string",
    "details": {},
    "docs": "string",
    "reason": "string",
    "slugs": [
      "string"
    ],
    "conflict": {
      "etag": "string",
      "ops": [
        null
      ]
    }
  },
  "requestId": "string"
}
default Error — the stable { error: { code, message } } envelope.
{
  "error": {
    "code": "string",
    "message": "string",
    "details": {},
    "docs": "string",
    "reason": "string",
    "slugs": [
      "string"
    ],
    "conflict": {
      "etag": "string",
      "ops": [
        null
      ]
    }
  },
  "requestId": "string"
}
The Forumulate teamUpdated