Community spaces

Embed
Preview of the card
<a href="https://forumulate.com/guides/forum"><img src="https://forumulate.com/guides/_api/public/orgs/046a9bc0-d530-43ae-9bae-af7945008cda/spaces/36aa4df0-1e95-4cef-8ae9-795169441345/pages/588fbda9-ffe6-4fd6-b169-ae754bd7bb90/social-card.svg?v=3e7ae33eec8b" alt="Community spaces" width="600" height="315"></a>
A published community forum.

A Community space is questions, answers and discussion — a Discourse-style forum. Members create topics inside categories; a topic is either a discussion or a question, and a question can have an answer marked as accepted.

Set it up

  1. Create a space and choose the Community type. Its public prefix is /f/.

  2. Add categories with POST /orgs/{orgId}/spaces/{spaceId}/forum/categories. A category takes name, description, color (shown as a coloured left border on its card), parentId, logoUrl and backgroundUrl; PATCH …/forum/categories/{id} changes any of them. The Free plan holds 10 categories in each community space.

  3. Pick an index layout (below).

  4. Members create topics; who may post is decided by who may post, below.

Index layouts (presets)

  • Categories (recommended) — category cards on the way in, threads inside each.

  • Firehose — one stream, newest first, no cards on the way in. For communities that live in the flow.

  • Dense list — the stat table a big community reads at a glance: title and tags on the left; replies, views and freshness right-aligned in columns.

Front page

