# Run a community with a server list, forum and guides

> Serve a server list, a forum, guides and your Discord chat on your storefront, and moderate what your customers post.

Source: https://www.coritan.com/docs/organizations/storefront/community/

Your storefront can host a community for your customers and their players: a list of your customers' servers, a forum, a library of guides, and the public channels of your Discord server. Visitors read all of it without signing in. Customers post with their own token, and your team moderates what they post in the [staff console](/docs/organizations/staff-console/).

Every route on this page is under `https://api.coritan.com/api/v1/orgs/{org_slug}`. [With the API](/docs/organizations/storefront/community/#with-the-api) says which credential each group of routes takes.

## Before you begin

- To show your Discord chat, connect a Discord bot to your organization as [Connect a Discord server](/docs/organizations/integrations/discord/) describes. That needs the `owner` or `admin` role.
- To let customers post, sign them in as [Sign customers in to your storefront](/docs/organizations/storefront/customer-sign-in/) describes.
- To moderate, a member needs Tier 1 support or a higher role. [Moderate the community](/docs/organizations/storefront/community/#moderate-the-community) lists the lowest role for each task.

## Turn the community on

Coritan turns the server list, the forum and the guides on for your organization, and sets their options, such as the forum's boards, the tags a server can carry and the length limits. You turn the chat on yourself.

1. Ask [support](https://www.coritan.com/dashboard/support) to turn on the parts you want. Until a part is on, its routes answer `404`.
2. To show your Discord chat, go to [Organizations](https://www.coritan.com/dashboard/organizations), open your organization, choose **Integrations**, then **Discord**. Under **Community chat**, tick **Mirror public channels on the storefront**, then choose **Save Discord settings**. [Connect the bot](/docs/organizations/integrations/discord/#connect-the-bot) covers the **Invite link** and **Hidden channels** fields.
3. Read `GET /storefront/branding`, and check that each part you asked for has `enabled: true` in its block.

## Build the community pages

`GET /storefront/branding` carries a block for each part, with what your pages need to show it. Read the switches and limits from it rather than writing them into your site, because Coritan can change them. [Show your brand](/docs/organizations/storefront/storefront-api/#show-your-brand) covers the rest of the answer.

| Block | What it holds |
| --- | --- |
| `public_server_list` | `enabled`, the `path_prefix` your site serves the community under, the `categories` and `editions` a server is listed under, the `tags` a customer can choose and `max_tags`. |
| `community_forum` | `enabled` and the forum's paths, such as `forum_base` and `profile_base`. Switches for what members can do: `allow_customer_threads`, `allow_customer_replies`, `nested_replies`, `voting_enabled`, `downvotes_enabled`, `reactions_enabled`, `solutions_enabled`, `wall_enabled`, `member_directory_enabled` and `profile_images_enabled`. Limits: `max_body_chars`, `max_bio_chars`, `max_tags`, `max_reply_depth` and `bump_cooldown_hours`. Lists: `reactions`, `thread_kinds`, `report_categories`, `roles` and `role_labels`. |
| `community_knowledgebase` | `enabled` and `guides_base`, the `categories` and `difficulties` a guide can take, the switches `comments_enabled`, `allow_customer_contrib`, `helpful_votes_enabled` and `allow_cover_images`, and the limits `max_body_chars`, `max_summary_chars` and `max_tags`. |
| `community_chat` | `enabled`, and the `invite_url` of your Discord server. |

`GET /storefront/community/overview` returns a community home page in one call: `stats`, `servers`, `guides`, `forum`, `members` and `chat`, with the counts and names a hub shows. It carries no images, so the page can paint at once. Add `include=pages` to get the first page of each tab as well, 24 items each, with their images.

`GET /storefront/community/stats` returns the counters on their own, for a live figure: `total_accounts`, `total_servers`, `total_servers_created` and `total_players`.

## List your customers' servers

The server list shows the servers your customers choose to list, each with a page of its own. The customer who owns the service creates its listing with their token.

1. Read the listing with `GET /portal/services/{service_id}/community-listing`, where `service_id` is the service's `id` from `GET /portal/services`. `feature_enabled` says whether the list is on. The answer holds the `editions`, `tags` and `max_tags` to offer, the server's `join_address` and `players_online`, and the `listing`, which is `null` until the first save.
2. Save the listing:

   ```bash
   curl -X PUT "https://api.coritan.com/api/v1/orgs/acme/portal/services/41/community-listing" \
     -H "Authorization: Bearer $CUSTOMER_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"display_name": "Survival SMP", "slug": "survival-smp", "tagline": "Vanilla survival with land claims", "tags": ["survival"], "published": true}'
   ```

   The first save creates the listing from every field. Later saves change only the fields you send.

3. Show the customer their listing at `listing.public_path`, such as `/community/servers/survival-smp` on your site.

| Field | What it takes |
| --- | --- |
| `display_name` | Up to 120 characters. A new listing takes the service's hostname when you leave it out. |
| `slug` | The listing's address: 2–80 lowercase letters, digits and hyphens, unique in your organization. We make one from `display_name` when you leave it out. |
| `tagline`, `description` | Up to 200 and 8,000 characters. |
| `category` | One of the `editions`. Left out, it follows from the tags. |
| `tags` | Tags from your list, up to `max_tags`. |
| `website_url`, `discord_url` | `http` or `https` addresses, up to 500 characters. |
| `icon_data_uri`, `banner_data_uri`, `gallery` | PNG images as data URIs: an icon of up to 120,000 characters, a banner of up to 400,000, and up to 4 gallery images of up to 400,000 each. |
| `seo_title`, `seo_description` | The listing page's title and description for search engines. We keep the first 160 and 320 characters. |
| `show_player_count` | `false` hides how many players are online. It defaults to `true`. |
| `published` | `true` puts the listing on the public list. |

A listing can be published once it has at least one tag. When the answer's `require_gameproxy` is `true`, the server also needs a working join address. The listing shows the server's join address, or its custom domain when the owner linked one with `include_in_list` set, as [Link a custom domain](/docs/organizations/storefront/portal-servers/#link-a-custom-domain) describes.

A server's own panel has a shorter switch for the same listing, which [List the server in your directory](/docs/organizations/storefront/portal-servers/#list-the-server-in-your-directory) covers. [External servers](/docs/proxies/external-servers/) can be listed too, and show the players they reported at their last status check.

When your staff hold or hide a listing, `moderation` in the answer is `held` or `hidden`, and the listing stays off the public list whatever `published` says.

### Show the server list

`GET /storefront/community/servers` lists the published listings for anyone:

```bash
curl "https://api.coritan.com/api/v1/orgs/acme/storefront/community/servers?tag=survival&sort=players"
```

Filter with `q`, `category` and `tag`, sort with `sort` (`players`, `rating` or `newest`), and page with `page` and `page_size` (1–100, 24 by default). `GET /storefront/community/servers/{listing_slug}` returns one listing. Each carries its `join_address`, `players_online` (`null` when the owner hides it), `online`, `featured`, `average_rating` and `total_ratings`.

A signed-in customer rates a listing with `POST /storefront/community/servers/{listing_slug}/rate` and a `rating` from 1 to 5. A second rating replaces the first. Send the customer's token with `GET /storefront/community/servers/{listing_slug}`, and the answer includes their own rating as `user_rating`.

## Run the forum

The forum has boards of threads, and each thread is a `discussion`, `question`, `announcement` or `showcase`. Coritan sets up your boards when it turns the forum on. With none set, the forum has six: Announcements, where only forum administrators post, Help & Support, Guides & Tutorials, Server Showcase, Suggestions, and Off Topic, which search engines do not index. Votes, reactions, accepted answers, nested replies, the member directory and profile walls each have a switch in the `community_forum` block.

### Read the forum

These routes need no token, and the lists take `page` and `page_size`:

| Route | What it returns |
| --- | --- |
| `GET /storefront/community/forum` | The boards, with the counts a forum's front page shows. |
| `GET /storefront/community/forum/boards/{category_slug}` | A board's threads. `sort` is `hot` (the default), `new`, `top`, `active` or `unanswered`, and `q`, `tag` and `kind` narrow the list. |
| `GET /storefront/community/forum/threads` | Threads from every public board. `filter` is `latest` or `unanswered`. |
| `GET /storefront/community/forum/threads/{category_slug}/{thread_slug}` | A thread and its replies. `sort` is `best` (the default), `new`, `old` or `top`. |
| `GET /storefront/community/forum/search` | Threads and replies whose title or text matches `q`, 2–120 characters. `scope` is `all`, `threads` or `posts`. |
| `GET /storefront/community/forum/tags` | The tags in use, busiest first. `.../tags/{tag}` lists the threads with one tag. |
| `GET /storefront/community/members` | The member directory, when it is on. `sort` is `posts`, `threads`, `solutions`, `reactions`, `newest` or `active`. |
| `GET /storefront/community/members/{handle}` | A member's profile. `.../activity` lists their threads, replies or accepted answers by `kind`, and `.../wall` their wall. |

### Post in the forum

Posting takes the customer's token, and the routes are under `/portal/community/forum/`. Bodies are Markdown, up to `max_body_chars`, and a member mentions another with `@` and their handle. `POST /storefront/community/forum/preview` renders a draft as your site will show it, with the members it mentions in `mentions`.

| Route | What it does |
| --- | --- |
| `POST /threads` | Starts a thread from `category_slug`, `title` (3–200 characters), `body_markdown`, `kind` and `tags`. |
| `POST /threads/{thread_id}/posts` | Replies with `body_markdown`. With nested replies on, `parent_post_id` answers one reply. |
| `PUT /threads/{thread_id}`, `PUT /posts/{post_id}` | Edits the member's own thread or reply, with an optional `edit_reason`. |
| `DELETE /threads/{thread_id}`, `DELETE /posts/{post_id}` | Deletes the member's own thread or reply. Forum staff can delete anyone's, and only a forum administrator can delete a locked thread. |
| `POST /posts/{post_id}/vote` | Votes with `value` from `-1` to `1`. |
| `POST /posts/{post_id}/react` | Reacts with a `reaction_type` from `reactions`. |
| `POST /threads/{thread_id}/solution?post_id=...` | Accepts a reply as the answer. The thread's author and forum staff can, and `DELETE` clears it. |
| `POST /threads/{thread_id}/bump` | Moves the author's thread back to the top, once every `bump_cooldown_hours`. |
| `POST /threads/{thread_id}/subscription` | Follows a thread, or stops following it. `GET /subscriptions` lists followed threads with their unread posts. |
| `POST /reports` | Reports a thread, a post or a member, named by `thread_id`, `post_id` or `handle` in the query. The body takes a `category` from `report_categories` and a `reason` of up to 500 characters. |

`GET /portal/community/forum/me` returns the member's handle and forum role, their unread followed threads and, for forum staff, the number of open reports.

`PUT /portal/community/profile` changes the member's profile: `display_name` (2–64 characters), `biography` (up to `max_bio_chars`), `location` (up to 64), `website_url` and `signature` (up to 300 each), `avatar_data_uri` and `banner_data_uri` when profile images are on, `wall_enabled` and `index_opt_out`. A *wall* is where members post on each other's profiles. `POST /portal/community/members/{handle}/wall` takes up to 2,000 characters, and `POST /portal/community/wall/{wall_post_id}/comments` comments on a wall post. A member can write 20 wall posts and 60 wall comments an hour.

## Publish guides

Guides are articles written in Markdown, each with a page under `guides_base`. Customers write them when `allow_customer_contrib` is on, and a moderator approves each one before it goes live.

### Read guides

- `GET /storefront/community/guides` lists published guides. Filter with `q`, `category`, `tag` and `difficulty`, sort with `sort` (`views`, the default, `newest`, `featured` or `helpful`), and page with `page` and `page_size`.
- `GET /storefront/community/guides/{slug}` returns one guide in `content`, with its `helpful` votes, `related` guides and `view_count`. Views by the author and by moderators do not count.
- `GET /storefront/community/guides/{slug}/comments` lists a guide's comments. A signed-in customer comments with `POST` and `body_markdown`, up to 4,000 characters. When your guides hold comments for approval, a new comment's `status` is `pending` until a moderator approves it.
- `POST /storefront/community/guides/{slug}/helpful` with `helpful` set to `true` or `false` records the customer's vote, one per customer. `POST .../guides/{slug}/report` reports the guide, or one comment with `comment_id`, with a `reason` of up to 500 characters.

### Write a guide

1. Create the guide as the customer with `POST /portal/community/guides/articles`. It needs `title`, up to 200 characters, and `body_markdown`, up to `max_body_chars`. `slug`, `summary`, `category`, `difficulty`, `tags`, `game_slug`, `cover_data_uri`, `seo_title` and `seo_description` are optional. The guide is saved as a `draft`, and `submit` set to `true` sends it for review at once.
2. When the draft is ready, send it for review with `PUT /portal/community/guides/articles/{article_id}`. An edit is submitted unless it carries `submit: false`. Its `proposal_status` becomes `pending`, and we notify your guide moderators.
3. A moderator approves or rejects it. Approval publishes the guide at its `public_path`. A rejection comes back in `rejection_reason`, and the customer can edit the guide and submit it again.

Changing a published guide works the same way: the live version stays up until a moderator approves the proposed one. `GET .../articles/{article_id}/diff` returns the `live` and `proposed` versions with the `diff` between them, and `POST .../articles/{article_id}/proposal/withdraw` takes a proposal back.

`GET /portal/community/guides/articles` lists the customer's guides with their `status` (`draft`, `published` or `archived`) and `proposal_status` (`none`, `pending` or `rejected`). `GET /portal/community/guides/notifications` returns their 50 latest notifications.

`POST /storefront/community/guides/preview` renders Markdown as a guide will show it, with its table of contents in `toc`. A link keeps its address only when it is `http` or `https` or starts with `/` or `#`, and an image only when it is an `http` or `https` address or a PNG data URI.

> [!CAUTION]
> `DELETE /portal/community/guides/articles/{article_id}` deletes the customer's guide in any state, with every revision, comment, vote and report. It cannot be undone.

## Show your Discord chat

The chat mirrors your Discord server's public channels on your site. Anyone can read them, and a signed-in customer's messages appear in Discord under their username.

- A channel appears when Discord lets `@everyone` read it and send messages in it, unless it is in **Hidden channels**. Ticket channels never appear. We check the channels regularly and each time you save the Discord settings, and **Sync community channels** checks them now.
- `GET /storefront/community/chat/channels` lists the channels by `channel_id`, `name` and `topic`, with the `invite_url`, the longest message in `max_length`, and the limit in `rate_limit_seconds` and `rate_limit_hint`.
- `GET /storefront/community/chat/messages` returns the latest messages of the channel in `channel_id`: `limit` of them (1–100, 50 by default), or older ones with `before_id`. To poll, send `after_id` set to the `latest_id` of the last answer, and you get only what is new.
- `POST /storefront/community/chat/send` sends `body`, up to 500 characters, to `channel_id`. A customer can send one message every 8 seconds from the web. Send a `client_nonce` of your own, up to 64 characters, so that a retry returns the first message instead of sending a second.
- `GET /storefront/community/chat/status` returns the customer's `handle`, and the seconds before they can send again in `cooldown_seconds` and `muted_seconds`.

Messages from your site reach Discord through a webhook, under the customer's username. When the bot lacks Discord's Manage Webhooks permission, it posts them itself, with the username in front. We keep up to 500 messages per channel, none older than 30 days.

## Customer names in the community

Posts, messages and profiles show each customer's username, which the community calls their *handle*. [Register a customer](/docs/organizations/storefront/customer-sign-in/#register-a-customer) gives its rules, and `PATCH /auth/me` with `chat_handle` changes it. While a signed-in customer types a new one, `GET /storefront/community/handle-available?handle=...` answers `available`, with the `reason` when it is not. In the forum, a member can also set a `display_name`, which cannot be another member's handle.

## Moderate the community

Your team moderates on the staff console's community page at `/staff/community`, which works through the staff routes under `/staff/community/`. `GET /staff/community/summary` counts what is waiting. The lowest role for each task:

| Task | Lowest role |
| --- | --- |
| Read forum reports and server listings | Tier 1 support |
| Dismiss a report, quarantine what it points at, or mute its author for up to 7 days | Tier 1 support |
| Hold a listing for review | Tier 1 support |
| Restore or remove reported content | Tier 2 support |
| Hide, show, release or delete a listing | Tier 2 support |
| Pin, lock or hide a thread | Tier 3 support |
| Find members, change their forum role and suspend them | Tier 3 support |
| Review guides, guide comments and guide reports | Tier 3 support |
| Feature a listing, or mute for longer than 7 days | Tier 3 support |
| Add or remove guide moderators | Admin |

Billing, Admin and Owner can do everything Tier 3 support can. Every action goes on the [audit log](/docs/organizations/audit-log/) with a name that starts with `community.`, such as `community.content_removed` or `community.listing_held`.

### Work through forum reports

`GET /staff/community/forum/reports` lists the `open` reports, and `status` set to `quarantined`, `resolved` or `all` shows the others. Each report names the member behind the content and whether they are muted. Every open report on the same content moves with the one you act on.

- `POST /staff/community/forum/reports/{report_id}/resolve` dismisses the report, with an optional `resolution`, and leaves the content as it is.
- `POST .../quarantine` hides the content, with an optional `note`, until Tier 2 support decides. `.../restore` puts it back, and `.../remove` deletes it.
- `POST .../remove` also works on content that is still up. The content leaves every list and search engines, and we keep it for the record.
- `POST .../mute` with `hours` and an optional `reason` stops the author posting in the forum and the chat. A longer mute already running stays as it is. To lift a mute, or set one in minutes, use `/chat-mute` as [Change the account](/docs/organizations/staff-console/customers/#change-the-account) describes.

### Forum members and roles

Every member holds a forum role. Customers hold `member`, `premium`, `supreme` or `ultimate`, and the staff roles above them are `support`, `supervisor`, `architect` and `administrator`, from the lowest. `role_labels` in the branding block holds the name your site shows for each.

- `GET /staff/community/forum/members` finds members: `q` matches a handle or an email address, and `only` is `all`, `staff` or `suspended`. `assignable` lists the roles you can give.
- `POST /staff/community/forum/members/{handle}/role` with `role` changes a member's role.
- `POST /staff/community/forum/members/{handle}/suspend` with `suspend` and a `reason` of up to 300 characters suspends a member. `suspend` set to `false` lifts it and gives back their earlier role.

In the forum, your staff act as a `supervisor`: they can give the roles below it, and act on members who hold them. Owners and admins can give any role.

A customer with a staff role moderates from your site with their own token, under `/portal/community/forum/moderation/`. They read the `reports` and resolve one with `action` set to `none`, `remove` or `suspend`. With `threads/{thread_id}/flags` they pin, lock or move a thread, or mark it as a duplicate of another. They can change the roles of members below their own. Other members get `403 Forum staff only`.

### Moderate listings

`GET /staff/community/listings` lists every listing with its owner. `only` is `all`, `published`, `hidden`, `held` or `featured`, and `q` searches.

- `POST /staff/community/listings/{listing_id}/hold` with a `reason` of 3–300 characters takes a listing off the list until Tier 2 support decides.
- `PATCH /staff/community/listings/{listing_id}` with `hidden` and an optional `reason` hides or shows a listing, whatever its owner chose, and ends a hold. `featured` puts a listing at the top of the list.
- `POST .../release` puts a held listing back as its owner left it.

> [!CAUTION]
> `DELETE /staff/community/listings/{listing_id}` deletes the listing and its ratings, and cannot be undone. The owner can list the server again from the start, so hide a listing that should stay off the list.

### Review guides

Tier 3 support reviews guides from `GET /staff/community/guides/queue`, and approves or rejects guides, comments and guide reports under `/staff/community/guides/`. Rejecting a guide needs a `reason` of 3–500 characters, which the author reads.

*Guide moderators* are customers you trust to do the same from your site. An admin adds one with `POST /staff/community/guides/moderators` and the customer's `customer_id`, and removes one with `DELETE .../moderators/{customer_id}`. A moderator works through `GET /portal/community/guides/moderation` with their own token, and approves or rejects under `/portal/community/guides/moderation/`. Other customers get `403 Moderator access required`.

### The moderation filter

Forum posts, guide comments and chat messages go through a moderation filter. Text with a slur is refused with `422`. In chat messages and guide comments, other words the filter lists are replaced with asterisks. A customer the chat refuses more than three times in an hour is muted there for an hour. Usernames are held to the same filter. Ask [support](https://www.coritan.com/dashboard/support) to add words your community should not see.

## Keep the forum in search engines

When Coritan serves your storefront's site, its sitemap and `llms.txt` list the forum's best threads. We score each thread and member page, and the score puts it in one of three tiers:

| Tier | What it means |
| --- | --- |
| `excluded` | Kept out of search engines. |
| `index` | In the sitemap, highest scores first. |
| `llms` | Also in `llms.txt`, with the accepted answer. It needs a higher score, and an accepted answer or a reply from forum staff. |

A thread scores for how much it says, its replies and the people taking part, its votes, reactions and views, whether it was answered, and how recently it was active. Threads on a board that search engines do not index stay `excluded`, and a member can keep their own profile out with `index_opt_out`. We score a thread again each time it changes, such as a reply, a vote, an accepted answer or a moderator's action.

An owner or admin reads the totals, the reasons threads are left out and the scoring policy with `GET /admin/community/forum/seo`. `POST /admin/community/forum/seo/preview` with `thread_id` or `handle` explains one verdict, and `POST /admin/community/forum/seo/rescore` scores every thread and profile again.

## Result

`GET /storefront/branding` shows `enabled: true` for each part you turned on, and its public routes answer anyone. Customers list their servers, post, write guides and chat from your site, and what they report reaches your team on the staff console's community page.

## Troubleshooting

`404 Community forum is not enabled`, `Community guides are not enabled` or `Community server list is not enabled`
: That part is off for your organization. Ask [support](https://www.coritan.com/dashboard/support) to turn it on.

`The community forum is not enabled for this brand` or `Community guides are not enabled for this brand`
: A staff route for a part that is off. Ask support to turn it on.

`404 Community chat is not enabled`
: Tick **Mirror public channels on the storefront** in your Discord settings, and check that **Integration enabled** is ticked.

The chat shows no channels
: A channel shows only when Discord lets `@everyone` read it and send messages in it, and it is not in **Hidden channels**. After you change a channel's permissions in Discord, choose **Sync community channels**.

`No Discord server configured`
: Syncing the channels needs your server's ID. Enter the **Server (guild) ID** and save.

`403 Support access required`, `403 Tier 2 support access required` or `403 Admin access required`
: The member's role is below what the task needs. [Moderate the community](/docs/organizations/storefront/community/#moderate-the-community) lists the lowest role for each.

`Your tier mutes for up to 7 days; ask Tier 3 for longer`
: Tier 1 and Tier 2 support mute for up to 168 hours. Ask a member with Tier 3 support or a higher role.

`Featuring a listing is for Tier 3`
: Ask a member with Tier 3 support or a higher role to feature it.

`This report's content is quarantined; restore it or remove it instead`
: A quarantined report closes when Tier 2 support restores or removes the content.

`Publishing requires at least one tag`
: Add a tag from your list to `tags`.

`Publishing requires an active join address for this server`
: Your list takes only servers that players can join. Publish once the server's join address is active.

`That community URL slug is already taken`
: Another listing in your organization uses that `slug`. Choose another.

`429 You are posting too quickly. Try again a little later.`
: The member passed an hourly limit for threads, replies, wall posts or wall comments.

`429 You are muted in the community for another …`
: Your staff muted the member. `Retry-After` gives the seconds left.

`403 Your forum access is suspended.`
: Your staff suspended the member from the forum. When they gave a reason, the message is the reason instead.

`422 That message breaks the community rules. Keep it civil and try again.`
: The moderation filter refused the text. In the chat, more than three refusals in an hour mute the customer for an hour.

`429 You cannot post in community chat right now. Try again in …`
: The customer is muted in the chat. `muted_seconds` in `GET /storefront/community/chat/status` counts down.

`429` with `You can send one message every 8 seconds from the web. …`
: The customer sent a message less than 8 seconds ago. Wait for `Retry-After`, or for `cooldown_seconds` from `chat/status` to reach `0`.

`Invite links to other servers are not allowed here.`
: Chat messages cannot carry a Discord invite link.

`Keep it under 500 characters. …`
: Chat messages take up to 500 characters. Read `max_length` from `chat/channels` and hold your composer to it.

`403 Customer contributions are disabled`
: Your guides do not take guides from customers. Ask support to turn contributions on.

`A proposal is already pending validation`
: The guide has an edit waiting for a moderator. Withdraw it with `POST .../proposal/withdraw`, or wait for the decision.

`403 Moderator access required` or `403 Forum staff only`
: The customer is not a guide moderator, or holds no staff role in the forum.

## Related

- [Build a storefront on the Organization API](/docs/organizations/storefront/)
- [Show your catalogue with the Storefront API](/docs/organizations/storefront/storefront-api/)
- [Let customers run their servers](/docs/organizations/storefront/portal-servers/)
- [Connect a Discord server](/docs/organizations/integrations/discord/)
- [The staff console](/docs/organizations/staff-console/)
- [Organization roles and permissions](/docs/organizations/roles-and-permissions/)
- [Read the organization audit log](/docs/organizations/audit-log/)

## With the API

Each group of routes takes its own credential, sent as `Authorization: Bearer`:

| Routes | Credential |
| --- | --- |
| `/storefront/community/...` | None to read. Rating a server, commenting on a guide, voting on it or reporting it, sending a chat message, `chat/status` and `handle-available` take the customer's token, `$CUSTOMER_TOKEN`. |
| `/portal/community/...` and `/portal/services/{service_id}/community-listing` | The customer's token. |
| `/staff/community/...` | A member's console session or Coritan access token, `$STAFF_TOKEN`, as [The staff console](/docs/organizations/staff-console/#with-the-api) explains. |
| `/admin/community/...` | An owner's or admin's Coritan access token, `$CORITAN_TOKEN`. |

Start a thread as a customer:

```bash
curl -X POST "https://api.coritan.com/api/v1/orgs/acme/portal/community/forum/threads" \
  -H "Authorization: Bearer $CUSTOMER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"category_slug": "help", "title": "Players cannot join after the 1.21 update", "body_markdown": "Since the update, players are disconnected as they join. What should I change?", "kind": "question"}'
```

Quarantine what a report points at, as a member with Tier 1 support or a higher role:

```bash
curl -X POST "https://api.coritan.com/api/v1/orgs/acme/staff/community/forum/reports/318/quarantine" \
  -H "Authorization: Bearer $STAFF_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"note": "Advertises another host"}'
```

The answer names what was hidden, such as `{"ok": true, "quarantined": "post", "id": 9051}`.

Explain why a thread is in search engines or left out, as an owner or admin:

```bash
curl -X POST "https://api.coritan.com/api/v1/orgs/acme/admin/community/forum/seo/preview?thread_id=2207" \
  -H "Authorization: Bearer $CORITAN_TOKEN"
```

An owner or admin can also manage guide moderators and approve or reject guides under `/admin/community/guides/`. The staff routes record each decision in the audit log, and the admin routes do not.

The [API reference](/docs/api/reference/organizations/) lists every route with its parameters and answers:

| Routes | Reference |
| --- | --- |
| `/storefront/community/...` | [Storefront](/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-overview) |
| `/portal/community/...` | [Customer portal community](/docs/api/reference/organizations/customer-portal/community/) |
| `/portal/services/{service_id}/community-listing` | [Customer portal services](/docs/api/reference/organizations/customer-portal/services/#op-put-api-v1-orgs-org-slug-portal-services-service-id-community-listing) |
| `/staff/community/...` | [Staff community](/docs/api/reference/organizations/org-staff-community/), with the forum member routes under [Staff forum members](/docs/api/reference/organizations/organizations-members/staff/#op-get-api-v1-orgs-org-slug-staff-community-forum-members) |
| `/admin/community/forum/...` | [Community forum](/docs/api/reference/organizations/org-community-forum/) |
| `/admin/community/guides/...` | [Community guides](/docs/api/reference/organizations/org-community-guides/) |

## API

- `GET /api/v1/orgs/{org_slug}/storefront/community/chat/channels`: The public channels, and how to join the Discord properly (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-chat-channels)
- `GET /api/v1/orgs/{org_slug}/storefront/community/chat/messages`: A window of the mirror (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-chat-messages)
- `POST /api/v1/orgs/{org_slug}/storefront/community/chat/send`: Relay one message into Discord under the sender's display name (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-post-api-v1-orgs-org-slug-storefront-community-chat-send)
- `GET /api/v1/orgs/{org_slug}/storefront/community/chat/status`: The remaining wait, mute, and handle after a refresh or a new tab (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-chat-status)
- `GET /api/v1/orgs/{org_slug}/storefront/community/forum`: The board list, plus the counters a forum landing page shows (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-forum)
- `GET /api/v1/orgs/{org_slug}/storefront/community/forum/boards/{category_slug}`: Board threads (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-forum-boards-category-slug)
- `POST /api/v1/orgs/{org_slug}/storefront/community/forum/preview`: Preview post (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-post-api-v1-orgs-org-slug-storefront-community-forum-preview)
- `GET /api/v1/orgs/{org_slug}/storefront/community/forum/search`: Title and body search (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-forum-search)
- `GET /api/v1/orgs/{org_slug}/storefront/community/forum/tags`: The tags in use, busiest first, each with the page that lists it (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-forum-tags)
- `GET /api/v1/orgs/{org_slug}/storefront/community/forum/tags/{tag}`: Every public thread carrying one tag, across boards (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-forum-tags-tag)
- `GET /api/v1/orgs/{org_slug}/storefront/community/forum/threads`: Threads across every public board (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-forum-threads)
- `GET /api/v1/orgs/{org_slug}/storefront/community/forum/threads/{category_slug}/{thread_slug}`: Thread detail (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-forum-threads-category-slug-thread)
- `GET /api/v1/orgs/{org_slug}/storefront/community/guides`: List guides (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-guides)
- `POST /api/v1/orgs/{org_slug}/storefront/community/guides/preview`: Preview markdown (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-post-api-v1-orgs-org-slug-storefront-community-guides-preview)
- `GET /api/v1/orgs/{org_slug}/storefront/community/guides/{slug}`: Get guide (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-guides-slug)
- `GET /api/v1/orgs/{org_slug}/storefront/community/guides/{slug}/comments`: List comments (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-guides-slug-comments)
- `POST /api/v1/orgs/{org_slug}/storefront/community/guides/{slug}/comments`: Post comment (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-post-api-v1-orgs-org-slug-storefront-community-guides-slug-comments)
- `POST /api/v1/orgs/{org_slug}/storefront/community/guides/{slug}/helpful`: Vote helpful (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-post-api-v1-orgs-org-slug-storefront-community-guides-slug-helpful)
- `POST /api/v1/orgs/{org_slug}/storefront/community/guides/{slug}/report`: Report guide (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-post-api-v1-orgs-org-slug-storefront-community-guides-slug-report)
- `GET /api/v1/orgs/{org_slug}/storefront/community/handle-available`: Whether a display name can be taken, and why not when it cannot (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-handle-available)
- `GET /api/v1/orgs/{org_slug}/storefront/community/members`: The member list (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-members)
- `GET /api/v1/orgs/{org_slug}/storefront/community/members/{handle}`: Member profile (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-members-handle)
- `GET /api/v1/orgs/{org_slug}/storefront/community/members/{handle}/activity`: A page of one member's threads, replies or accepted answers (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-members-handle-activity)
- `GET /api/v1/orgs/{org_slug}/storefront/community/members/{handle}/wall`: Member wall (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-members-handle-wall)
- `GET /api/v1/orgs/{org_slug}/storefront/community/overview`: The community index; with include=pages, each tab's first page as well (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-overview)
- `GET /api/v1/orgs/{org_slug}/storefront/community/servers`: List community servers (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-servers)
- `GET /api/v1/orgs/{org_slug}/storefront/community/servers/{listing_slug}`: Get community server (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-servers-listing-slug)
- `POST /api/v1/orgs/{org_slug}/storefront/community/servers/{listing_slug}/rate`: Rate community server (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-post-api-v1-orgs-org-slug-storefront-community-servers-listing-slug-rate)
- `GET /api/v1/orgs/{org_slug}/storefront/community/stats`: Homepage tiles: live totals plus this org's Coritan counts (https://www.coritan.com/docs/api/reference/organizations/storefront/storefront/#op-get-api-v1-orgs-org-slug-storefront-community-stats)
- `GET /api/v1/orgs/{org_slug}/portal/community/forum/me`: Forum viewer summary (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-get-api-v1-orgs-org-slug-portal-community-forum-me)
- `POST /api/v1/orgs/{org_slug}/portal/community/forum/moderation/members/{handle}/role`: Set member role (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-forum-moderation-members-handle-role)
- `POST /api/v1/orgs/{org_slug}/portal/community/forum/moderation/members/{handle}/suspend`: Suspend member (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-forum-moderation-members-handle-suspe)
- `GET /api/v1/orgs/{org_slug}/portal/community/forum/moderation/reports`: Moderation reports (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-get-api-v1-orgs-org-slug-portal-community-forum-moderation-reports)
- `POST /api/v1/orgs/{org_slug}/portal/community/forum/moderation/reports/{report_id}/resolve`: Close a report, optionally acting on what it pointed at (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-forum-moderation-reports-report-id-re)
- `POST /api/v1/orgs/{org_slug}/portal/community/forum/moderation/threads/{thread_id}/flags`: Pin, lock, move or mark a thread as a duplicate (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-forum-moderation-threads-thread-id-fl)
- `PUT /api/v1/orgs/{org_slug}/portal/community/forum/posts/{post_id}`: Update post (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-put-api-v1-orgs-org-slug-portal-community-forum-posts-post-id)
- `DELETE /api/v1/orgs/{org_slug}/portal/community/forum/posts/{post_id}`: Delete post (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-delete-api-v1-orgs-org-slug-portal-community-forum-posts-post-id)
- `POST /api/v1/orgs/{org_slug}/portal/community/forum/posts/{post_id}/react`: React to post (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-forum-posts-post-id-react)
- `POST /api/v1/orgs/{org_slug}/portal/community/forum/posts/{post_id}/vote`: Vote post (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-forum-posts-post-id-vote)
- `POST /api/v1/orgs/{org_slug}/portal/community/forum/reports`: Report content (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-forum-reports)
- `GET /api/v1/orgs/{org_slug}/portal/community/forum/subscriptions`: Threads the member follows, with how many posts they have not seen (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-get-api-v1-orgs-org-slug-portal-community-forum-subscriptions)
- `POST /api/v1/orgs/{org_slug}/portal/community/forum/subscriptions/read`: Mark subscriptions read (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-forum-subscriptions-read)
- `POST /api/v1/orgs/{org_slug}/portal/community/forum/threads`: Create thread (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-forum-threads)
- `PUT /api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}`: Update thread (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-put-api-v1-orgs-org-slug-portal-community-forum-threads-thread-id)
- `DELETE /api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}`: Delete thread (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-delete-api-v1-orgs-org-slug-portal-community-forum-threads-thread-id)
- `POST /api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}/bump`: Bump thread (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-forum-threads-thread-id-bump)
- `POST /api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}/posts`: Create post (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-forum-threads-thread-id-posts)
- `POST /api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}/solution`: Accept a reply as the answer (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-forum-threads-thread-id-solution)
- `DELETE /api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}/solution`: Clear solution (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-delete-api-v1-orgs-org-slug-portal-community-forum-threads-thread-id-solution)
- `POST /api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}/subscription`: Toggle subscription (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-forum-threads-thread-id-subscription)
- `DELETE /api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}/subscription`: Stop following, idempotently (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-delete-api-v1-orgs-org-slug-portal-community-forum-threads-thread-id-subscriptio)
- `GET /api/v1/orgs/{org_slug}/portal/community/guides/articles`: My articles (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-get-api-v1-orgs-org-slug-portal-community-guides-articles)
- `POST /api/v1/orgs/{org_slug}/portal/community/guides/articles`: Create article (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-guides-articles)
- `GET /api/v1/orgs/{org_slug}/portal/community/guides/articles/{article_id}`: Get my article (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-get-api-v1-orgs-org-slug-portal-community-guides-articles-article-id)
- `PUT /api/v1/orgs/{org_slug}/portal/community/guides/articles/{article_id}`: Propose or update (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-put-api-v1-orgs-org-slug-portal-community-guides-articles-article-id)
- `DELETE /api/v1/orgs/{org_slug}/portal/community/guides/articles/{article_id}`: The author removing their own guide, whatever state it is in (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-delete-api-v1-orgs-org-slug-portal-community-guides-articles-article-id)
- `GET /api/v1/orgs/{org_slug}/portal/community/guides/articles/{article_id}/diff`: Article diff (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-get-api-v1-orgs-org-slug-portal-community-guides-articles-article-id-diff)
- `POST /api/v1/orgs/{org_slug}/portal/community/guides/articles/{article_id}/proposal/withdraw`: Withdraw proposal (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-guides-articles-article-id-proposal-w)
- `POST /api/v1/orgs/{org_slug}/portal/community/guides/articles/{article_id}/propose`: Propose or update (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-guides-articles-article-id-propose)
- `GET /api/v1/orgs/{org_slug}/portal/community/guides/moderation`: Moderation queue (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-get-api-v1-orgs-org-slug-portal-community-guides-moderation)
- `POST /api/v1/orgs/{org_slug}/portal/community/guides/moderation/articles/{article_id}/approve`: Mod approve (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-guides-moderation-articles-article-id)
- `POST /api/v1/orgs/{org_slug}/portal/community/guides/moderation/articles/{article_id}/reject`: Mod reject (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-guides-moderation-articles-article-id)
- `POST /api/v1/orgs/{org_slug}/portal/community/guides/moderation/comments/{comment_id}/approve`: Mod approve comment (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-guides-moderation-comments-comment-id)
- `POST /api/v1/orgs/{org_slug}/portal/community/guides/moderation/comments/{comment_id}/reject`: Mod reject comment (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-guides-moderation-comments-comment-id)
- `POST /api/v1/orgs/{org_slug}/portal/community/guides/moderation/reports/{report_id}/resolve`: Close a report (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-guides-moderation-reports-report-id-r)
- `GET /api/v1/orgs/{org_slug}/portal/community/guides/notifications`: List notifications (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-get-api-v1-orgs-org-slug-portal-community-guides-notifications)
- `POST /api/v1/orgs/{org_slug}/portal/community/guides/notifications/{notification_id}/read`: Mark notification read (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-guides-notifications-notification-id)
- `POST /api/v1/orgs/{org_slug}/portal/community/members/{handle}/wall`: Create wall post (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-members-handle-wall)
- `GET /api/v1/orgs/{org_slug}/portal/community/profile`: Get own profile (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-get-api-v1-orgs-org-slug-portal-community-profile)
- `PUT /api/v1/orgs/{org_slug}/portal/community/profile`: Update own profile (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-put-api-v1-orgs-org-slug-portal-community-profile)
- `DELETE /api/v1/orgs/{org_slug}/portal/community/wall/comments/{comment_id}`: Delete wall comment (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-delete-api-v1-orgs-org-slug-portal-community-wall-comments-comment-id)
- `DELETE /api/v1/orgs/{org_slug}/portal/community/wall/{wall_post_id}`: Delete wall post (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-delete-api-v1-orgs-org-slug-portal-community-wall-wall-post-id)
- `POST /api/v1/orgs/{org_slug}/portal/community/wall/{wall_post_id}/comments`: Create wall comment (https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/#op-post-api-v1-orgs-org-slug-portal-community-wall-wall-post-id-comments)
- `GET /api/v1/orgs/{org_slug}/admin/community/forum/seo`: Org admin seo summary (https://www.coritan.com/docs/api/reference/organizations/org-community-forum/#op-get-api-v1-orgs-org-slug-admin-community-forum-seo)
- `POST /api/v1/orgs/{org_slug}/admin/community/forum/seo/preview`: Score one thread or member against the current policy, showing the working (https://www.coritan.com/docs/api/reference/organizations/org-community-forum/#op-post-api-v1-orgs-org-slug-admin-community-forum-seo-preview)
- `POST /api/v1/orgs/{org_slug}/admin/community/forum/seo/rescore`: Org admin rescore (https://www.coritan.com/docs/api/reference/organizations/org-community-forum/#op-post-api-v1-orgs-org-slug-admin-community-forum-seo-rescore)
- `POST /api/v1/orgs/{org_slug}/admin/community/guides/articles/{article_id}/approve`: Org admin approve (https://www.coritan.com/docs/api/reference/organizations/org-community-guides/#op-post-api-v1-orgs-org-slug-admin-community-guides-articles-article-id-approve)
- `POST /api/v1/orgs/{org_slug}/admin/community/guides/articles/{article_id}/reject`: Org admin reject (https://www.coritan.com/docs/api/reference/organizations/org-community-guides/#op-post-api-v1-orgs-org-slug-admin-community-guides-articles-article-id-reject)
- `GET /api/v1/orgs/{org_slug}/admin/community/guides/moderators`: List moderators (https://www.coritan.com/docs/api/reference/organizations/org-community-guides/#op-get-api-v1-orgs-org-slug-admin-community-guides-moderators)
- `POST /api/v1/orgs/{org_slug}/admin/community/guides/moderators`: Add moderator (https://www.coritan.com/docs/api/reference/organizations/org-community-guides/#op-post-api-v1-orgs-org-slug-admin-community-guides-moderators)
- `DELETE /api/v1/orgs/{org_slug}/admin/community/guides/moderators/{org_customer_id}`: Remove moderator (https://www.coritan.com/docs/api/reference/organizations/org-community-guides/#op-delete-api-v1-orgs-org-slug-admin-community-guides-moderators-org-customer-id)
- `GET /api/v1/orgs/{org_slug}/staff/community/forum/members`: Staff forum members (https://www.coritan.com/docs/api/reference/organizations/organizations-members/staff/#op-get-api-v1-orgs-org-slug-staff-community-forum-members)
- `POST /api/v1/orgs/{org_slug}/staff/community/forum/members/{handle}/role`: Staff set forum role (https://www.coritan.com/docs/api/reference/organizations/organizations-members/staff/#op-post-api-v1-orgs-org-slug-staff-community-forum-members-handle-role)
- `POST /api/v1/orgs/{org_slug}/staff/community/forum/members/{handle}/suspend`: Staff suspend forum member (https://www.coritan.com/docs/api/reference/organizations/organizations-members/staff/#op-post-api-v1-orgs-org-slug-staff-community-forum-members-handle-suspend)
- `GET /api/v1/orgs/{org_slug}/staff/community/forum/reports`: The report queue (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-get-api-v1-orgs-org-slug-staff-community-forum-reports)
- `POST /api/v1/orgs/{org_slug}/staff/community/forum/reports/{report_id}/mute`: Mute the member behind a report in the forum and community chat (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-post-api-v1-orgs-org-slug-staff-community-forum-reports-report-id-mute)
- `POST /api/v1/orgs/{org_slug}/staff/community/forum/reports/{report_id}/quarantine`: Take the reported post or thread off the forum until Tier 2 decides (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-post-api-v1-orgs-org-slug-staff-community-forum-reports-report-id-quarantine)
- `POST /api/v1/orgs/{org_slug}/staff/community/forum/reports/{report_id}/remove`: Delete the reported post or thread, quarantined or still up, and close every report on it (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-post-api-v1-orgs-org-slug-staff-community-forum-reports-report-id-remove)
- `POST /api/v1/orgs/{org_slug}/staff/community/forum/reports/{report_id}/resolve`: Close a report without touching what it pointed at (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-post-api-v1-orgs-org-slug-staff-community-forum-reports-report-id-resolve)
- `POST /api/v1/orgs/{org_slug}/staff/community/forum/reports/{report_id}/restore`: Put quarantined content back: the report was not worth acting on (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-post-api-v1-orgs-org-slug-staff-community-forum-reports-report-id-restore)
- `POST /api/v1/orgs/{org_slug}/staff/community/forum/threads/{thread_id}/flags`: Pin, lock or hide a thread (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-post-api-v1-orgs-org-slug-staff-community-forum-threads-thread-id-flags)
- `POST /api/v1/orgs/{org_slug}/staff/community/guides/articles/{article_id}/approve`: Staff approve guide (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-post-api-v1-orgs-org-slug-staff-community-guides-articles-article-id-approve)
- `POST /api/v1/orgs/{org_slug}/staff/community/guides/articles/{article_id}/reject`: Staff reject guide (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-post-api-v1-orgs-org-slug-staff-community-guides-articles-article-id-reject)
- `POST /api/v1/orgs/{org_slug}/staff/community/guides/comments/{comment_id}/approve`: Staff approve guide comment (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-post-api-v1-orgs-org-slug-staff-community-guides-comments-comment-id-approve)
- `POST /api/v1/orgs/{org_slug}/staff/community/guides/comments/{comment_id}/reject`: Staff reject guide comment (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-post-api-v1-orgs-org-slug-staff-community-guides-comments-comment-id-reject)
- `GET /api/v1/orgs/{org_slug}/staff/community/guides/moderators`: Staff list guide moderators (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-get-api-v1-orgs-org-slug-staff-community-guides-moderators)
- `POST /api/v1/orgs/{org_slug}/staff/community/guides/moderators`: Staff add guide moderator (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-post-api-v1-orgs-org-slug-staff-community-guides-moderators)
- `DELETE /api/v1/orgs/{org_slug}/staff/community/guides/moderators/{customer_id}`: Staff remove guide moderator (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-delete-api-v1-orgs-org-slug-staff-community-guides-moderators-customer-id)
- `GET /api/v1/orgs/{org_slug}/staff/community/guides/queue`: Staff guides queue (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-get-api-v1-orgs-org-slug-staff-community-guides-queue)
- `POST /api/v1/orgs/{org_slug}/staff/community/guides/reports/{report_id}/resolve`: Staff resolve guide report (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-post-api-v1-orgs-org-slug-staff-community-guides-reports-report-id-resolve)
- `GET /api/v1/orgs/{org_slug}/staff/community/listings`: Staff listings (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-get-api-v1-orgs-org-slug-staff-community-listings)
- `PATCH /api/v1/orgs/{org_slug}/staff/community/listings/{listing_id}`: Staff moderate listing (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-patch-api-v1-orgs-org-slug-staff-community-listings-listing-id)
- `DELETE /api/v1/orgs/{org_slug}/staff/community/listings/{listing_id}`: Delete a listing and its ratings (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-delete-api-v1-orgs-org-slug-staff-community-listings-listing-id)
- `POST /api/v1/orgs/{org_slug}/staff/community/listings/{listing_id}/hold`: Take a listing off the public list until Tier 2 looks at it (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-post-api-v1-orgs-org-slug-staff-community-listings-listing-id-hold)
- `POST /api/v1/orgs/{org_slug}/staff/community/listings/{listing_id}/release`: The hold was not warranted: the listing goes back as its owner left it (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-post-api-v1-orgs-org-slug-staff-community-listings-listing-id-release)
- `GET /api/v1/orgs/{org_slug}/staff/community/summary`: Staff community summary (https://www.coritan.com/docs/api/reference/organizations/org-staff-community/#op-get-api-v1-orgs-org-slug-staff-community-summary)
- `GET /api/v1/orgs/{org_slug}/portal/services/{service_id}/community-listing`: Get community listing (https://www.coritan.com/docs/api/reference/organizations/customer-portal/services/#op-get-api-v1-orgs-org-slug-portal-services-service-id-community-listing)
- `PUT /api/v1/orgs/{org_slug}/portal/services/{service_id}/community-listing`: Upsert community listing (https://www.coritan.com/docs/api/reference/organizations/customer-portal/services/#op-put-api-v1-orgs-org-slug-portal-services-service-id-community-listing)