The community's front page is a composed document. Until you edit it, it is generated: the title band (the community's name — move it, or hide it with hideTitle), the intro, search and identity bands, the category tiles (a spaceCategories block, left out under Firehose or when category cards are switched off), the filters band, the category band (a category view's subcategories and featured topics — kept when you swap the topic list for a feed in another layout) and the topics feed (rows under Dense list, feed otherwise). A community feed sorts by latest, top, hot or oldest and filters by category, tags and pinned. A spaceCategories block can show each category's colour, picture, logo, description, topic count and top topics — on this space's front page, or on any other front page in the organization — as tiles, a link tree (nav), ruled rows (rows) or a table beside each category's latest topics (table). A spaceLeaderboard block shows the top contributors. The welcome and tags bands are offered, never generated. The front door's showSearch and showIdentity switch the search and identity bands off (showSearch also stays off while showFilters is off). The filter row's tabs and look are theme.forum.front — see Theme a forum.

Categories

Create and edit categories with POST / PATCH /orgs/{orgId}/spaces/{spaceId}/forum/categories[/{categoryId}]. Beyond the name, description, colour, parent, logo and background, a category takes:

Field

What it does

slug

Its address, c/<slug>. Unset, it comes from the name (a rename re-slugs, as before). Set, it must be free in the space (409 category.slug_taken), and the old address keeps redirecting.

icon

A glyph name (the theming guide lists them) or an image URL, drawn beside the name.

emoji

One emoji, drawn beside the name.

style

Which mark to draw: square (a colour swatch), icon, emoji or none. Unset = no mark on badges, the colour border on cards.

textColor, textColorDark

Text on the category's colour fill (a filled banner, a box tile, a badge). Unset = black or white, whichever reads. A pair that fails WCAG AA still saves; the response carries warnings: [{field, ratio, required, message}].

colorDark

The colour in a dark scheme. Unset = color, or a lifted color when the theme sets forum.categoryPage.liftDark.

subcategoryListStyle

How the category page lists its children: rows, boxes or chips. Unset = the theme's choice, else the old strip (shown when showSubcategoryList is on).

defaultSort

latest, top or hot — what the category opens on.

defaultTopPeriod

day, week, month, quarter or year — the Top window the category opens on when the reader names none.

sortAscending

true lists Latest oldest-first in this category.

aboutTopicId

A topic in this space that explains the category; its page links "About the … category".

New categories are added after the existing ones. Older forums whose categories were all created without a position list alphabetically; fix the order once with POST …/forum/categories/reorder.

topicCount counts topics filed in the category itself; totalTopicCount adds every subcategory's, and the Categories page shows that.

A parent category's list includes its subcategories' topics, so the list holds what the count says. GET …/forum?category=<slug> (and the console's GET /orgs/{orgId}/spaces/{spaceId}/forum?category=…) lists the category and every descendant the reader may see; add includeSubcategories=false for only the topics filed on that exact category. new-count takes the same parameter. A pin still belongs to its own category: a subcategory's pinned topic is not floated to the top of the parent's list (a global pin is).

The categories overview. GET /public/orgs/{orgId}/spaces/{spaceId}/forum/categories/overview returns every category the reader may see with its roll-up counts, topicsPerWeek, latest (one topic, kept for compatibility) and:

  • latestTopics — the newest topics under the category and its subcategories, newest activity first, each { id, slug, title, solved, lastActivityAt, replyCount } (answered repeats solved). How many: ?latest=N, 1–6, default 1. The "Categories + latest" table on a front page asks for as many as it shows.

  • meta.kinds — published topics per kind over the categories the reader may see, e.g. {"QUESTION": 41, "DISCUSSION": 12} (a kind with none is absent). The automatic look reads it to tell a Q&A forum from a discussion one.

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/categories/overview?latest=4

Category pages

Every category has its own page at /c/<slug> under the forum (on a custom domain, under the forum's address). Its banner, intro, subcategories, filters and topics all stay in the category — switching to Hot or Top no longer drops you back to the whole forum.

  • categories/<slug> and the old ?category=<slug> (or ?category=<id>) addresses redirect there, keeping the other query parameters.

  • The RSS feed stays at categories/<slug>/rss.xml; c/<slug>/rss.xml serves the same feed.

  • An unknown category, or one the reader may not see, is a 404 (it used to be a server error).

  • Signed-in readers can follow a category from its page (Watching, Tracking, Normal, Muted) when the theme turns forum.categoryPage.subscribe on — POST /public/orgs/{orgId}/spaces/{spaceId}/forum/category/{slug}/notify {"level": …}.

  • GET /public/orgs/{orgId}/spaces/{spaceId}/forum/category/{slug} returns the page's data: the category, topic/reply/this-week counts over it and its subcategories, its parent and children, and its about topic.

  • A category a logged-out reader cannot see shows a lock to members who can, and is left out of the sitemap.

Tags

The forum's tag index is /tags: every tag with a published topic you can see, with its count. GET /public/orgs/{orgId}/spaces/{spaceId}/forum/tags returns each tag's display (label, colours, icon, description) and the space's tag groups by name. A tag's label, colours, icon and description are set with PUT /orgs/{orgId}/spaces/{spaceId}/blog/tags/{slug} — the same tag record the blog uses (icon is a glyph name or image URL). Tags used only in restricted categories are not listed or counted for readers who cannot see those categories.

Discussions vs questions

Every topic has a Kind: Discussion or Question.

  • A Question can have one reply marked as the accepted answer — it renders highlighted, with a check and an "accepted answer" label, and the thread shows as solved in the list.

  • A Discussion cannot have an accepted answer.

Readers can filter the index by Solved and Unanswered, alongside Latest and Top.

Under the hood this drives SEO too: question threads emit QAPage structured data (with the accepted answer marked), and discussions emit DiscussionForumPosting.

Q&A detection

A forum whose theme sets no forum.look picks its list look from what it holds: when most published topics are questions, the space renders the Q&A look (vote gutters, "answered" counts, a comment list under each answer). Since round 5 a topic counts as a question for this only when its category says it holds questions. That keeps a forum whose questions sit in ordinary discussion categories on the default Replies / Views / Activity list.

A category's kind is topicKind on POST …/forum/categories and PATCH …/forum/categories/{categoryId}:

Value

Meaning

"question"

The category holds questions. Its question topics count toward the Q&A share, and a topic filed here without a kind of its own is created as a Question.

"discussion"

The category holds discussions. Nothing in it counts toward the share.

null (unset)

Undeclared. Nothing in it counts toward the share, and new topics default to Discussion as before.

PATCH /orgs/{orgId}/spaces/{spaceId}/forum/categories/{categoryId}
{ "topicKind": "question" }

The share is the number of Question topics in question categories over every listed, published topic. The thresholds (share and minimum topic count) are unchanged. A forum with no question category never switches to the Q&A look on its own. theme.forum.qa overrides the detection either way: "on" always uses Q&A, "off" never does, and "auto" asks the question even under a chosen look. The answer is cached for five minutes.

Topics in other languages

A forum declares languages the same way docs do (POST …/docs/locales, Studio → Languages). Staff (forum.moderate) can then give a topic's opening post a translation per language at …/forum/{topicId}/translations/{locale} — PUT by hand, POST …/auto with your own DeepL key (never over a person's text without force, unpublished until published), GET for each language's state (exists, origin, published, stale), DELETE to remove. The shape is a blog post's and a changelog release's.

Readers get the topic at its own address in that language (a path segment after the forum's address, /community/es/<topic>): the title and opening post are the translation, the replies stay in the words their authors wrote. Topic lists show translated titles where one is published. GET /public/…/forum/t/{slug} and the index answer locale and locales for a language row. This is separate from a member's on-demand Translate button, which machine-translates any post for one reader and is not crawlable.

What members can do in a thread

  • Reply, including quote-to-reply — select a sentence in any post and it drops into the composer.

  • React to posts with emoji (reactions are the one place emoji are user content). See Votes and reactions.

  • Vote on posts (up, or up and down, per postVotes) — topics carry the opening post's score.

  • Polls — a topic can carry one or more polls readers vote in.

  • Threading — replies are flat, nested under the post they answer, or (on a Q&A space) answers with a compact comment list under each. It is set per space with theme.forum.topic.threading (flat · nested · comments); a space that does not set it follows the org setting community.enable_threaded_replies. See Theme a forum.

  • Author profile pages (/u/[userId]) and a community leaderboard (/leaderboard).

Reader accounts

A reader who signs in through the space's own providers is a member of the organization. In the header they get an avatar that opens their menu:

  • Profile (/u/<username>), Bookmarks (/bookmarks), Notifications (/notifications) and Preferences (/preferences).

  • Sign out.

A bell beside the avatar shows a dot for unread notifications. A notification about a topic in this forum links to it on the address being read (your own domain included). The bell checks once a minute while the tab is open, and "Mark all read" clears it.

/preferences puts a reader's settings on one page: watch, track or mute the forum, a category or a tag; how email reaches them (each notification, a daily or weekly summary, mailing-list mode) and which kinds of notification reach them at all; their name, bio, location, website and cover image; and a status (an emoji and a line) shown on their card and profile. There is no drafts list: a reader's unsent drafts are kept per composer, in their browser.

The member directory (/u) lists this forum's members by default: everyone with a visible post here, including members who joined but never earned a trust level. "Whole community" lists the organization. Guests (people who posted without an account) have no profile, so they are not listed; a forum whose every post is a guest's says so.

Profile tiles count this forum only. Trust level, badges and days visited are standing across the whole community, and the profile says so.

Member profiles

A member's page (/u/<username>) is built from forum.profile keys in the space theme (full table: forum theme, "profile — a member's page"). Each key does one thing and none depends on another:

Key

Shape

Default

Scope

Example

profile.avatarSize

px 45–160

56

theme

120

profile.summary.sections

≤9 of stats, topReplies, topTopics, topLinks, mostRepliedTo, mostLikedBy, mostLiked, topCategories, topBadges

today's summary

theme

["stats","topTopics","topBadges"]

profile.rail

≤2 of solved, tags

no rail

theme

["solved"]

profile.statsStyle

tiles | inline

tiles

theme

"inline"

profile.itemMeta

1–3 of date, likes, replies

"3 replies · 5 votes" / "5 likes"

theme

["date","likes"]

profile.tabs

1–3 of summary, activity, badges

["summary","activity"]

theme

["summary","badges","activity"]

  • statsStyle: "inline" draws the Summary's six numbers as one line ("12 Topics created · 40 Posts created · …") instead of the tile grid.

  • itemMeta chooses the facts under every top-topic and top-reply row, in order: date (when the topic was published / the reply written), likes (a heart and the count), replies (topics only). A fact a row has no value for is left out rather than drawn as zero.

  • tabs orders the tabs; the first one opens. badges adds a tab with every badge the member holds — icon, what it is for, when it was earned, and "×3" for a badge earned more than once. It is drawn only for a member who holds at least one; ["badges"] alone on a member with none falls back to Summary rather than an empty page.

  • topBadges in summary.sections keeps its place when the member has no badges: the heading and "Nothing yet.", like every other list.

The data behind the page is public API: GET …/forum/u/{username} (profile, badges) and GET …/forum/u/{username}/summary (stats and lists; topTopics[].publishedAt and topReplies[].createdAt carry the dates itemMeta prints).

Per-category overrides name real categories

forum.categoryOverrides (a category page's list and header) and forum.topic.byCategory (a topic page's look, by the topic's category) are maps keyed by category slug, each a patch merged over the space theme for that category only. A slug that names no category in the space is refused when you save — PUT/PATCH …/theme, the theme draft and a site theme alike — with a 422 naming the key and listing the slugs that exist:

{
  "code": "validation.failed",
  "message": "Unknown category slug \"anouncements\" in a per-category theme override.",
  "details": {
    "theme.forum.categoryOverrides.anouncements": [
      "No category with the slug \"anouncements\" here. Known slugs: announcements, help, ideas."
    ]
  }
}

A site theme may name a category of any of the site's forums. Clearing one slug is a PATCH with that slug set to null. Both maps are served back in the reader theme (GET /public/orgs/{orgId}/spaces/{spaceId}/chrome, theme.forum).

Feed and leaderboard fields

Two payloads carry what a composed front page needs to draw faces and handles:

  • replyPreviews[] on forum topic lists (?previews=1..3) — each preview has author, text, authorAvatar (the reply author's picture, null for a guest, an anonymous author or no picture) and authorSeed (the colour for the initials disc).

  • GET …/forum/leaderboard rows carry username (the @handle; null when there is none to show) beside name and avatarUrl; so do the points leaderboard rows.

Mix and match

A look (forum.look) is only a patch of these same keys — nothing a look does is out of reach of a theme that sets the keys itself, and any key you set wins over the look's. So keys combine freely. Three combinations no built-in look or replica uses, each a complete theme body (PATCH …/spaces/{spaceId}/theme):

A help desk with an announcements board. The home is the dense table; the announcements category reads as cards (scope: category); help topics put the accepted answer under a solid green "Solved" header (scope: category); profiles are one line of numbers with dated rows and a Badges tab (scope: theme).

{
  "forum": {
    "list": { "anatomy": "table" },
    "categoryOverrides": {
      "announcements": { "list": { "anatomy": "cards" } }
    },
    "topic": {
      "answerPlacement": "excerpt",
      "byCategory": {
        "help": { "answerStyle": "header", "answerColor": "success" }
      }
    },
    "profile": {
      "statsStyle": "inline",
      "itemMeta": ["date", "likes"],
      "tabs": ["summary", "badges", "activity"]
    }
  }
}

Quiet member pages beside a busy forum. Big avatars, a short summary that leads with what someone is known for, a solutions rail; announcements topics drop the topic map and the actions row (scope: category).

{
  "forum": {
    "profile": {
      "avatarSize": 96,
      "summary": { "sections": ["topBadges", "topTopics", "topReplies", "stats"] },
      "itemMeta": ["likes", "replies"],
      "rail": ["solved"]
    },
    "topic": {
      "byCategory": {
        "announcements": { "map": { "show": "never" }, "actions": [] }
      }
    }
  }
}

A Q&A look, with Discourse-style profiles. look: "qa" patches the list and topic keys; the profile keys are untouched by any look and simply add on.

{
  "forum": {
    "look": "qa",
    "profile": {
      "statsStyle": "tiles",
      "summary": {
        "sections": ["stats", "topReplies", "topTopics", "mostLikedBy", "topCategories", "topBadges"]
      },
      "tabs": ["summary", "activity", "badges"]
    }
  }
}

Each slug in categoryOverrides and byCategory must exist in the space (see above), so adjust announcements and help to your own categories' slugs.

Searching the forum

The search box in the header and on the front page suggests topics as you type. All results under the suggestions opens /search, the full search page: ranked results, filters, and paging. /f/<org>/<space>?q=words opens it too.

The filters write ordinary operators, and you can type the same operators into the box yourself:

Operator

Matches

category:<slug> or #<slug>

Topics in that category

tag:<tag> / tags:a,b

Topics with that tag / with any of these tags

-tag:<tag>

Topics without that tag

@<username>

Topics started by that member

status:solved / unsolved / open / closed / archived / noreplies

By state. Closed and archived threads are searchable

in:title / in:pinned / in:tagged

Title-only, pinned topics, topics with any tag

in:bookmarks / in:watching / in:seen

Signed-in readers only: your bookmarks, topics you watch, topics you have read

before:YYYY-MM-DD / after:YYYY-MM-DD

By creation date

min_views: / max_views: / min_likes: / min_posts: / max_posts:

Bounds on the counts

order:latest / top / views / latest_topic

Sort; relevance otherwise

The API is GET /public/orgs/{orgId}/spaces/{spaceId}/forum/search/full?q=&offset=&limit= (limit up to 50, offset up to 1000), answering { hits, total, offset, minQueryLength }. Hidden categories never appear.

How the page looks is the theme's: theme.forum.chrome.searchPage.filters puts the filter panel beside the results (default), above them, nowhere, or folded in a closed "Advanced filters" disclosure (disclosure); and searchPage.avatar: "start" draws each result's starter as a 40px face beside the title, meta and excerpt instead of over them. Both are in "Theme a forum" → "Account, search and composer", with a mix-and-match example.

Moderation

The Community type has a dedicated Moderation tab. From the public thread, staff see a staff bar and can moderate in place:

  • Move a topic to another category (a category chip on the thread the moderator can change).

  • Reclassify a topic between Discussion and Question from the thread.

  • Pin topics (pinned topics are badged in the list). A global pin floats in every list; a category pin floats in its own category's list, and in every list too while the space's pinScope is everywhere (the default) — set pinScope: "category" on …/forum/settings to keep category pins in their category. A timed pin (pinnedUntil) stops floating when its time passes. A signed-in reader can unpin for me with POST /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/dismiss-pin: the pin stays for everyone else.

  • Feature a topic: PATCH …/forum/{topicId} {"featured": true} (moderators only); a front-page feed selects featured topics with filter.featured.

  • Delete a topic: DELETE /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}. It is a soft delete — POST …/forum/{topicId}/recover undoes it, and DELETE /orgs/{orgId}/moderation/topics/{id}/permanent destroys it afterwards. An author may delete their own topic until somebody replies; after that it takes a moderator. (DELETE …/blog/{id} is the blog's door and refuses a forum topic.)

  • Promote a thread to a documentation page — a promoted topic shows a "This is now documented — read the canonical page" banner linking to the docs page.

Old or migrated topic URLs are resolved through a permalink redirect, so links from a forum you imported keep working.

Tags

There is one tag rule, applied by every door — creating a topic, retagging it, the tag hub and every tag filter:

  • Tags are lowercased (unless community.force_lowercase_tags is off) and accents are folded (Crème → creme). Any script works: 日本語 is a tag.

  • +, # and . are kept inside a word — c++, c#, node.js, .net — and any other punctuation becomes -. A leading # is dropped (#help → help), and a tag made only of punctuation is not a tag.

  • A tag is stored at most 60 characters. A new tag longer than community.max_tag_length (default 30) is refused with a 422 naming the tag and the setting; a tag already on a topic in the space is grandfathered and keeps working.

  • When a tag is stored differently from how you sent it, the response says so on X-Field-Warnings.

Votes and reactions

Reactions are emoji on a post; 👍 and 👎 are votes.

  • Post votes — the space's postVotes setting on …/forum/settings: off, up (the default — 👍 only) or updown (👍 and 👎, scored as their difference). Set a vote by value with PUT /orgs/{orgId}/spaces/{spaceId}/forum/posts/{postId}/vote {"value": 1 | 0 | -1}, or from the reader with PUT /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/posts/{postId}/vote. A member holds at most one of the two; 0 clears it. -1 is a 422 unless postVotes is updown. Votes always need an account.

  • Reactions in this community — reactionEmojis on …/forum/settings gives this space its own palette (up to 24); null goes back to the organization's (POST /orgs/{orgId}/community/reactions). GET /orgs/{orgId}/community/reactions?spaceId= returns the set a space actually uses. 👍 is always in it. Dropping an emoji from the set keeps the reactions already given but stops drawing them.

  • Signed-out readers may react on a space with allowAnonymous (any reaction except 👍/👎, which are votes and need an account). Their reactions are counted, not named, and never move a score.

Custom emoji

An organization can upload its own emoji. Members then type :shortcode: in a post and the reader draws the picture, and the reaction picker and the composer's : autocomplete offer them. They belong to the organization, so they work in every space.

Uploading and removing needs org.manage_settings; listing needs space.read. An upload is a multipart request with a small image in file:

POST /orgs/{orgId}/custom-emoji        # multipart/form-data
  file=@party-parrot.png  shortcode=party_parrot  name="Party parrot"

A shortcode starts with a lower-case letter or digit and then uses lower-case letters, digits and underscores, up to 30 characters in all (it is lower-cased for you). name is a display label, up to 80 characters, defaulting to the shortcode. The file must be an image; anything else is a 400. Uploading a shortcode that already exists replaces its picture.

GET    /orgs/{orgId}/custom-emoji                 # { "emoji": [ ... ] }
DELETE /orgs/{orgId}/custom-emoji/{shortcode}     # { "ok": true }

The reader needs the shortcode-to-picture map without signing in, so GET /public/orgs/{orgId}/custom-emoji returns { "emoji": [ { "shortcode", "name", "imageUrl" } ] } and nothing else. Use it if you render forum text yourself.

A bare link on its own line in a post becomes a preview card: title, description, picture and the site's icon. For an external link the platform fetches the page's own Open Graph tags (private, loopback and metadata addresses are refused, and results are cached per organization). A link to one of your own public, uncategorised forum topics is answered from your database instead, so the card carries the real title and excerpt, and a private topic never leaks its title through it. The preview pictures come back already routed through the image proxy.

These endpoints are public and rate limited, because a signed-out reader sees the cards too.

Call

What it does

GET /public/orgs/{orgId}/onebox?url=

One link, as a full card: { "onebox": { url, title, description, imageUrl, ... } }.

GET /public/orgs/{orgId}/onebox/inline?url=

A mid-sentence link, as only its title: { "inline": { url, title } }.

POST /public/orgs/{orgId}/onebox/post

Every link in a post body at once: { "oneboxes": [ ... ] }.

The inline form is off by default and answers { "inline": null } until the organization turns on community.enable_inline_onebox_on_all_domains. The per-post form takes the post's document and cards at most community.max_oneboxes_per_post links; links past the cap stay bare and cause no outbound fetch.

POST /public/orgs/{orgId}/onebox/post
{ "content": { "type": "doc", "content": [ ... ] } }

Two places settings live, and which is which

A forum is configured in two places, and the difference is not cosmetic — it decides which URL you write to.

Organization settings are one value for the whole organization. They are read and written by key:

curl -sS -A 'my-app/1.0' -H "Authorization: Bearer $TOKEN" \
  https://forumulate.com/api/orgs/$ORG/settings/community.min_post_length

curl -sS -A 'my-app/1.0' -H "Authorization: Bearer $TOKEN" \
  -X PUT -H 'content-type: application/json' -d '{"value": 20}' \
  https://forumulate.com/api/orgs/$ORG/settings/community.min_post_length

GET /orgs/{orgId}/settings/{key} answers { setting } for one key. GET /orgs/{orgId}/settings lists every key with its current value, its default and what it does. If a key is not in that list, it does not exist — that listing is the whole catalogue, generated from the same registry the console renders.

Space settings are what one forum decided for itself. They have no key names: they are fields on the space's own door.

curl -sS -A 'my-app/1.0' -H "Authorization: Bearer $TOKEN" \
  -X PATCH -H 'content-type: application/json' \
  -d '{"whoCanPost": "anyone", "allowAnonymous": true}' \
  https://forumulate.com/api/orgs/$ORG/spaces/$SPACE/forum/settings

GET /orgs/{orgId}/spaces/{spaceId}/forum/settings reads them back, and it also publishes an effective block — the answer the public API actually gates on, after the space's choice, the organization default and the space's shape have been resolved against each other. Read effective when the stored value and the behaviour disagree; it names which one won.

The fields on that door are whoCanPost, allowAnonymous, moderateComments, moderateAnonymous, defaultSort, reactionsEnabled, reactionEmojis, postVotes and pinScope. A BLOG space has the first seven on …/blog/settings, plus defaultByline. Other per-space doors are …/roadmap-settings, …/comment-settings and …/reader-policy.

Every one of those fields also takes null, which unsets it: the space stops choosing and follows the organization default, and then ours. That is a third state, not a synonym for false — a stored whoCanPost outranks the organization default, so clearing it is the only way to put a space back under your organization's policy.

Who may post

community.who_can_post is the organization default: type (leave it to the space type), members, or anyone.

A single space overrides it with whoCanPost on PATCH /orgs/{orgId}/spaces/{spaceId}/forum/settings — not on …/roadmap-settings, which has no such field. The resolution order, most specific first, is:

  1. a shape override on the space (what the space's own shape says about who creates),

  2. the space's stored whoCanPost,

  3. the organization's community.who_can_post,

  4. the space type's own answer.

An organization that states nothing gets the type's answer, which is what every existing space already had.

A reader who posts without an account (where the space allows it) is a guest: the name they typed and an initials disc, never a picture — an open door that accepted an image URL would put anyone's tracking pixel on your page. The same guest name always draws the same colour. A client that sends Authorization: Bearer <token> to a reader door posts as that token's user, not as a guest; see API tokens.

The settings that matter most

Key

What it does

community.max_tags_per_topic

Maximum tags on a new topic (0 disables tags).

community.min_post_length

Shortest post the composer will accept.

community.default_notification_level

What watching a topic means for somebody who has not chosen.

search.min_search_term_length

Shortest free-text query that returns anything (default 3). A shorter one answers with nothing and reports the floor as minQueryLength. It is a search.* key, not a community.* one, because the same floor governs docs search, forum search and chat search.

Advanced settings cover spam and flagging thresholds:

  • community.flag_hide_threshold — how many flags auto-hide a post.

  • community.spam_flag_threshold — flag count that marks something as spam.

  • community.spam_ai_min / community.spam_ai_max — AI spam-scoring bounds (AI spam detection uses your own key; see the AI guide).

Seeding a forum with real authors

A new forum looks empty, and a migrated one must keep who said what and when. There are three routes; they combine.

1. Personas: accounts you post as. A persona is a service account that counts as a person — it appears in the member directory and on leaderboards, which a plain bot does not. It has no inbox and no password; its only credential is a token you mint.

POST /orgs/{orgId}/service-accounts
{"name": "Wren Halvorsen", "role": "MEMBER", "persona": true, "username": "wren"}

POST /orgs/{orgId}/service-accounts/{id}/tokens
{"name": "seeding", "scopes": ["read", "write"]}

Its @handle. username is optional: unset, the account gets a generated svc-… handle. Give a persona a real one at creation, or change it any time with PATCH /orgs/{orgId}/service-accounts/{id} {"username": "wren-h"} (name too, or both; the answer carries the updated account). The rule is every account's — 3–20 letters, digits, underscores and inner hyphens, lower-cased, unique across the platform (409 auth.username_taken otherwise) — but the once-per-window change limit (users.username_change_period_days) does not apply: that is for people choosing their own name, and a persona is the organization's. The persona can also rename itself with its own token, through PATCH /users/me {"username": "…"} (an alias of PATCH /users/me/username); the reader's /u/<username> follows at once.

With the persona's own token, give it a face and a bio — PUT /users/me/avatar (a multipart image) and PATCH /users/me {"bio": "…"} — then post as it through POST /orgs/{orgId}/spaces/{spaceId}/forum and …/forum/{topicId}/replies. New accounts are trust level 0, so first-day caps and approval holds apply: add the personas to a group with grantTrustLevel: 2 (and a flair or title if you like) via POST /orgs/{orgId}/groups and POST /orgs/{orgId}/groups/{groupId}/members {"userId": "…"}.

A group's flair pill can carry an icon: flairIcon is a glyph name (up to 40 characters — our glyphs, a Lucide name or a brand mark) or a picture, any https: image URL up to 2048 characters (an /api/assets/… upload works too). "" clears it. It is drawn before the label on posts, profiles and user cards.

PATCH /orgs/{orgId}/groups/{groupId}
{"flair": "Team", "flairIcon": "https://cdn.example.com/marks/triangle.svg", "flairBgColor": "#000000", "flairColor": "#ffffff"}

2. Import: a whole forum in one call. POST /orgs/{orgId}/import takes members[], a space's categories[], and topics whose posts carry authorId (or email), createdAt and a body as content or markdown. The reply says how each author was credited and lists every row it skipped:

{
  "summary": {
    "topicsCreated": 40,
    "postsCreated": 212,
    "authors": { "member": 3, "email": 2, "staged": 9, "name": 1 },
    "warnings": [{ "path": "spaces[0].topics[7].posts[2]", "message": "…" }],
  },
}

The call is synchronous: send 200 topics or fewer per call. The fields it carries are in Importing a forum.

3. Re-attribute what is already there. Posts made as guests or by the owner move to their real author with POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/change-owner {"postIds": ["…"], "newOwnerId": "…"} (moderators). The new owner must be a member of the organization; moving the opening post moves the topic, and post counts follow.

Backdating. createdAt (an ISO date with offset) on POST …/forum and …/replies stamps the topic or reply with that date, clamped to now. It is for owners and admins only — anyone else gets a 403 rather than a silently ignored date. A backdated topic does not notify followers or mentions; a backdated reply renumbers the thread so it stays chronological, which shifts later /t/{slug}/{n} links.

Throughput. The guest door allows 5 posts a minute per address, which is right for strangers and wrong for seeding — so seed through persona tokens (each on the authenticated 600-a-minute budget) or the import (one call), not the guest door.

What each author looks like. Every topic and post carries authorKind — member, persona, service, staged (an imported author who has not signed up yet), guest or anonymous — with authorAvatarUrl and a stable authorAvatarSeed. With no picture, the disc shows initials on a colour derived from the seed. An anonymous post never shows a picture or links to a profile.

Flagging: the types a member may raise

flagType on a flag is one of seven built-ins — illegal, spam, inappropriate, off_topic, other, notify_moderators, notify_user — or a custom type you defined. You never have to guess which: GET /orgs/{orgId}/moderation/flag-types/catalogue names every value the flag endpoints accept, each with a sentence, the surfaces it applies to and whether it is built in. ?surface=post|topic|chat narrows it to what that surface takes.

notify_user is author-facing and has no chat equivalent, so it is not offered on chat messages.

One thread's own look and share card

A moderator can give one thread its own CSS, partial theme, share image (it beats the generated card), og title/description, card type and JSON-LD — which replaces the automatic DiscussionForumPosting / QAPage markup — under customization on POST …/forum or PATCH …/forum/{topicId}. Keys merge; null clears. The replies render inside the thread's page, so the thread's customization covers them. A member may rename their own thread on that PATCH but not restyle it: customization needs forum.moderate, and is a 403 naming the key from anyone else. In the console it is Page look & sharing on the thread view.

The keys and their rules are in Theme your site → Per-page customization.

A topic's partial theme may carry the shared token keys (colours, type, widths) and the forum namespace, so one thread can set its own forum.post or forum.topic keys over the space's. Any other type's namespace (post, docs, events …) is refused with a 422 that names it, because no forum page would draw it. A key that was already stored before this rule is left alone.

Per-topic field

  • Kind (kind) — Discussion or Question. Shown as a column; a question can have an answer marked, a discussion cannot.

Forum behaviour

A forum's behaviour keys are the choices a Discourse admin makes in site settings: read-only mode, approvals, archiving, trust gates, signatures and so on. Each key is resolved space, then organization, then the default, and every default is how forums already behaved, so a forum that sets nothing behaves exactly as it did.

  • This forum: in the studio, Forum behaviour. Each row says which layer is winning, and Follow the organization clears the space's choice. Through the API: GET / PATCH /orgs/{orgId}/spaces/{spaceId}/forum/behaviour. GET answers { space, org, effective } (what the space chose, what the organization stated, what is in force). PATCH takes any keys below, and null unsets one. Writing needs forum.moderate.

  • Every forum in the organization: the key's community.* setting, with PUT /orgs/{orgId}/settings/{key} (see two places settings live). Keys marked org have no space override; a space that sends one gets a 422.

curl -sS -A 'my-app/1.0' -H "Authorization: Bearer $FORUMULATE_TOKEN" \
  -X PATCH -H 'content-type: application/json' \
  -d '{"readOnly": true, "autoCloseSolvedHours": 48, "archiveInactiveAfter": null}' \
  https://forumulate.com/api/orgs/$ORG/spaces/$SPACE/forum/behaviour

Posting and access

Key (organization setting)

Default

What it does

readOnly (community.forum_read_only)

false

Only staff can start topics, reply, react or vote; everyone else reads. For migrations and incidents

bootstrapMembers (community.forum_bootstrap_members), org

0

While the community has fewer members than this, new members start at trust level 1, so a young forum is not throttled by new-member limits. 0 is off

notifyOnApproval (community.forum_notify_on_approval)

true

Tell the author when a moderator approves or rejects their held topic or reply

tagCreateMinTrust (community.forum_min_trust_to_create_tags)

0

Below this trust level a member may only use existing tags

embedMediaMinTrust (community.forum_min_trust_to_embed_media)

0

Posts with images or embeds from members below this level are held for review

emailInMinTrust (community.forum_min_trust_for_email_in)

0

Mail to the forum's address from members below this level is refused

minComposeSeconds (community.forum_min_compose_seconds)

0

A trust-level-0 post written faster than this is held for review (a spam-bot tell)

mentionSpamAction (community.forum_mention_spam_action)

block

A post mentioning too many people is blocked, or queued for review so a real announcement is not lost

broadcastMentions (community.forum_broadcast_mentions)

staff

Who may use @here (people watching or in the topic) and @all (every member who can see its category): off, staff, trusted (staff and trust level 3+), members

broadcastMentionMax (community.forum_broadcast_mention_max)

100

When @here / @all would reach more people than this, nobody is notified and the poster is told why

pmMinTrust (community.forum_min_trust_to_message), org

0

Below this trust level a member may answer a private message but not start one. Staff always may

Topics over time

Key

Default

What it does

autoCloseSolvedHours (community.forum_auto_close_solved_hours)

0

Close a question this many hours after an answer is accepted. 0 keeps it open

archiveInactiveAfter (community.forum_archive_inactive_after)

off

Archive a topic nobody has posted in for 1h, 24h, 3d or 1w (Discord-style)

voteLimit (community.forum_vote_limit)

0

How many open topics one member may vote for at once; a vote frees up when its topic closes. 0 is unlimited

assignReminderDays (community.forum_assign_reminder_days)

0

Remind the assignee of an open assigned topic that has not moved in this many days

assignGroupPick (community.forum_assign_group_pick)

off

A topic assigned to a group stays with the group (off), goes to the next available member in turn (roundRobin), or to the available member with the fewest open assignments (leastBusy)

defaultReaction (community.forum_default_reaction)

empty

An emoji (or :custom:) placed on each new topic for its author

How members appear

Key

Default

What it does

nameDisplay (community.forum_name_display)

name

Lead with the full name or the username wherever the forum names a member

postNotices (community.forum_post_notices)

off

Mark a member's first post, and a post from someone back after a long absence, for staff or everyone

returningAfterDays

180

How long away counts as "returning" (7–3650)

signatures (community.forum_signatures)

off

on shows members' signatures under their posts

signatureMaxLength / signatureMinTrust

200 / 1

The longest signature, and the trust level whose signatures are shown (keeps link spam out)

cakeday (community.forum_cakeday)

false

A cake beside a name on the member's join anniversary (and birthday, when they set one)

rankTitles (community.forum_rank_titles)

empty

Comma-separated titles for trust levels 0–4 ("Newcomer, Member, Regular, Leader, Elder"), shown beside names

newMemberTips (community.forum_new_member_tips)

false

A dismissible tips band for signed-in members

indexProfiles (community.forum_index_profiles)

false

Let search engines index a member profile with at least one public post (with ProfilePage structured data). Profiles are noindex otherwise

bbcode (community.forum_bbcode)

false

Read [b], [i], [u], [s], [quote], [url], [img], [code] and [list] typed into a post, for members arriving from phpBB, vBulletin or SMF

awayWho / awayShow, org

staff / everyone

Who may mark themselves away (staff, members), and who sees "Away until …" (everyone, members, staff, off)

awayRouting

skip

Away members are skipped by assignment and expert suggestions (skip), or away periods are ignored for routing

Moderation: the penalty ladder (all org)

Key

Default

What it does

penaltyWindowDays

90

How far back strikes are counted

penaltyCountsFlags

true

A flag a moderator upheld counts as a strike beside official warnings

penaltySilenceAfter / penaltySilenceDays

0 / 3

Silence a member automatically at this many strikes, for this long. 0 turns the step off

penaltySuspendAfter / penaltySuspendDays

0 / 7

Suspend at this many strikes, for this long. Set it above the silence step to escalate

Languages, paid categories, federation, rooms, help desk, AI

Key

Default

What it does

localeUnscopedCategories

show

Under a language address (/es/), also list categories that belong to no language (show), or only that language's own (hide: a separate subcommunity)

localeCategoriesAtRoot

all

At the address with no language, list every category (all) or only the forum's own language and unscoped ones (original)

paidGate

join

What a non-member sees at a paid category: a page naming the plans with a Join button (join), or the usual not-found (hide)

paidPastDueAccess

true

A member keeps reading while Stripe retries a failed renewal

federation / federationReplies

false / hold

The forum on the fediverse. See ActivityPub federation

liveRooms

false

Voice, video and stage rooms. See Live rooms

escalationOnSolved

nothing

When a ticket escalated to Zendesk or Salesforce is solved there: nothing, a staff note in the topic, or close (the note and the topic closed)

aiBot, aiComposer, aiToxicity, aiGist, spamServiceAction…

off

See AI and spam services

Each key's organization setting is the setting name shown in brackets; the ones not named follow the pattern community.forum_<snake_case> (for example community.forum_locale_unscoped_categories). GET /orgs/{orgId}/settings lists them all with their defaults.

Per category. A category adds its own behaviour on PATCH …/forum/categories/{categoryId}:

Field

Default

What it does

requireTopicApproval, requireReplyApproval

false

Every new topic or reply here waits for a moderator

votingEnabled

null (as the space)

Topic votes in this category

searchPriority

null (normal)

very_low … very_high: weight in forum search ranking

postGuidelines

null

Words shown above the composer when posting here (up to 2000 characters)

expertUserIds

[]

Up to 20 members suggested first as experts, skipping anyone away

defaultListFilter

null (all)

none lists only topics filed on this category; all includes subcategories'

locale

null

A language tag (es, pt-BR): the category belongs to that language's subcommunity. A subcategory with none follows its parent

POST …/forum/categories/{categoryId}/clone copies a category's settings into a new one. Tags take an emoji drawn before the label (PUT …/blog/tags/{slug}), and POST …/forum/tag-tools/rename and …/tag-tools/delete-unused rename or merge a tag and clear unused ones. All are in the studio's Categories and tags sheet.

Badges

A member earns badges for what they do, across the whole organization (badges are the organization's, not one community's). Two kinds:

  • Built-in badges (54 of them) are earned automatically. Most key on one running count — posts, topics, likes received, likes given, accepted answers, trust level, the most likes on one post or one topic, a consecutive-day visit streak — and are granted the moment that count reaches the badge's threshold (bronze, silver and gold tiers spaced so the gold ones stay rare: First Post, Contributor, Centurion…). Four are one-off events: a first edit of one's own post, a first flag, a first outbound link, and the one-year anniversary.

  • Your own badges, created with POST /orgs/{org}/community/reputation/badges:

Field

Type

What it is

name

string, 1–80

Required

slug

string, ≤ 60

Unset: made from the name

description

string, ≤ 300

What it is for

icon

string

A glyph name from the icon set (up to 40 characters, no spaces) or a short emoji; or a picture: an https: image address or one of your uploads (/api/assets/…), up to 2048 characters. Unset: medal

tier

bronze, silver, gold

Unset: bronze

grouping

string, ≤ 60

The heading it is listed under

counter + threshold

postsCreated, topicsCreated, likesReceived, likesGiven, solutions; 1–1,000,000

Granted automatically when the count reaches the threshold. Leave both unset for a badge you grant by hand

allowTitle

boolean

The member may wear it as their title. Unset: yes

enabled

boolean

On POST …/badges/{badgeId} (the update): false retires it from the catalogue

Grant and revoke one by hand with POST …/reputation/{userId}/badges ({slug}) and DELETE …/reputation/{userId}/badges/{slug}. A built-in badge may be earned more than once where it says so ("×3" on the profile); your own badges are earned once.

Where they show. GET /public/orgs/{org}/spaces/{space}/forum/badges is the catalogue (slug, name, description, icon, group, custom). A member's profile lists theirs under the badges tab (theme.forum.profile.tabs — icon, what it is for, when it was earned) and leads with up to six they chose themselves (PUT …/reputation/me/featured). A badge picture on somebody else's host is fetched by us and served from your own address, like every other picture on a reader page — a reader's browser never asks that host for it.

The leaderboard is separate from badges: it ranks people by activity in one community (week, month, all) or by the organization's points (points), on /leaderboard and in the spaceLeaderboard block, whose guide lists every period and field.

Members' own preferences

A signed-in member's /preferences page gains forum rows, stored per member per organization (forumPrefs on PATCH /orgs/{orgId}/notifications/preferences; null removes a key, absent is today's behaviour):

Key

Values

What it does

likesNotify

always, first, never

Likes on my posts: every time (today), the first per post, or never

hidePresence

boolean

Leave me out of "online now" and show no "last seen"

messageAllowList

up to 50 member ids

People who may start a message with me even when I take messages from nobody

autoTrackMinutes

0–60

Track a topic I have read this long (0: never)

textSize

smaller, normal, larger, largest

The forum's reading size for me

externalLinksNewTab

boolean

Open other sites in a new tab

homeView

latest, top, hot, new, unread, categories

What the front page opens on when the address names no view

signature

up to 1000 characters

Shown when the forum has signatures on and my trust level reaches signatureMinTrust

birthday, hideCakeday

MM-DD / boolean

The cake on my birthday, or none at all

hideSignatures

boolean

Hide other members' signatures

sidebarSection

{title, items} (≤20 categories, tags or links)

My own section in the forum sidebar

Who may message whom. Two rules combine. The organization's pmMinTrust decides who may start a conversation (answering one is always allowed). A member who takes messages from nobody (messagesFrom: "nobody") can still name people on their messageAllowList, and those people get through.

Members can also mark themselves away (/orgs/{orgId}/me/away, on their account page) with a note and an end date; staff see the team's availability in the console.

Moderation tools

Beyond the staff bar:

  • Message a member, or warn them. From the review queue, Message user writes to one member, prefilled with the post or flag it is about (POST /orgs/{orgId}/moderation/messages). Marked as an official warning it counts as a strike and runs the penalty ladder above. GET /orgs/{orgId}/moderation/warnings and …/moderation/strikes/{userId} show a member's record.

  • Lock a post against edits (POST …/forum/posts/{postId}/lock); only staff can edit it then.

  • Hide a revision from the public edit history (POST …/forum/posts/{postId}/revisions/{revision}/visibility).

  • Change a topic's date (POST …/forum/{topicId}/timestamp); its replies move with it, never into the future.

  • Topic to message and back. POST …/forum/{topicId}/convert-to-message turns a topic into a private conversation between its author, you and the members you name; the public address answers 404 from then on. POST /orgs/{orgId}/messages/{conversationId}/convert-to-topic publishes a conversation as a topic.

  • Invite members to a topic (POST …/forum/{topicId}/invite): each gets a notification.

  • Held posts tell their author when they are approved or rejected (notifyOnApproval).

A forum can sell membership: buyers of a plan read the categories (or the whole forum) the plan gates. Payment goes through your organization's own Stripe account, the one event tickets and courses use; see Payments and shop. Access is a group: every plan owns a closed group, and a gate is an ordinary category permission for that group, so search, feeds, sitemaps and notifications honour it with nothing extra.

  • Plans belong to the organization: POST /orgs/{orgId}/forum/plans with name, description, priceCents (50 or more), currency, interval (month, year, or once for a lifetime pass), perks (up to 12 lines on the join page) and active. A price change applies to new members; running subscriptions keep their terms.

  • Gates: PUT /orgs/{orgId}/spaces/{spaceId}/forum/paywall/space (the whole forum) or …/paywall/categories/{categoryId}, each { "planIds": [...] }. GET …/forum/paywall shows every category, whether it is gated directly or through the whole-forum gate, and uncategorisedTopics: topics with no category cannot be gated, so file them.

  • Readers see a join page at /membership and, at a gated category, the plans that open it (or a plain not-found under paidGate: "hide"). Members manage, cancel and resume their membership from the same page.

  • Subscribers are listed with GET /orgs/{orgId}/forum/memberships; staff can cancel one.

In the studio: Paid membership. The behaviour keys paidGate and paidPastDueAccess are above.

Live rooms

Staff can schedule voice, video and stage rooms in a category or for an event, and members join them in the browser at /rooms. Rooms need the liveRooms behaviour key on and a media relay: a TURN server or a LiveKit media server, either Forumulate's or one you configure in the studio's Live rooms sheet. Without either, rooms stay hidden from readers. See Live rooms.

Integrations

  • Zapier and Make. Zaps and scenarios connect with a personal access token. Triggers are new topic, new reply and solved topic, either polled (GET …/automation/triggers/{trigger}) or instant through REST hooks (POST/DELETE …/automation/hooks); actions create a topic or a reply. Console: Integrations → Zapier and Make. See Zapier, Terraform, React and WordPress.

  • Telegram. Install Telegram under Integrations with your own bot token (from @BotFather) and a chat id: new topics, replies and solved questions are posted to the chat, group or channel (and an optional thread).

  • Zendesk and Salesforce. Connect your own help desk under Integrations → Help-desk escalation; staff then turn a topic into a ticket from the topic's tools, and the ticket's status comes back to the topic (escalationOnSolved decides what happens when it is solved).

  • Embeds. The studio's Embedding section gives a snippet for a topic list on your own site and for comments under your articles, each with an order, category, count and light/dark theme. See Embeds.

AI and spam services

All of these use your provider and key; nothing runs until you connect one.

Key

Default

What it does

aiBot

false

A labelled assistant answers topics nobody has answered, from your docs and earlier topics. Staff can switch it off for one topic

aiBotName

Forum assistant

The name it posts under (its posts always carry an AI label)

aiBotTopics

questions

questions, or all unanswered topics

aiBotCategories

empty (every category)

Comma-separated category slugs it answers in

aiBotAfterMinutes

60

How long a topic waits for a person first (0: at once)

aiBotDailyLimit, org

50

Most assistant replies a day across the organization

aiComposer / aiComposerDailyLimit

false / 20

Proofread, rewrite, and suggested title, tags and category in the composer; uses per member per day

aiToxicity / aiToxicityThreshold

off / 80

Score new posts for insults and hate: flag sends one over the threshold to the review queue, hold also hides it

aiGist

false

A one-line summary of each topic, shown in lists whose list.excerptSource asks for it (Theme a forum)

spamServiceAction

hold

When the spam service says spam: hold hides the post until reviewed, flag leaves it up and flags it

spamServiceMaxTrust

1

Posts from members up to this trust level are checked. Staff never are

The console's Analytics page shows AI usage by feature.

Importing another forum

The studio's Import a forum sheet (under housekeeping) moves a forum here from Discourse, phpBB, vBulletin, Flarum or Discord: upload the export, run a dry run to see what would be created, then import. Re-running is safe (rows already imported are skipped), old addresses become permalinks, and authors who have not signed up yet arrive as staged members who can claim their posts later. The API is /orgs/{orgId}/forum-imports. See Importers.

Backups and the age gate

Backups. Console Settings → Backups takes a full copy of the organization (every space, page, topic and post, and the member roster) on demand or on a schedule, and keeps the newest few:

Setting

Default

What it does

backups.schedule

off

daily, weekly (Mondays) or monthly (the 1st)

backups.hour

3

The hour, UTC

backups.keep

7

How many completed copies are kept (1–30), manual ones included

A copy downloads as forumulate-backup-<org>-<date>.json.gz; it is the same document as the organization export. Restore (owners only, typing the organization's address to confirm) brings back everything in the copy that is missing now, matched by slug; it does not delete what was created since. Routes: GET/POST /orgs/{orgId}/backups, …/{backupId}/download, DELETE …/{backupId}, POST …/{backupId}/restore.

Age gate. users.minimum_age (default 0, off; up to 21) asks readers who sign up with a password for their date of birth and refuses anyone younger. Only the fact that they met the minimum is stored, never the date. users.age_gate_message is what a younger reader is told. Existing members are unaffected.

Where it lives in the studio

Open the forum in the studio. Topics and Shared drafts sit with the pages; the settings fold holds Categories and tags, Languages, Form templates, Paid membership, Forum behaviour, Discussion, Embedding, Fediverse, Live rooms and Email in; housekeeping holds Permalinks, Import a forum, Moderation and Flag types. The reader's look is the studio's theme panel; see Theme a forum.

What you need to set up

Everything above works without any account of your own, except:

Feature

What you need

Where it goes

Until then

Paid membership

Your Stripe account connected

Console Settings → Payments (Payments and shop)

Plans can be made and gated; readers see the plans without a Join button

AI assistant, composer help, toxicity, gists, Summarize

An AI provider and key

Your organization's AI provider (PUT /orgs/{orgId}/ai/provider, see AI and search)

The keys can be on, but nothing runs; the Summarize button is not drawn

Spam service

An Akismet key, or your own compatible service

Console Settings → External spam service (with a Test button)

Posts are not sent anywhere; the built-in spam checks still apply

Telegram

A bot from @BotFather, added to the chat

Console Integrations → Telegram

Nothing is posted

Zendesk / Salesforce

Your help-desk credentials, plus its status webhook pointed at the address the panel shows

Console Integrations → Help-desk escalation

No Escalate button on topics

Zapier / Make

A personal access token in the Zap or scenario

Your Zapier or Make account

Nothing is triggered

Translations of topics

Your own DeepL key

Console Settings → DeepL

Translate is not drawn unless topic.translate: "always"

Live rooms

A TURN server or LiveKit media server: Forumulate's, or your own in the Live rooms sheet

Studio Live rooms

Rooms are hidden from readers

In the API

Every operation below is also reachable from the other surfaces without a dedicated command. forumulate api <Operation> calls it from the CLI, the JavaScript SDK has a typed method for each one (the last column names it; the Python and Go clients are generated from the same spec), and an agent reaches the organization-scoped ones through the MCP call_api tool. Where a CLI command or MCP tool exists too, the last column names it. Operation names link to the API reference.

Ai Provider

Operation

Request

What it does

Shortcuts

AiProvider_status

GET /orgs/{orgId}/ai/provider

Get the provider in an organization (AI)

client.ai.provider.status()

AiProvider_connect

PUT /orgs/{orgId}/ai/provider

Replace the provider in an organization (AI)

client.ai.provider.connect()

AiProvider_disconnect

DELETE /orgs/{orgId}/ai/provider

Delete the provider in an organization (AI)

client.ai.provider.disconnect()

AiProvider_test

POST /orgs/{orgId}/ai/provider/test

Test the provider (AI)

client.ai.provider.test()

Avatar

Operation

Request

What it does

Shortcuts

Avatar_upload

PUT /users/me/avatar

Upload your avatar

client.users.avatar.upload()

Avatar_clear

DELETE /users/me/avatar

Remove your avatar

client.users.avatar.clear()

Avatar_gravatar

POST /users/me/avatar/gravatar

Use your Gravatar as your avatar

client.users.avatar.gravatar()

Avatar_serve

GET /users/{userId}/avatar/{blobId}

Get the avatar

client.users.avatar.serve()

Away

Operation

Request

What it does

Shortcuts

Away_mine

GET /orgs/{orgId}/me/away

Get the away in an organization (me)

client.away.mine()

Away_addMine

POST /orgs/{orgId}/me/away

Create the away in an organization (me)

client.away.addMine()

Away_editMine

PATCH /orgs/{orgId}/me/away/{id}

Update the away (me)

client.away.editMine()

Away_removeMine

DELETE /orgs/{orgId}/me/away/{id}

Delete the away (me)

client.away.removeMine()

Away_team

GET /orgs/{orgId}/away

Get the away in an organization

client.away.team()

Away_addFor

POST /orgs/{orgId}/away

Create the away in an organization

client.away.addFor()

Away_now

GET /orgs/{orgId}/away/now

Get the now in an organization

client.away.now()

Away_editFor

PATCH /orgs/{orgId}/away/{id}

Update the away

client.away.editFor()

Away_removeFor

DELETE /orgs/{orgId}/away/{id}

Delete the away

client.away.removeFor()

Canned Reply

Operation

Request

What it does

Shortcuts

CannedReply_list

GET /orgs/{orgId}/community/canned-replies

List canned replies in an organization

client.community.cannedReplies.list()

CannedReply_create

POST /orgs/{orgId}/community/canned-replies

Create a canned reply in an organization

client.community.cannedReplies.create()

CannedReply_update

PATCH /orgs/{orgId}/community/canned-replies/{id}

Update the canned reply

client.community.cannedReplies.update()

CannedReply_remove

DELETE /orgs/{orgId}/community/canned-replies/{id}

Delete the canned reply

client.community.cannedReplies.remove()

CannedReply_use

POST /orgs/{orgId}/community/canned-replies/{id}/use

Create the use in an organization

client.community.cannedReplies.use()

Chat

Operation

Request

What it does

Shortcuts

Chat_channels

GET /orgs/{orgId}/chat/channels

List channels in an organization

client.chat.channels()

Chat_createChannel

POST /orgs/{orgId}/chat/channels

Create a channel in an organization

client.chat.createChannel()

Chat_search

GET /orgs/{orgId}/chat/search

Get the search in an organization (chat)

client.chat.search()

Chat_archive

POST /orgs/{orgId}/chat/channels/{channelId}/archive

Archive the channel

client.chat.archive()

Chat_close

POST /orgs/{orgId}/chat/channels/{channelId}/close

Close the channel

client.chat.close()

Chat_archiveToTopic

POST /orgs/{orgId}/chat/channels/{channelId}/archive-to-topic

Archive to topic in an organization

client.chat.archiveToTopic()

Chat_setNotification

PATCH /orgs/{orgId}/chat/channels/{channelId}/notifications

Update notifications in an organization

client.chat.setNotification()

Chat_join

POST /orgs/{orgId}/chat/channels/{channelId}/join

Join the channel

client.chat.join()

Chat_addMember

POST /orgs/{orgId}/chat/channels/{channelId}/members

Create a member in an organization (chat channels)

client.chat.addMember()

Chat_messages

GET /orgs/{orgId}/chat/channels/{channelId}/messages

List messages in an organization (chat channels)

client.chat.messages()

Chat_send

POST /orgs/{orgId}/chat/channels/{channelId}/messages

Create a message in an organization (chat channels)

client.chat.send()

Chat_updateSettings

PATCH /orgs/{orgId}/chat/channels/{channelId}/settings

Update settings in an organization

client.chat.updateSettings()

Chat_listIncomingWebhooks

GET /orgs/{orgId}/chat/channels/{channelId}/incoming-webhooks

List incoming webhooks in an organization

client.chat.listIncomingWebhooks()

Chat_createIncomingWebhook

POST /orgs/{orgId}/chat/channels/{channelId}/incoming-webhooks

Create an incoming webhook in an organization

client.chat.createIncomingWebhook()

Chat_revokeIncomingWebhook

DELETE /orgs/{orgId}/chat/incoming-webhooks/{webhookId}

Delete the incoming webhook

client.chat.revokeIncomingWebhook()

Chat_receipts

GET /orgs/{orgId}/chat/channels/{channelId}/receipts

List receipts in an organization

client.chat.receipts()

Chat_pins

GET /orgs/{orgId}/chat/channels/{channelId}/pins

List pins in an organization

client.chat.pins()

Chat_pin

POST /orgs/{orgId}/chat/channels/{channelId}/messages/{messageId}/pin

Pin the message

client.chat.pin()

Chat_read

POST /orgs/{orgId}/chat/channels/{channelId}/read

Create the read in an organization (chat channels)

client.chat.read()

Chat_getDraft

GET /orgs/{orgId}/chat/channels/{channelId}/draft

List draft channels in an organization

client.chat.getDraft()

Chat_putDraft

PUT /orgs/{orgId}/chat/channels/{channelId}/draft

List draft channels in an organization (replace)

client.chat.putDraft()

Chat_deleteDraft

DELETE /orgs/{orgId}/chat/channels/{channelId}/draft

List draft channels in an organization (delete)

client.chat.deleteDraft()

Chat_heartbeat

POST /orgs/{orgId}/chat/channels/{channelId}/heartbeat

Create the heartbeat in an organization (chat channels)

client.chat.heartbeat()

Chat_online

GET /orgs/{orgId}/chat/presence/online

Get the online in an organization

client.chat.online()

Chat_stream

GET /orgs/{orgId}/chat/channels/{channelId}/stream

Get the stream in an organization (chat channels)

client.chat.stream()

Chat Incoming Webhook

Operation

Request

What it does

Shortcuts

ChatIncomingWebhook_post

POST /chat/incoming/{webhookId}

Create the incoming

client.chat.incomingWebhook.post()

Chat Message

Operation

Request

What it does

Shortcuts

ChatMessage_thread

GET /orgs/{orgId}/chat/messages/{messageId}/thread

Get the thread in an organization

client.chat.message.thread()

ChatMessage_edit

PATCH /orgs/{orgId}/chat/messages/{messageId}

Update the message

client.chat.message.edit()

ChatMessage_remove

DELETE /orgs/{orgId}/chat/messages/{messageId}

Delete the message (chat)

client.chat.message.remove()

ChatMessage_react

POST /orgs/{orgId}/chat/messages/{messageId}/react

Create the react in an organization

client.chat.message.react()

ChatMessage_dm

POST /orgs/{orgId}/chat/dm

Open a direct message

client.chat.message.dm()

ChatMessage_groupDm

POST /orgs/{orgId}/chat/dm/group

Open a group direct message

client.chat.message.groupDm()

ChatMessage_messageLink

GET /orgs/{orgId}/chat/messages/{messageId}/link

Get the link in an organization

client.chat.message.messageLink()

ChatMessage_quoteToTopic

POST /orgs/{orgId}/chat/messages/{messageId}/quote-to-topic

Create the quote to topic in an organization

client.chat.message.quoteToTopic()

ChatMessage_flag

POST /orgs/{orgId}/chat/messages/{messageId}/flag

Flag the message

client.chat.message.flag()

ChatMessage_bookmark

POST /orgs/{orgId}/chat/messages/{messageId}/bookmark

Create the bookmark in an organization

client.chat.message.bookmark()

ChatMessage_removeBookmark

DELETE /orgs/{orgId}/chat/messages/{messageId}/bookmark

Delete the bookmark in an organization

client.chat.message.removeBookmark()

ChatMessage_bookmarkReminder

PATCH /orgs/{orgId}/chat/messages/{messageId}/bookmark/reminder

Update the reminder in an organization

client.chat.message.bookmarkReminder()

ChatMessage_listBookmarks

GET /orgs/{orgId}/chat/bookmarks

List bookmarks in an organization (chat)

client.chat.message.listBookmarks()

ChatMessage_move

POST /orgs/{orgId}/chat/messages/move

Move the message

client.chat.message.move()

Community

Operation

Request

What it does

Shortcuts

Community_analyticsSummary

GET /orgs/{orgId}/community/analytics

List analytics in an organization

client.community.analyticsSummary()

Community_reactions

GET /orgs/{orgId}/community/reactions

List reactions in an organization

client.community.reactions()

Community_setReactions

POST /orgs/{orgId}/community/reactions

Create a reaction in an organization

client.community.setReactions()

Community_listCustomReactions

GET /orgs/{orgId}/community/reactions/custom

Get the custom in an organization

client.community.listCustomReactions()

Community_uploadCustomReaction

POST /orgs/{orgId}/community/reactions/custom

Create the custom in an organization

client.community.uploadCustomReaction()

Community_deleteCustomReaction

DELETE /orgs/{orgId}/community/reactions/custom/{slug}

Delete the custom

client.community.deleteCustomReaction()

Community_tagFeed

GET /orgs/{orgId}/community/tags/{tag}

Get the tag (community)

client.community.tagFeed()

Community_search

GET /orgs/{orgId}/community/search

Get the search in an organization (community)

client.community.search()

Community_bookmarks

GET /orgs/{orgId}/community/bookmarks

List bookmarks in an organization (community)

client.community.bookmarks()

Composer Draft

Operation

Request

What it does

Shortcuts

ComposerDraft_list

GET /orgs/{orgId}/drafts

List drafts in an organization

client.community.drafts.list()

ComposerDraft_get

GET /orgs/{orgId}/drafts/{draftKey}

Get the draft

client.community.drafts.get()

ComposerDraft_save

PUT /orgs/{orgId}/drafts/{draftKey}

Replace the draft

client.community.drafts.save()

ComposerDraft_remove

DELETE /orgs/{orgId}/drafts/{draftKey}

Delete the draft

client.community.drafts.remove()

Custom Emoji

Operation

Request

What it does

Shortcuts

CustomEmoji_list

GET /orgs/{orgId}/custom-emoji

Get the custom emoji in an organization

client.community.customEmoji.list()

CustomEmoji_upload

POST /orgs/{orgId}/custom-emoji

Create the custom emoji in an organization

client.community.customEmoji.upload()

CustomEmoji_remove

DELETE /orgs/{orgId}/custom-emoji/{shortcode}

Delete the custom emoji

client.community.customEmoji.remove()

Custom Flag Type

Operation

Request

What it does

Shortcuts

CustomFlagType_list

GET /orgs/{orgId}/moderation/flag-types

List flag types in an organization

client.moderation.flagTypes.list()

CustomFlagType_add

POST /orgs/{orgId}/moderation/flag-types

Create a flag type in an organization

client.moderation.flagTypes.add()

CustomFlagType_catalogue

GET /orgs/{orgId}/moderation/flag-types/catalogue

Get the catalogue in an organization

client.moderation.flagTypes.catalogue()

CustomFlagType_update

PATCH /orgs/{orgId}/moderation/flag-types/{id}

Update the flag type

client.moderation.flagTypes.update()

CustomFlagType_remove

DELETE /orgs/{orgId}/moderation/flag-types/{id}

Delete the flag type

client.moderation.flagTypes.remove()

Extras

Operation

Request

What it does

Shortcuts

Extras_listSaved

GET /orgs/{orgId}/community/saved-searches

List saved searches in an organization

client.community.extras.listSaved()

Extras_save

POST /orgs/{orgId}/community/saved-searches

Create a saved search in an organization

client.community.extras.save()

Extras_setSavedNotify

POST /orgs/{orgId}/community/saved-searches/{id}/notify

Create the notify in an organization

client.community.extras.setSavedNotify()

Extras_removeSaved

DELETE /orgs/{orgId}/community/saved-searches/{id}

Delete the saved search

client.community.extras.removeSaved()

Extras_cakeday

GET /orgs/{orgId}/community/cakeday

Get the cakeday in an organization

client.community.extras.cakeday()

Extras_listNotes

GET /orgs/{orgId}/community/members/{userId}/notes

List notes in an organization

client.community.extras.listNotes()

Extras_addNote

POST /orgs/{orgId}/community/members/{userId}/notes

Create a note in an organization

client.community.extras.addNote()

Extras_removeNote

DELETE /orgs/{orgId}/community/notes/{id}

Delete the note (community)

client.community.extras.removeNote()

Extras_ackStatus

GET /orgs/{orgId}/community/topics/{topicId}/ack-status

Get the ack status in an organization

client.community.extras.ackStatus()

Extras_acknowledge

POST /orgs/{orgId}/community/topics/{topicId}/acknowledge

Create the acknowledge in an organization

client.community.extras.acknowledge()

Extras_setPolicy

POST /orgs/{orgId}/community/topics/{topicId}/policy

Create the policy in an organization

client.community.extras.setPolicy()

Extras_assign

POST /orgs/{orgId}/community/topics/{topicId}/assign

Assign the topic

client.community.extras.assign()

Extras_setEvent

POST /orgs/{orgId}/community/topics/{topicId}/event

Create the event in an organization

client.community.extras.setEvent()

Extras_events

GET /orgs/{orgId}/community/spaces/{spaceId}/events

List events in a space (community)

client.community.extras.events()

Extras_rsvpState

GET /orgs/{orgId}/community/topics/{topicId}/rsvp

Get the rsvp in an organization

client.community.extras.rsvpState()

Extras_rsvp

POST /orgs/{orgId}/community/topics/{topicId}/rsvp

Create the rsvp in an organization

client.community.extras.rsvp()

Extras_preview

GET /orgs/{orgId}/community/topics/{topicId}/preview

Preview the topic

client.community.extras.preview()

Extras_yearlyReview

GET /orgs/{orgId}/community/me/yearly-review

Get the yearly review in an organization

client.community.extras.yearlyReview()

Forum

Operation

Request

What it does

Shortcuts

Forum_list

GET /orgs/{orgId}/spaces/{spaceId}/forum

Get the forum in a space

forumulate forum list<br>client.forum.list()<br>client.forum.listTopics()

Forum_spaceLevel

GET /orgs/{orgId}/spaces/{spaceId}/forum/notifications

List notifications in a space

forumulate forum notify space<br>client.forum.spaceLevel()

Forum_setSpaceLevel

POST /orgs/{orgId}/spaces/{spaceId}/forum/notifications

Create a notification in a space

forumulate forum notify set<br>client.forum.setSpaceLevel()

Forum_markRead

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/read

Create the read in a space

forumulate forum read mark<br>client.forum.markRead()

Forum_readTime

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/read-time

Create the read time in a space

forumulate forum read time<br>client.forum.readTime()

Forum_setTopicLevel

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/notifications

Create a notification in a space (for a topic)

forumulate forum notify topic<br>client.forum.setTopicLevel()

Forum_tagSubscriptions

GET /orgs/{orgId}/spaces/{spaceId}/forum/tag-subscriptions

List tag subscriptions in a space

forumulate forum subscriptions tags<br>client.forum.tagSubscriptions()

Forum_setTagSubscription

POST /orgs/{orgId}/spaces/{spaceId}/forum/tag-subscriptions

Create a tag subscription in a space

forumulate forum subscriptions tag<br>client.forum.setTagSubscription()

Forum_categorySubscriptions

GET /orgs/{orgId}/spaces/{spaceId}/forum/category-subscriptions

List category subscriptions in a space

forumulate forum subscriptions categories<br>client.forum.categorySubscriptions()

Forum_setCategorySubscription

POST /orgs/{orgId}/spaces/{spaceId}/forum/category-subscriptions

Create a category subscription in a space

forumulate forum subscriptions category<br>client.forum.setCategorySubscription()

Forum_tags

GET /orgs/{orgId}/spaces/{spaceId}/forum/tags

List tags in a space (forum)

forumulate forum tags<br>client.forum.tags()

Forum_getSettings

GET /orgs/{orgId}/spaces/{spaceId}/forum/settings

List settings in a space (forum)

forumulate forum settings<br>client.forum.getSettings()

Forum_updateSettings

PATCH /orgs/{orgId}/spaces/{spaceId}/forum/settings

Update settings in a space (forum)

forumulate forum configure<br>client.forum.updateSettings()

Forum_trash

GET /orgs/{orgId}/spaces/{spaceId}/forum/trash/items

List items in a space (forum trash)

client.forum.trash()

Forum_flags

GET /orgs/{orgId}/spaces/{spaceId}/forum/flags

List flags in a space (forum)

forumulate forum flags<br>client.forum.flags()

Forum_resolveFlag

POST /orgs/{orgId}/spaces/{spaceId}/forum/flags/{flagId}/resolve

Resolve the flag (forum)

forumulate forum flags resolve<br>client.forum.resolveFlag()

Forum_bulkModerate

POST /orgs/{orgId}/spaces/{spaceId}/forum/bulk

Create the bulk in a space (forum)

forumulate forum bulk<br>client.forum.bulkModerate()

Forum_reviewFlag

POST /orgs/{orgId}/spaces/{spaceId}/forum/flags/{flagId}/review

Create the review in a space (forum flags)

forumulate forum flags review<br>client.forum.reviewFlag()

Forum Behaviour

Operation

Request

What it does

Shortcuts

ForumBehaviour_get

GET /orgs/{orgId}/spaces/{spaceId}/forum/behaviour

Get the behaviour in a space

client.forum.behaviour.get()

ForumBehaviour_update

PATCH /orgs/{orgId}/spaces/{spaceId}/forum/behaviour

Update the behaviour in a space

client.forum.behaviour.update()

Forum Category Tools

Operation

Request

What it does

Shortcuts

ForumCategoryTools_clone

POST /orgs/{orgId}/spaces/{spaceId}/forum/categories/{categoryId}/clone

Clone the category

client.forum.categoryTools.clone()

ForumCategoryTools_renameTag

POST /orgs/{orgId}/spaces/{spaceId}/forum/tag-tools/rename

Create the rename in a space

client.forum.categoryTools.renameTag()

ForumCategoryTools_deleteUnusedTags

POST /orgs/{orgId}/spaces/{spaceId}/forum/tag-tools/delete-unused

Create the delete unused in a space

client.forum.categoryTools.deleteUnusedTags()

Forum Embed

Operation

Request

What it does

Shortcuts

ForumEmbed_meta

GET /public/orgs/{orgId}/spaces/{spaceId}/forum-embed/meta

Get the meta in a space

client.forum.embed.meta()

ForumEmbed_list

GET /public/orgs/{orgId}/spaces/{spaceId}/forum-embed/topics

List topics in a space

client.forum.embed.list()

ForumEmbed_thread

GET /public/orgs/{orgId}/spaces/{spaceId}/forum-embed/thread/{slug}

Get the thread

client.forum.embed.thread()

Forum Leaderboards

Operation

Request

What it does

Shortcuts

ForumLeaderboards_list

GET /orgs/{orgId}/community/leaderboards

List leaderboards in an organization

client.forum.leaderboards.list()

ForumLeaderboards_create

POST /orgs/{orgId}/community/leaderboards

Create a leaderboard in an organization

client.forum.leaderboards.create()

ForumLeaderboards_update

PATCH /orgs/{orgId}/community/leaderboards/{id}

Update the leaderboard

client.forum.leaderboards.update()

ForumLeaderboards_remove

DELETE /orgs/{orgId}/community/leaderboards/{id}

Delete the leaderboard

client.forum.leaderboards.remove()

ForumLeaderboards_preview

GET /orgs/{orgId}/community/leaderboards/{id}/preview

Preview the leaderboard

client.forum.leaderboards.preview()

Forum Paywall

Operation

Request

What it does

Shortcuts

ForumPaywall_view

GET /orgs/{orgId}/spaces/{spaceId}/forum/paywall

Get the paywall in a space

client.forum.paywall.view()

ForumPaywall_setSpace

PUT /orgs/{orgId}/spaces/{spaceId}/forum/paywall/space

Set the paywall for the whole forum

client.forum.paywall.setSpace()

ForumPaywall_setCategory

PUT /orgs/{orgId}/spaces/{spaceId}/forum/paywall/categories/{categoryId}

Replace the category

client.forum.paywall.setCategory()

Forum Paywall Public

Operation

Request

What it does

Shortcuts

ForumPaywallPublic_gate

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/membership/gate

Get the gate in a space (forum membership)

client.forum.publicPaywall.gate()

ForumPaywallPublic_plans

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/membership/plans

List plans in a space

client.forum.publicPaywall.plans()

ForumPaywallPublic_mine

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/membership/mine

List mine membership in a space

client.forum.publicPaywall.mine()

ForumPaywallPublic_checkout

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/membership/checkout

Create the checkout in a space (public reader forum membership)

client.forum.publicPaywall.checkout()

ForumPaywallPublic_confirm

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/membership/confirm

Confirm the membership

client.forum.publicPaywall.confirm()

ForumPaywallPublic_cancel

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/membership/{membershipId}/cancel

Cancel my paid membership

client.forum.publicPaywall.cancel()

ForumPaywallPublic_resume

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/membership/{membershipId}/resume

Resume the membership

client.forum.publicPaywall.resume()

Forum Plans

Operation

Request

What it does

Shortcuts

ForumPlans_listPlans

GET /orgs/{orgId}/forum/plans

List plans in an organization

client.forum.plans.listPlans()

ForumPlans_create

POST /orgs/{orgId}/forum/plans

Create a plan in an organization

client.forum.plans.create()

ForumPlans_update

PATCH /orgs/{orgId}/forum/plans/{planId}

Update the plan

client.forum.plans.update()

ForumPlans_remove

DELETE /orgs/{orgId}/forum/plans/{planId}

Delete the plan

client.forum.plans.remove()

ForumPlans_listMemberships

GET /orgs/{orgId}/forum/memberships

List memberships in an organization

client.forum.plans.listMemberships()

ForumPlans_cancel

POST /orgs/{orgId}/forum/memberships/{membershipId}/cancel

Cancel a member’s paid membership

client.forum.plans.cancel()

Forum Staff

Operation

Request

What it does

Shortcuts

ForumStaff_lock

POST /orgs/{orgId}/spaces/{spaceId}/forum/posts/{postId}/lock

Lock the post

client.forum.staff.lock()

ForumStaff_revisionVisibility

POST /orgs/{orgId}/spaces/{spaceId}/forum/posts/{postId}/revisions/{revision}/visibility

Create the visibility in a space

client.forum.staff.revisionVisibility()

ForumStaff_timestamp

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/timestamp

Create the timestamp in a space

client.forum.staff.timestamp()

ForumStaff_toMessage

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/convert-to-message

Convert to message in a space

client.forum.staff.toMessage()

ForumStaff_invite

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/invite

Invite the forum

client.forum.staff.invite()

Forum Taxonomy

Operation

Request

What it does

Shortcuts

ForumTaxonomy_listCategories

GET /orgs/{orgId}/spaces/{spaceId}/forum/categories

List categories in a space

client.forum.taxonomy.listCategories()<br>MCP list_entities

ForumTaxonomy_createCategory

POST /orgs/{orgId}/spaces/{spaceId}/forum/categories

Create a category in a space

client.forum.taxonomy.createCategory()

ForumTaxonomy_reorderCategories

POST /orgs/{orgId}/spaces/{spaceId}/forum/categories/reorder

Reorder the category

client.forum.taxonomy.reorderCategories()

ForumTaxonomy_updateCategory

PATCH /orgs/{orgId}/spaces/{spaceId}/forum/categories/{categoryId}

Update the category

client.forum.taxonomy.updateCategory()

ForumTaxonomy_removeCategory

DELETE /orgs/{orgId}/spaces/{spaceId}/forum/categories/{categoryId}

Delete the category

client.forum.taxonomy.removeCategory()

ForumTaxonomy_emailIn

GET /orgs/{orgId}/spaces/{spaceId}/forum/email-in

The inbound email address for a forum space

client.forum.taxonomy.emailIn()

ForumTaxonomy_listSharedDrafts

GET /orgs/{orgId}/spaces/{spaceId}/forum/shared-drafts

List shared drafts in a space

client.forum.taxonomy.listSharedDrafts()

ForumTaxonomy_createSharedDraft

POST /orgs/{orgId}/spaces/{spaceId}/forum/shared-drafts

Create a shared draft in a space

client.forum.taxonomy.createSharedDraft()

ForumTaxonomy_updateSharedDraft

PATCH /orgs/{orgId}/spaces/{spaceId}/forum/shared-drafts/{id}

Update the shared draft

client.forum.taxonomy.updateSharedDraft()

ForumTaxonomy_removeSharedDraft

DELETE /orgs/{orgId}/spaces/{spaceId}/forum/shared-drafts/{id}

Delete the shared draft

client.forum.taxonomy.removeSharedDraft()

ForumTaxonomy_publishSharedDraft

POST /orgs/{orgId}/spaces/{spaceId}/forum/shared-drafts/{id}/publish

Publish the shared draft

client.forum.taxonomy.publishSharedDraft()

ForumTaxonomy_listPermalinks

GET /orgs/{orgId}/spaces/{spaceId}/forum/permalinks

List permalinks in a space

client.forum.taxonomy.listPermalinks()

ForumTaxonomy_createPermalink

POST /orgs/{orgId}/spaces/{spaceId}/forum/permalinks

Create a permalink in a space

client.forum.taxonomy.createPermalink()

ForumTaxonomy_importPermalinks

POST /orgs/{orgId}/spaces/{spaceId}/forum/permalinks/import

Import the permalink

client.forum.taxonomy.importPermalinks()

ForumTaxonomy_removePermalink

DELETE /orgs/{orgId}/spaces/{spaceId}/forum/permalinks/{id}

Delete the permalink

client.forum.taxonomy.removePermalink()

ForumTaxonomy_listCategoryPerms

GET /orgs/{orgId}/spaces/{spaceId}/forum/categories/{categoryId}/permissions

List permissions in a space

client.forum.taxonomy.listCategoryPerms()

ForumTaxonomy_setCategoryPerms

PUT /orgs/{orgId}/spaces/{spaceId}/forum/categories/{categoryId}/permissions

Replace permissions in a space

client.forum.taxonomy.setCategoryPerms()

ForumTaxonomy_listCategoryMods

GET /orgs/{orgId}/spaces/{spaceId}/forum/categories/{categoryId}/moderators

List moderators in a space

client.forum.taxonomy.listCategoryMods()

ForumTaxonomy_addCategoryMod

POST /orgs/{orgId}/spaces/{spaceId}/forum/categories/{categoryId}/moderators

Create a moderator in a space

client.forum.taxonomy.addCategoryMod()

ForumTaxonomy_removeCategoryMod

DELETE /orgs/{orgId}/spaces/{spaceId}/forum/categories/{categoryId}/moderators/{userId}

Delete the moderator

client.forum.taxonomy.removeCategoryMod()

ForumTaxonomy_listTagGroups

GET /orgs/{orgId}/spaces/{spaceId}/forum/tag-groups

List tag groups in a space

client.forum.taxonomy.listTagGroups()

ForumTaxonomy_createTagGroup

POST /orgs/{orgId}/spaces/{spaceId}/forum/tag-groups

Create a tag group in a space

client.forum.taxonomy.createTagGroup()

ForumTaxonomy_updateTagGroup

PATCH /orgs/{orgId}/spaces/{spaceId}/forum/tag-groups/{groupId}

Update the tag group

client.forum.taxonomy.updateTagGroup()

ForumTaxonomy_removeTagGroup

DELETE /orgs/{orgId}/spaces/{spaceId}/forum/tag-groups/{groupId}

Delete the tag group

client.forum.taxonomy.removeTagGroup()

ForumTaxonomy_listTagInfo

GET /orgs/{orgId}/spaces/{spaceId}/forum/tag-info

Get the tag info in a space (forum)

client.forum.taxonomy.listTagInfo()

ForumTaxonomy_setTagInfo

POST /orgs/{orgId}/spaces/{spaceId}/forum/tag-info

Create the tag info in a space

client.forum.taxonomy.setTagInfo()

ForumTaxonomy_removeTagInfo

DELETE /orgs/{orgId}/spaces/{spaceId}/forum/tag-info/{tag}

Delete the tag info

client.forum.taxonomy.removeTagInfo()

ForumTaxonomy_setTopicCategory

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/category

Create the category in a space

client.forum.taxonomy.setTopicCategory()<br>MCP set_topic_category

Forum Tools

Operation

Request

What it does

Shortcuts

ForumTools_summarize

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/summarize

Create the summarize in a space

client.forum.tools.summarize()

ForumTools_unansweredExperts

GET /orgs/{orgId}/spaces/{spaceId}/forum/unanswered/experts

List experts in a space (unanswered)

client.forum.tools.unansweredExperts()

ForumTools_experts

GET /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/experts

List experts in a space

client.forum.tools.experts()

ForumTools_notifyExperts

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/experts/notify

Create the notify in a space (experts)

client.forum.tools.notifyExperts()

ForumTools_getTimer

GET /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/timer

Get the timer in a space

client.forum.tools.getTimer()

ForumTools_setTimer

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/timer

Create the timer in a space

client.forum.tools.setTimer()

ForumTools_clearTimer

DELETE /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/timer

Delete the timer in a space

client.forum.tools.clearTimer()

ForumTools_recover

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/recover

Create the recover in a space (forum)

client.forum.tools.recover()

ForumTools_bump

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/bump

Create the bump in a space

client.forum.tools.bump()

ForumTools_split

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/split

Split the forum

client.forum.tools.split()

ForumTools_merge

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/merge

Merge the forum

client.forum.tools.merge()

ForumTools_promoteToDocs

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/promote

Promote the forum

client.forum.tools.promoteToDocs()

ForumTools_movePosts

POST /orgs/{orgId}/spaces/{spaceId}/forum/posts/move

Move the post

client.forum.tools.movePosts()

ForumTools_changeOwner

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/change-owner

Create the change owner in a space

client.forum.tools.changeOwner()

ForumTools_editPost

PATCH /orgs/{orgId}/spaces/{spaceId}/forum/posts/{postId}

Update the post (forum)

client.forum.tools.editPost()

ForumTools_deletePost

DELETE /orgs/{orgId}/spaces/{spaceId}/forum/posts/{postId}

Delete the post (forum)

client.forum.tools.deletePost()

ForumTools_revisions

GET /orgs/{orgId}/spaces/{spaceId}/forum/posts/{postId}/revisions

List revisions in a space (forum posts)

client.forum.tools.revisions()

ForumTools_revisionDiff

GET /orgs/{orgId}/spaces/{spaceId}/forum/posts/{postId}/revisions/{revision}

Get the revision (forum)

client.forum.tools.revisionDiff()

ForumTools_vote

POST /orgs/{orgId}/spaces/{spaceId}/forum/posts/{postId}/vote

Create the vote in a space (forum posts)

client.forum.tools.vote()

ForumTools_setVote

PUT /orgs/{orgId}/spaces/{spaceId}/forum/posts/{postId}/vote

Replace the vote in a space

client.forum.tools.setVote()

ForumTools_react

POST /orgs/{orgId}/spaces/{spaceId}/forum/posts/{postId}/react

Create the react in a space (forum posts)

client.forum.tools.react()

ForumTools_bookmark

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/bookmark

Create the bookmark in a space (forum)

client.forum.tools.bookmark()

ForumTools_bookmarkReminder

PUT /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/bookmark/reminder

Replace the reminder in a space

client.forum.tools.bookmarkReminder()

ForumTools_flag

POST /orgs/{orgId}/spaces/{spaceId}/forum/posts/{postId}/flag

Flag the post (forum)

client.forum.tools.flag()

ForumTools_flagTopic

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/flag

Flag the forum

client.forum.tools.flagTopic()

ForumTools_answer

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/answer

Create the answer in a space (forum)

client.forum.tools.answer()<br>MCP moderate_topic

ForumTools_offerBounty

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/bounty

Create the bounty in a space

client.forum.tools.offerBounty()

ForumTools_withdrawBounty

DELETE /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/bounty

Delete the bounty in a space

client.forum.tools.withdrawBounty()

ForumTools_bountyHistory

GET /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/bounties

List bounties in a space

client.forum.tools.bountyHistory()

ForumTools_setState

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/state

Create the state in a space (forum)

client.forum.tools.setState()<br>MCP moderate_topic

ForumTools_setKind

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/kind

Create the kind in a space

client.forum.tools.setKind()<br>MCP moderate_topic

ForumTools_pin

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/pin

Pin the forum

client.forum.tools.pin()<br>MCP moderate_topic

ForumTools_pinAdvanced

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/pin-advanced

Pin advanced in a space

client.forum.tools.pinAdvanced()

ForumTools_slowMode

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/slow-mode

Create the slow mode in a space

client.forum.tools.slowMode()

ForumTools_dismissPin

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/dismiss-pin

Dismiss pin in a space

client.forum.tools.dismissPin()

ForumTools_setListed

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/listed

Create the listed in a space

client.forum.tools.setListed()

ForumTools_setPostStatus

POST /orgs/{orgId}/spaces/{spaceId}/forum/posts/{postId}/status

Create the status in a space (forum posts)

client.forum.tools.setPostStatus()

Forum Topic Edit

Operation

Request

What it does

Shortcuts

ForumTopicEdit_update

PATCH /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}

Update the forum

forumulate forum update<br>client.forum.topicEdit.update()

ForumTopicEdit_remove

DELETE /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}

Delete the forum

forumulate forum delete<br>client.forum.topicEdit.remove()

Forum Topics

Operation

Request

What it does

Shortcuts

ForumTopics_create

POST /orgs/{orgId}/spaces/{spaceId}/forum

Create the forum in a space

forumulate forum create<br>client.forum.topics.create()<br>client.forum.createTopic()

ForumTopics_banner

GET /orgs/{orgId}/spaces/{spaceId}/forum/banner

Get the banner in a space

forumulate forum banner<br>client.forum.topics.banner()

ForumTopics_get

GET /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}

Get the forum

forumulate forum get<br>client.forum.topics.get()<br>MCP moderate_topic

ForumTopics_related

GET /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/related

Get the related in a space

forumulate forum related<br>client.forum.topics.related()

ForumTopics_timeline

GET /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/timeline

Get the timeline in a space

forumulate forum timeline<br>client.forum.topics.timeline()

ForumTopics_replyAsLinkedTopic

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/posts/{postId}/reply-as-linked-topic

Create the reply as linked topic in a space

forumulate forum reply-as-topic<br>client.forum.topics.replyAsLinkedTopic()

ForumTopics_addPoll

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/poll

Create the poll in a space

forumulate forum polls add<br>client.forum.topics.addPoll()

ForumTopics_votePoll

POST /orgs/{orgId}/spaces/{spaceId}/forum/polls/{pollId}/vote

Create the vote in a space (forum polls)

forumulate forum polls vote<br>client.forum.topics.votePoll()

ForumTopics_pollVoters

GET /orgs/{orgId}/spaces/{spaceId}/forum/polls/{pollId}/voters

List voters in a space (forum polls)

forumulate forum polls voters<br>client.forum.topics.pollVoters()

ForumTopics_closePoll

POST /orgs/{orgId}/spaces/{spaceId}/forum/polls/{pollId}/close

Close the poll

forumulate forum polls close<br>client.forum.topics.closePoll()

ForumTopics_reopenPoll

POST /orgs/{orgId}/spaces/{spaceId}/forum/polls/{pollId}/reopen

Reopen the poll

forumulate forum polls reopen<br>client.forum.topics.reopenPoll()

ForumTopics_removePoll

DELETE /orgs/{orgId}/spaces/{spaceId}/forum/polls/{pollId}

Delete the poll

forumulate forum polls remove<br>client.forum.topics.removePoll()

ForumTopics_reply

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/replies

Create a reply in a space (forum)

forumulate forum reply<br>client.forum.topics.reply()<br>client.forum.reply()

ForumTopics_setWiki

POST /orgs/{orgId}/spaces/{spaceId}/forum/posts/{postId}/wiki

Create the wiki in a space

forumulate forum wiki<br>client.forum.topics.setWiki()

Group

Operation

Request

What it does

Shortcuts

Group_list

GET /orgs/{orgId}/groups

List groups in an organization

forumulate groups list<br>client.groups.list()

Group_create

POST /orgs/{orgId}/groups

Create a group in an organization

forumulate groups create<br>client.groups.create()

Group_get

GET /orgs/{orgId}/groups/{groupId}

Get the group (orgs groups)

forumulate groups get<br>client.groups.get()

Group_update

PATCH /orgs/{orgId}/groups/{groupId}

Update the group (orgs groups)

forumulate groups update<br>client.groups.update()

Group_remove

DELETE /orgs/{orgId}/groups/{groupId}

Delete the group (orgs groups)

forumulate groups delete<br>client.groups.remove()

Group_addMember

POST /orgs/{orgId}/groups/{groupId}/members

Create a member in an organization (groups)

forumulate groups members add<br>client.groups.addMember()

Group_removeMember

DELETE /orgs/{orgId}/groups/{groupId}/members/{userId}

Delete the member (groups)

forumulate groups members remove<br>client.groups.removeMember()

Group_join

POST /orgs/{orgId}/groups/{groupId}/join

Join the group

forumulate groups join<br>client.groups.join()

Group_leave

POST /orgs/{orgId}/groups/{groupId}/leave

Leave the group

forumulate groups leave<br>client.groups.leave()

Group_requests

GET /orgs/{orgId}/groups/{groupId}/requests

List requests in an organization

forumulate groups requests list<br>client.groups.requests()

Group_review

POST /orgs/{orgId}/groups/{groupId}/requests/{requestId}

Create the request

forumulate groups requests review<br>client.groups.review()

Group Mailbox

Operation

Request

What it does

Shortcuts

GroupMailbox_get

GET /orgs/{orgId}/groups/{groupId}/mailbox

Get the mailbox in an organization

client.groups.mailbox.get()

GroupMailbox_set

PUT /orgs/{orgId}/groups/{groupId}/mailbox

Replace the mailbox in an organization

client.groups.mailbox.set()

GroupMailbox_clear

DELETE /orgs/{orgId}/groups/{groupId}/mailbox

Delete the mailbox in an organization

client.groups.mailbox.clear()

Group Message

Operation

Request

What it does

Shortcuts

GroupMessage_message

POST /orgs/{orgId}/groups/{groupId}/message

Create the message in an organization

client.groups.message.message()

GroupMessage_inbox

GET /orgs/{orgId}/groups/{groupId}/inbox

Get the inbox in an organization

client.groups.message.inbox()

Messages

Operation

Request

What it does

Shortcuts

Messages_list

GET /orgs/{orgId}/messages

List messages in an organization

client.messages.list()

Messages_start

POST /orgs/{orgId}/messages

Create a message in an organization

client.messages.start()

Messages_recipients

GET /orgs/{orgId}/messages/recipients

List recipients in an organization (messages)

client.messages.recipients()

Messages_unreadCount

GET /orgs/{orgId}/messages/unread-count

Get the unread count in an organization

client.messages.unreadCount()

Messages_get

GET /orgs/{orgId}/messages/{conversationId}

Get the message

client.messages.get()

Messages_reply

POST /orgs/{orgId}/messages/{conversationId}/reply

Create the reply in an organization

client.messages.reply()

Messages_archive

POST /orgs/{orgId}/messages/{conversationId}/archive

Archive the message

client.messages.archive()

Messages_addParticipant

POST /orgs/{orgId}/messages/{conversationId}/participants

Create a participant in an organization

client.messages.addParticipant()

Messages_removeParticipant

DELETE /orgs/{orgId}/messages/{conversationId}/participants/{userId}

Delete the participant

client.messages.removeParticipant()

Moderation

Operation

Request

What it does

Shortcuts

Moderation_reviewables

GET /orgs/{orgId}/moderation/reviewables

List reviewables in an organization

client.moderation.reviewables()

Moderation_reviewFlag

POST /orgs/{orgId}/moderation/reviewables/flag/{flagId}

Create the flag

client.moderation.reviewFlag()

Moderation_reviewFlagsBulk

POST /orgs/{orgId}/moderation/reviewables/flags/bulk

Create the bulk in an organization (moderation reviewables flags)

client.moderation.reviewFlagsBulk()

Moderation_reviewPost

POST /orgs/{orgId}/moderation/reviewables/post/{postId}

Create the post

client.moderation.reviewPost()

Moderation_claimFlag

POST /orgs/{orgId}/moderation/reviewables/flag/{flagId}/claim

Claim the flag

client.moderation.claimFlag()

Moderation_unclaimFlag

DELETE /orgs/{orgId}/moderation/reviewables/flag/{flagId}/claim

Claim the flag (delete)

client.moderation.unclaimFlag()

Moderation_setPriority

POST /orgs/{orgId}/moderation/reviewables/flag/{flagId}/priority

Create the priority in an organization

client.moderation.setPriority()

Moderation_deleteAndBlock

POST /orgs/{orgId}/moderation/reviewables/flag/{flagId}/delete-and-block

Create the delete and block in an organization

client.moderation.deleteAndBlock()

Moderation_hardDeletePost

DELETE /orgs/{orgId}/moderation/posts/{postId}/permanent

Delete the permanent in an organization (posts)

client.moderation.hardDeletePost()

Moderation_hardDeleteTopic

DELETE /orgs/{orgId}/moderation/topics/{topicId}/permanent

Delete the permanent in an organization (topics)

client.moderation.hardDeleteTopic()

Moderation_flagHistory

GET /orgs/{orgId}/moderation/reviewables/flag/{flagId}/history

Get the history in an organization

client.moderation.flagHistory()

Moderation_listWords

GET /orgs/{orgId}/moderation/words

List words in an organization

client.moderation.listWords()

Moderation_addWord

POST /orgs/{orgId}/moderation/words

Create a word in an organization

client.moderation.addWord()

Moderation_removeWord

DELETE /orgs/{orgId}/moderation/words/{wordId}

Delete the word

client.moderation.removeWord()

Moderation_listSuspensions

GET /orgs/{orgId}/moderation/suspensions

List suspensions in an organization

client.moderation.listSuspensions()

Moderation_suspend

POST /orgs/{orgId}/moderation/suspensions/{userId}

Create the suspension

client.moderation.suspend()

Moderation_lift

DELETE /orgs/{orgId}/moderation/suspensions/{userId}

Delete the suspension

client.moderation.lift()

Moderation_anonymize

POST /orgs/{orgId}/moderation/anonymize/{userId}

Create the anonymize

client.moderation.anonymize()

Moderation_selfAnonymize

POST /orgs/{orgId}/moderation/me/anonymize

Create the anonymize in an organization

client.moderation.selfAnonymize()

Moderation_listWatchedUsers

GET /orgs/{orgId}/moderation/watched-users

List watched users in an organization

client.moderation.listWatchedUsers()

Moderation_watchUser

POST /orgs/{orgId}/moderation/watched-users/{userId}

Create the watched user

client.moderation.watchUser()

Moderation_unwatchUser

DELETE /orgs/{orgId}/moderation/watched-users/{userId}

Delete the watched user

client.moderation.unwatchUser()

Moderation_log

GET /orgs/{orgId}/moderation/log

Get the log in an organization (moderation)

client.moderation.log()

Moderation Messages

Operation

Request

What it does

Shortcuts

ModerationMessages_context

GET /orgs/{orgId}/moderation/message-context

Get the message context in an organization

client.moderation.messages.context()

ModerationMessages_send

POST /orgs/{orgId}/moderation/messages

Create a message in an organization (moderation)

client.moderation.messages.send()

ModerationMessages_warnings

GET /orgs/{orgId}/moderation/warnings

List warnings in an organization

client.moderation.messages.warnings()

ModerationMessages_strikes

GET /orgs/{orgId}/moderation/strikes/{userId}

Get the strike

client.moderation.messages.strikes()

ModerationMessages_toTopic

POST /orgs/{orgId}/messages/{conversationId}/convert-to-topic

Convert to topic in an organization

client.moderation.messages.toTopic()

Notification

Operation

Request

What it does

Shortcuts

Notification_getDnd

GET /orgs/{orgId}/notifications/dnd

Get the dnd in an organization

client.notifications.getDnd()

Notification_setDnd

PUT /orgs/{orgId}/notifications/dnd

Replace the dnd in an organization

client.notifications.setDnd()

Notification_snoozeDnd

POST /orgs/{orgId}/notifications/dnd/snooze

Create the snooze in an organization

client.notifications.snoozeDnd()

Notification_getSchedule

GET /orgs/{orgId}/notifications/schedule

Get the schedule in an organization (notifications)

client.notifications.getSchedule()

Notification_setSchedule

PUT /orgs/{orgId}/notifications/schedule

Replace the schedule in an organization

client.notifications.setSchedule()

Notification_getTypePreferences

GET /orgs/{orgId}/notifications/type-preferences

List type preferences in an organization

client.notifications.getTypePreferences()

Notification_setTypePreferences

PUT /orgs/{orgId}/notifications/type-preferences

Replace type preferences in an organization

client.notifications.setTypePreferences()

Notification_stream

GET /orgs/{orgId}/notifications/stream

Get the stream in an organization (notifications)

client.notifications.stream()

Notification_getPreferences

GET /orgs/{orgId}/notifications/preferences

List preferences in an organization

client.notifications.getPreferences()

Notification_setPreferences

PATCH /orgs/{orgId}/notifications/preferences

Update preferences in an organization

client.notifications.setPreferences()

Notification_list

GET /orgs/{orgId}/notifications

List notifications in an organization

client.notifications.list()

Notification_read

POST /orgs/{orgId}/notifications/{id}/read

Create the read in an organization (notifications)

client.notifications.read()

Notification_readAll

POST /orgs/{orgId}/notifications/read-all

Create the read all in an organization

client.notifications.readAll()

Org Backup

Operation

Request

What it does

Shortcuts

OrgBackup_list

GET /orgs/{orgId}/backups

List the organization’s backups

client.orgs.backup.list()

OrgBackup_create

POST /orgs/{orgId}/backups

Take a backup now

client.orgs.backup.create()

OrgBackup_download

GET /orgs/{orgId}/backups/{backupId}/download

Download a backup

client.orgs.backup.download()

OrgBackup_remove

DELETE /orgs/{orgId}/backups/{backupId}

Delete a backup

client.orgs.backup.remove()

OrgBackup_restore

POST /orgs/{orgId}/backups/{backupId}/restore

Restore a backup into this organization

client.orgs.backup.restore()

Public chrome

Operation

Request

What it does

Shortcuts

Public_chrome

GET /public/orgs/{orgId}/spaces/{spaceId}/chrome

Get the chrome in a space

client.public.chrome()

Public Custom Emoji

Operation

Request

What it does

Shortcuts

PublicCustomEmoji_list

GET /public/orgs/{orgId}/custom-emoji

Get the custom emoji in an organization (public reader)

client.community.publicCustomEmoji.list()

Public Forum

Operation

Request

What it does

Shortcuts

PublicForum_readAll

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/read-all

Create the read all in a space

client.forum.public.readAll()

PublicForum_dismissNew

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/dismiss-new

Dismiss new in a space

client.forum.public.dismissNew()

PublicForum_dismissUnread

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/dismiss-unread

Dismiss unread in a space

client.forum.public.dismissUnread()

PublicForum_embedResolve

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/embed/resolve

Resolve the embed

client.forum.public.embedResolve()

PublicForum_upload

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/upload

Upload the forum

client.forum.public.upload()

PublicForum_createAnon

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/topics

Create a topic in a space (public reader forum)

client.forum.public.createAnon()

PublicForum_index

GET /public/orgs/{orgId}/spaces/{spaceId}/forum

Get the forum in a space (public reader)

client.forum.public.index()

Public Forum Account

Operation

Request

What it does

Shortcuts

PublicForumAccount_list

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/me/notifications

The signed-in reader's notifications, newest first

client.forum.publicAccount.list()

PublicForumAccount_markRead

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/me/notifications/{id}/read

Mark one of the reader’s notifications read

client.forum.publicAccount.markRead()

PublicForumAccount_markAllRead

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/me/notifications/read-all

Mark every one of the reader’s notifications read

client.forum.publicAccount.markAllRead()

Public Forum Ai

Operation

Request

What it does

Shortcuts

PublicForumAi_availability

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/ai

Get the AI in a space

client.forum.publicAi.availability()

PublicForumAi_rewrite

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/ai/rewrite

Create the rewrite in a space (public reader forum)

client.forum.publicAi.rewrite()

PublicForumAi_suggest

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/ai/suggest

Create the suggest in a space

client.forum.publicAi.suggest()

PublicForumAi_botState

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/ai-bot

Get the AI bot in a space

client.forum.publicAi.botState()

PublicForumAi_setBot

PUT /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/ai-bot

Replace the AI bot in a space

client.forum.publicAi.setBot()

Public Forum Behaviour

Operation

Request

What it does

Shortcuts

PublicForumBehaviour_get

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/behaviour

Get the behaviour in a space (public reader)

client.forum.publicBehaviour.get()

Public Forum Bookmark

Operation

Request

What it does

Shortcuts

PublicForumBookmark_dismissPin

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/dismiss-pin

Dismiss pin in a space (public reader t)

client.forum.publicBookmark.dismissPin()

Public Forum Category

Operation

Request

What it does

Shortcuts

PublicForumCategory_category

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/category/{slug}

Get the category

client.forum.publicCategory.category()

PublicForumCategory_notify

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/category/{slug}/notify

Create the notify in a space (public reader category)

client.forum.publicCategory.notify()

PublicForumCategory_tags

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/tags

List tags in a space (public reader forum)

client.forum.publicCategory.tags()

Public Forum Discovery

Operation

Request

What it does

Shortcuts

PublicForumDiscovery_permalink

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/permalink

Get the permalink in a space (forum)

client.forum.publicDiscovery.permalink()

PublicForumDiscovery_bookmarks

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/bookmarks

List bookmarks in a space (public reader forum)

client.forum.publicDiscovery.bookmarks()

PublicForumDiscovery_mentionSuggest

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/mention-suggest

Get the mention suggest in a space

client.forum.publicDiscovery.mentionSuggest()

PublicForumDiscovery_resolveRefs

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/refs

List refs in a space

client.forum.publicDiscovery.resolveRefs()

PublicForumDiscovery_search

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/search

Get the search in a space (public reader forum)

client.forum.publicDiscovery.search()

Public Forum Feeds

Operation

Request

What it does

Shortcuts

PublicForumFeeds_newCount

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/new-count

Get the new count in a space

client.forum.publicFeeds.newCount()

PublicForumFeeds_rss

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/rss.xml

RSS feed of the forum

client.forum.publicFeeds.rss()

PublicForumFeeds_latestRss

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/latest.rss

RSS feed of latest

client.forum.publicFeeds.latestRss()

PublicForumFeeds_topRss

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/top.rss

RSS feed of top

client.forum.publicFeeds.topRss()

Public Forum Leaderboards

Operation

Request

What it does

Shortcuts

PublicForumLeaderboards_list

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/leaderboards

List leaderboards in a space

client.forum.publicLeaderboards.list()

PublicForumLeaderboards_board

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/leaderboards/{slug}

Get the leaderboard

client.forum.publicLeaderboards.board()

PublicForumLeaderboards_memberAway

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/u/{userId}/away

Get the away in a space

client.forum.publicLeaderboards.memberAway()

Public Forum People

Operation

Request

What it does

Shortcuts

PublicForumPeople_directory

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/directory

Get the directory in a space (public reader forum)

client.forum.publicPeople.directory()

PublicForumPeople_badges

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/badges

List badges in a space

client.forum.publicPeople.badges()

PublicForumPeople_leaderboard

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/leaderboard

Get the leaderboard in a space (public reader forum)

client.forum.publicPeople.leaderboard()

PublicForumPeople_profile

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/u/{userId}

Get the member

client.forum.publicPeople.profile()

PublicForumPeople_userActionsFeed

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/u/{userId}/actions

List actions in a space

client.forum.publicPeople.userActionsFeed()

PublicForumPeople_userCard

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/u/{userId}/card

Get the card in a space

client.forum.publicPeople.userCard()

PublicForumPeople_onlineRoster

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/presence/online

Get the online in a space

client.forum.publicPeople.onlineRoster()

Public Forum Profile

Operation

Request

What it does

Shortcuts

PublicForumProfile_userSummary

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/u/{userId}/summary

Get the summary in a space

client.forum.publicProfile.userSummary()

Operation

Request

What it does

Shortcuts

PublicForumSearch_full

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/search/full

Search a public forum with Discourse operators (ranked, paged)

client.forum.publicSearch.full()<br>MCP search_community

Public Forum Staff

Operation

Request

What it does

Shortcuts

PublicForumStaff_invite

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/invite

Invite the topic

client.forum.publicStaff.invite()

PublicForumStaff_converted

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/converted

Get the converted in a space

client.forum.publicStaff.converted()

PublicForumStaff_revisionVisibility

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/posts/{postId}/revisions/{revision}/visibility

Create the visibility in a space (public reader t)

client.forum.publicStaff.revisionVisibility()

PublicForumStaff_lock

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/posts/{postId}/lock

Lock the post (public reader t)

client.forum.publicStaff.lock()

Public Forum Taxonomy

Operation

Request

What it does

Shortcuts

PublicForumTaxonomy_categoriesList

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/categories

List categories in a space (public reader)

client.forum.publicTaxonomy.categoriesList()

PublicForumTaxonomy_categoryFormTemplate

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/categories/{categoryId}/form-template

Get the form template in a space

client.forum.publicTaxonomy.categoryFormTemplate()

PublicForumTaxonomy_categoriesOverview

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/categories/overview

Get the overview in a space (public reader forum categories)

client.forum.publicTaxonomy.categoriesOverview()

PublicForumTaxonomy_tagAbout

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/tags/{tag}

Get the tag (public reader spaces forum)

client.forum.publicTaxonomy.tagAbout()

PublicForumTaxonomy_tagIntersection

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/tags/intersection/{a}/{b}

Get the intersection

client.forum.publicTaxonomy.tagIntersection()

PublicForumTaxonomy_categoryRss

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/categories/{slug}/rss.xml

RSS feed of the category

client.forum.publicTaxonomy.categoryRss()

PublicForumTaxonomy_tagRss

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/tags/{tag}/rss.xml

RSS feed of the tag

client.forum.publicTaxonomy.tagRss()

Public Forum Thread

Operation

Request

What it does

Shortcuts

PublicForumThread_summary

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/summary

Create the summary in a space

client.forum.publicThread.summary()

PublicForumThread_stream

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/stream

Get the stream in a space (forum t)

client.forum.publicThread.stream()

PublicForumThread_pieceMarkdown

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}.md

Read a forum topic as markdown

client.forum.publicThread.pieceMarkdown()

PublicForumThread_view

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/view

Create the view in a space (forum t)

client.forum.publicThread.view()

PublicForumThread_topic

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}

Read a forum topic

client.forum.publicThread.topic()<br>MCP get_topic

Public Forum Topic

Operation

Request

What it does

Shortcuts

PublicForumTopic_heartbeat

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/heartbeat

Create the heartbeat in a space (public reader forum t)

client.forum.publicTopic.heartbeat()

PublicForumTopic_reply

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/reply

Create the reply in a space (public reader forum t)

client.forum.publicTopic.reply()

PublicForumTopic_replyAsLinkedTopic

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/posts/{postId}/reply-as-linked-topic

Create the reply as linked topic in a space (public reader t)

client.forum.publicTopic.replyAsLinkedTopic()

PublicForumTopic_react

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/posts/{postId}/react

Create the react in a space (public reader forum t posts)

client.forum.publicTopic.react()

PublicForumTopic_vote

PUT /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/posts/{postId}/vote

Replace the vote in a space (public reader t)

client.forum.publicTopic.vote()

PublicForumTopic_reactors

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/posts/{postId}/reactions

List reactions in a space (forum t posts)

client.forum.publicTopic.reactors()

PublicForumTopic_flag

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/posts/{postId}/flag

Flag the post (public reader forum t)

client.forum.publicTopic.flag()

PublicForumTopic_flagTopic

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/flag

Flag the topic

client.forum.publicTopic.flagTopic()

PublicForumTopic_answer

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/answer

Create the answer in a space (public reader forum t)

client.forum.publicTopic.answer()

PublicForumTopic_offerBounty

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/bounty

Create the bounty in a space (public reader t)

client.forum.publicTopic.offerBounty()

PublicForumTopic_withdrawBounty

DELETE /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/bounty

Delete the bounty in a space (public reader t)

client.forum.publicTopic.withdrawBounty()

PublicForumTopic_edit

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/posts/{postId}/edit

Create the edit in a space

client.forum.publicTopic.edit()

PublicForumTopic_postRevisions

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/posts/{postId}/revisions

List revisions in a space (public reader forum t posts)

client.forum.publicTopic.postRevisions()

PublicForumTopic_postRevisionDiff

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/posts/{postId}/revisions/{revision}

Get the revision (public reader forum t)

client.forum.publicTopic.postRevisionDiff()

PublicForumTopic_notify

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/notify

Create the notify in a space (public reader t)

client.forum.publicTopic.notify()

PublicForumTopic_relatedTopics

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/related

Get the related in a space (public reader t)

client.forum.publicTopic.relatedTopics()

PublicForumTopic_topicPostsRss

GET /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/posts.rss

RSS feed of posts

client.forum.publicTopic.topicPostsRss()

PublicForumTopic_bookmark

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/bookmark

Create the bookmark in a space (public reader forum t)

client.forum.publicTopic.bookmark()

PublicForumTopic_bookmarkPost

POST /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/posts/{postId}/bookmark

Create the bookmark in a space (public reader forum t posts)

client.forum.publicTopic.bookmarkPost()

PublicForumTopic_bookmarkReminder

PUT /public/orgs/{orgId}/spaces/{spaceId}/forum/t/{slug}/bookmark/reminder

Replace the reminder in a space (public reader t)

client.forum.publicTopic.bookmarkReminder()

Public Onebox

Operation

Request

What it does

Shortcuts

PublicOnebox_onebox

GET /public/orgs/{orgId}/onebox

Get the onebox in an organization

client.public.onebox.onebox()

PublicOnebox_inline

GET /public/orgs/{orgId}/onebox/inline

Get the inline in an organization

client.public.onebox.inline()

PublicOnebox_oneboxPost

POST /public/orgs/{orgId}/onebox/post

Create the post in an organization

client.public.onebox.oneboxPost()

Relationship

Operation

Request

What it does

Shortcuts

Relationship_setStatus

POST /orgs/{orgId}/community/status

Create the status in an organization (community)

client.community.relationships.setStatus()

Relationship_clearStatus

DELETE /orgs/{orgId}/community/status

Delete the status in an organization

client.community.relationships.clearStatus()

Relationship_list

GET /orgs/{orgId}/community/ignored

Get the ignored in an organization

client.community.relationships.list()

Relationship_mute

POST /orgs/{orgId}/community/members/{targetUserId}/mute

Mute the member

client.community.relationships.mute()

Relationship_unmute

DELETE /orgs/{orgId}/community/members/{targetUserId}/mute

Mute the member (delete)

client.community.relationships.unmute()

Relationship_follow

POST /orgs/{orgId}/community/members/{targetUserId}/follow

Follow the member

client.community.relationships.follow()

Relationship_unfollow

DELETE /orgs/{orgId}/community/members/{targetUserId}/follow

Follow the member (delete)

client.community.relationships.unfollow()

Relationship_card

GET /orgs/{orgId}/community/members/{targetUserId}/card

Get the card in an organization

client.community.relationships.card()

Reputation

Operation

Request

What it does

Shortcuts

Reputation_profile

GET /orgs/{orgId}/community/members/{userId}/profile

Get the profile in an organization

client.community.reputation.profile()

Reputation_catalog

GET /orgs/{orgId}/community/reputation/catalog

Get the catalog in an organization (community reputation)

client.community.reputation.catalog()

Reputation_createBadge

POST /orgs/{orgId}/community/reputation/badges

Create a badge in an organization

client.community.reputation.createBadge()

Reputation_updateBadge

POST /orgs/{orgId}/community/reputation/badges/{badgeId}

Create the badge

client.community.reputation.updateBadge()

Reputation_deleteBadge

DELETE /orgs/{orgId}/community/reputation/badges/{badgeId}

Delete the badge

client.community.reputation.deleteBadge()

Reputation_grantBadge

POST /orgs/{orgId}/community/reputation/{userId}/badges

Create a badge in an organization (for a user)

client.community.reputation.grantBadge()

Reputation_revokeBadge

DELETE /orgs/{orgId}/community/reputation/{userId}/badges/{slug}

Delete the badge (for a user and a named one)

client.community.reputation.revokeBadge()

Reputation_recompute

POST /orgs/{orgId}/community/reputation/recompute

Create the recompute in an organization

client.community.reputation.recompute()

Reputation_me

GET /orgs/{orgId}/community/reputation/me

Your reputation in an organization

client.community.reputation.me()

Reputation_setExternal

PUT /orgs/{orgId}/community/reputation/{userId}/external

Replace the external in an organization

client.community.reputation.setExternal()

Reputation_removeExternal

DELETE /orgs/{orgId}/community/reputation/{userId}/external/{source}

Delete the external

client.community.reputation.removeExternal()

Reputation_externalLeaderboard

GET /orgs/{orgId}/community/reputation/external/{source}/leaderboard

Get the leaderboard in an organization (external)

client.community.reputation.externalLeaderboard()

Reputation_getFeatured

GET /orgs/{orgId}/community/reputation/me/featured

Get the featured in an organization

client.community.reputation.getFeatured()

Reputation_setFeatured

PUT /orgs/{orgId}/community/reputation/me/featured

Replace the featured in an organization

client.community.reputation.setFeatured()

Reputation_setFeaturedTopic

PUT /orgs/{orgId}/community/reputation/me/featured-topic

Replace the featured topic in an organization

client.community.reputation.setFeaturedTopic()

Reputation_setBackgrounds

PUT /orgs/{orgId}/community/reputation/me/backgrounds

Replace backgrounds in an organization

client.community.reputation.setBackgrounds()

Reputation_leaderboard

GET /orgs/{orgId}/community/reputation/leaderboard

Get the leaderboard in an organization

client.community.reputation.leaderboard()

Reputation_pointsLeaderboard

GET /orgs/{orgId}/community/reputation/points

List points in an organization

client.community.reputation.pointsLeaderboard()

Reputation_directory

GET /orgs/{orgId}/community/directory

Get the directory in an organization

client.community.reputation.directory()

Reputation_forUser

GET /orgs/{orgId}/community/reputation/{userId}

Get the reputation

client.community.reputation.forUser()

Reputation_setLevel

POST /orgs/{orgId}/community/reputation/{userId}/level

Create the level in an organization

client.community.reputation.setLevel()

Reputation_unfurlLink

GET /orgs/{orgId}/community/unfurl

Get the unfurl in an organization

client.community.reputation.unfurlLink()

Screening

Operation

Request

What it does

Shortcuts

Screening_list

GET /orgs/{orgId}/screening/emails

List emails in an organization

client.orgs.screening.list()

Screening_add

POST /orgs/{orgId}/screening/emails

Create an email in an organization

client.orgs.screening.add()

Screening_remove

DELETE /orgs/{orgId}/screening/emails/{id}

Delete the email

client.orgs.screening.remove()

Service Account

Operation

Request

What it does

Shortcuts

ServiceAccount_list

GET /orgs/{orgId}/service-accounts

List service accounts in an organization

forumulate service-accounts list<br>client.tokens.serviceAccounts.list()

ServiceAccount_create

POST /orgs/{orgId}/service-accounts

Create a service account in an organization

forumulate service-accounts create<br>client.tokens.serviceAccounts.create()

ServiceAccount_rename

PATCH /orgs/{orgId}/service-accounts/{id}

Update the service account

forumulate service-accounts rename<br>client.tokens.serviceAccounts.rename()

ServiceAccount_revoke

DELETE /orgs/{orgId}/service-accounts/{id}

Delete the service account

forumulate service-accounts revoke<br>client.tokens.serviceAccounts.revoke()

ServiceAccount_tokens

GET /orgs/{orgId}/service-accounts/{id}/tokens

List tokens in an organization

forumulate service-accounts tokens list<br>client.tokens.serviceAccounts.tokens()

ServiceAccount_mint

POST /orgs/{orgId}/service-accounts/{id}/tokens

Create a token in an organization

forumulate service-accounts tokens create<br>client.tokens.serviceAccounts.mint()

ServiceAccount_revokeToken

DELETE /orgs/{orgId}/service-accounts/{id}/tokens/{tokenId}

Delete the token

forumulate service-accounts tokens revoke<br>client.tokens.serviceAccounts.revokeToken()

Settings

Operation

Request

What it does

Shortcuts

Settings_list

GET /orgs/{orgId}/settings

Every org setting, with its value and its bounds

client.orgs.settings.list()

Settings_one

GET /orgs/{orgId}/settings/{key}

Read one org setting

client.orgs.settings.one()

Settings_set

PUT /orgs/{orgId}/settings/{key}

Set one org setting

client.orgs.settings.set()

Settings_reset

DELETE /orgs/{orgId}/settings/{key}

Reset one org setting to its default

client.orgs.settings.reset()

Spam Service

Operation

Request

What it does

Shortcuts

SpamService_get

GET /orgs/{orgId}/forum/spam-service

Get the spam service in an organization

client.spamService.get()

SpamService_set

PUT /orgs/{orgId}/forum/spam-service

Replace the spam service in an organization

client.spamService.set()

SpamService_clear

DELETE /orgs/{orgId}/forum/spam-service

Delete the spam service in an organization

client.spamService.clear()

SpamService_test

POST /orgs/{orgId}/forum/spam-service/test

Test the spam service

client.spamService.test()

Topic Escalation

Operation

Request

What it does

Shortcuts

TopicEscalation_list

GET /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/escalations

List escalations in a space

client.topicEscalation.list()

TopicEscalation_escalate

POST /orgs/{orgId}/spaces/{spaceId}/forum/{topicId}/escalations

Create an escalation in a space

client.topicEscalation.escalate()

The Forumulate teamUpdated