# Organization API: Customer Portal: Community

> The 44 Organization API operations for community.

Source: https://www.coritan.com/docs/api/reference/organizations/customer-portal/community/

Part of [Customer Portal](/docs/api/reference/organizations/customer-portal/).

## Operations

| Method | Path | Summary |
| --- | --- | --- |
| GET | [`/api/v1/orgs/{org_slug}/portal/community/forum/me`](#op-get-api-v1-orgs-org-slug-portal-community-forum-me) | Forum viewer summary |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/forum/moderation/members/{handle}/role`](#op-post-api-v1-orgs-org-slug-portal-community-forum-moderation-members-handle-role) | Set member role |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/forum/moderation/members/{handle}/suspend`](#op-post-api-v1-orgs-org-slug-portal-community-forum-moderation-members-handle-suspe) | Suspend member |
| GET | [`/api/v1/orgs/{org_slug}/portal/community/forum/moderation/reports`](#op-get-api-v1-orgs-org-slug-portal-community-forum-moderation-reports) | Moderation reports |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/forum/moderation/reports/{report_id}/resolve`](#op-post-api-v1-orgs-org-slug-portal-community-forum-moderation-reports-report-id-re) | Close a report, optionally acting on what it pointed at |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/forum/moderation/threads/{thread_id}/flags`](#op-post-api-v1-orgs-org-slug-portal-community-forum-moderation-threads-thread-id-fl) | Pin, lock, move or mark a thread as a duplicate |
| PUT | [`/api/v1/orgs/{org_slug}/portal/community/forum/posts/{post_id}`](#op-put-api-v1-orgs-org-slug-portal-community-forum-posts-post-id) | Update post |
| DELETE | [`/api/v1/orgs/{org_slug}/portal/community/forum/posts/{post_id}`](#op-delete-api-v1-orgs-org-slug-portal-community-forum-posts-post-id) | Delete post |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/forum/posts/{post_id}/react`](#op-post-api-v1-orgs-org-slug-portal-community-forum-posts-post-id-react) | React to post |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/forum/posts/{post_id}/vote`](#op-post-api-v1-orgs-org-slug-portal-community-forum-posts-post-id-vote) | Vote post |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/forum/reports`](#op-post-api-v1-orgs-org-slug-portal-community-forum-reports) | Report content |
| GET | [`/api/v1/orgs/{org_slug}/portal/community/forum/subscriptions`](#op-get-api-v1-orgs-org-slug-portal-community-forum-subscriptions) | Threads the member follows, with how many posts they have not seen |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/forum/subscriptions/read`](#op-post-api-v1-orgs-org-slug-portal-community-forum-subscriptions-read) | Mark subscriptions read |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/forum/threads`](#op-post-api-v1-orgs-org-slug-portal-community-forum-threads) | Create thread |
| PUT | [`/api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}`](#op-put-api-v1-orgs-org-slug-portal-community-forum-threads-thread-id) | Update thread |
| DELETE | [`/api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}`](#op-delete-api-v1-orgs-org-slug-portal-community-forum-threads-thread-id) | Delete thread |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}/bump`](#op-post-api-v1-orgs-org-slug-portal-community-forum-threads-thread-id-bump) | Bump thread |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}/posts`](#op-post-api-v1-orgs-org-slug-portal-community-forum-threads-thread-id-posts) | Create post |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}/solution`](#op-post-api-v1-orgs-org-slug-portal-community-forum-threads-thread-id-solution) | Accept a reply as the answer |
| DELETE | [`/api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}/solution`](#op-delete-api-v1-orgs-org-slug-portal-community-forum-threads-thread-id-solution) | Clear solution |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}/subscription`](#op-post-api-v1-orgs-org-slug-portal-community-forum-threads-thread-id-subscription) | Toggle subscription |
| DELETE | [`/api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}/subscription`](#op-delete-api-v1-orgs-org-slug-portal-community-forum-threads-thread-id-subscriptio) | Stop following, idempotently |
| GET | [`/api/v1/orgs/{org_slug}/portal/community/guides/articles`](#op-get-api-v1-orgs-org-slug-portal-community-guides-articles) | My articles |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/guides/articles`](#op-post-api-v1-orgs-org-slug-portal-community-guides-articles) | Create article |
| GET | [`/api/v1/orgs/{org_slug}/portal/community/guides/articles/{article_id}`](#op-get-api-v1-orgs-org-slug-portal-community-guides-articles-article-id) | Get my article |
| PUT | [`/api/v1/orgs/{org_slug}/portal/community/guides/articles/{article_id}`](#op-put-api-v1-orgs-org-slug-portal-community-guides-articles-article-id) | Propose or update |
| DELETE | [`/api/v1/orgs/{org_slug}/portal/community/guides/articles/{article_id}`](#op-delete-api-v1-orgs-org-slug-portal-community-guides-articles-article-id) | The author removing their own guide, whatever state it is in |
| GET | [`/api/v1/orgs/{org_slug}/portal/community/guides/articles/{article_id}/diff`](#op-get-api-v1-orgs-org-slug-portal-community-guides-articles-article-id-diff) | Article diff |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/guides/articles/{article_id}/proposal/withdraw`](#op-post-api-v1-orgs-org-slug-portal-community-guides-articles-article-id-proposal-w) | Withdraw proposal |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/guides/articles/{article_id}/propose`](#op-post-api-v1-orgs-org-slug-portal-community-guides-articles-article-id-propose) | Propose or update |
| GET | [`/api/v1/orgs/{org_slug}/portal/community/guides/moderation`](#op-get-api-v1-orgs-org-slug-portal-community-guides-moderation) | Moderation queue |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/guides/moderation/articles/{article_id}/approve`](#op-post-api-v1-orgs-org-slug-portal-community-guides-moderation-articles-article-id) | Mod approve |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/guides/moderation/articles/{article_id}/reject`](#op-post-api-v1-orgs-org-slug-portal-community-guides-moderation-articles-article-id) | Mod reject |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/guides/moderation/comments/{comment_id}/approve`](#op-post-api-v1-orgs-org-slug-portal-community-guides-moderation-comments-comment-id) | Mod approve comment |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/guides/moderation/comments/{comment_id}/reject`](#op-post-api-v1-orgs-org-slug-portal-community-guides-moderation-comments-comment-id) | Mod reject comment |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/guides/moderation/reports/{report_id}/resolve`](#op-post-api-v1-orgs-org-slug-portal-community-guides-moderation-reports-report-id-r) | Close a report |
| GET | [`/api/v1/orgs/{org_slug}/portal/community/guides/notifications`](#op-get-api-v1-orgs-org-slug-portal-community-guides-notifications) | List notifications |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/guides/notifications/{notification_id}/read`](#op-post-api-v1-orgs-org-slug-portal-community-guides-notifications-notification-id) | Mark notification read |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/members/{handle}/wall`](#op-post-api-v1-orgs-org-slug-portal-community-members-handle-wall) | Create wall post |
| GET | [`/api/v1/orgs/{org_slug}/portal/community/profile`](#op-get-api-v1-orgs-org-slug-portal-community-profile) | Get own profile |
| PUT | [`/api/v1/orgs/{org_slug}/portal/community/profile`](#op-put-api-v1-orgs-org-slug-portal-community-profile) | Update own profile |
| DELETE | [`/api/v1/orgs/{org_slug}/portal/community/wall/comments/{comment_id}`](#op-delete-api-v1-orgs-org-slug-portal-community-wall-comments-comment-id) | Delete wall comment |
| DELETE | [`/api/v1/orgs/{org_slug}/portal/community/wall/{wall_post_id}`](#op-delete-api-v1-orgs-org-slug-portal-community-wall-wall-post-id) | Delete wall post |
| POST | [`/api/v1/orgs/{org_slug}/portal/community/wall/{wall_post_id}/comments`](#op-post-api-v1-orgs-org-slug-portal-community-wall-wall-post-id-comments) | Create wall comment |

### Forum viewer summary {#op-get-api-v1-orgs-org-slug-portal-community-forum-me}

`GET /api/v1/orgs/{org_slug}/portal/community/forum/me`

The signed-in member as the forum chrome sees them: handle, role,
unread followed threads, and the open report count for staff.

Also the one request a member who only reads makes with their token, so
``ensure_profile`` stamping them present here is what keeps *Active … ago*
honest for somebody who never posts; the storefront asks again when its
copy is a few minutes old.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Set member role {#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}/role`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `handle` | path | string | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `role` | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Suspend member {#op-post-api-v1-orgs-org-slug-portal-community-forum-moderation-members-handle-suspe}

`POST /api/v1/orgs/{org_slug}/portal/community/forum/moderation/members/{handle}/suspend`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `handle` | path | string | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `suspend` | boolean | no |
| `reason` | string or null | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Moderation reports {#op-get-api-v1-orgs-org-slug-portal-community-forum-moderation-reports}

`GET /api/v1/orgs/{org_slug}/portal/community/forum/moderation/reports`

#### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `org_slug` | path | string | yes |  |
| `status` | query | string | no | Default: `open`. |
| `page` | query | integer | no | Default: `1`. |
| `page_size` | query | integer | no | Default: `25`. |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Close a report, optionally acting on what it pointed at {#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/reports/{report_id}/resolve`

Close a report, optionally acting on what it pointed at.

The action and the closing are one request, so the queue cannot end up
with a removed post and a report still open against it. Nor can it end up
the other way round, which is worse: a dismissed report and content nobody
looked at.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `report_id` | path | integer | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `resolution` | string or null | no |
| `action` | string | no |
| `note` | string or null | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Pin, lock, move or mark a thread as a duplicate {#op-post-api-v1-orgs-org-slug-portal-community-forum-moderation-threads-thread-id-fl}

`POST /api/v1/orgs/{org_slug}/portal/community/forum/moderation/threads/{thread_id}/flags`

Pin, lock, move or mark a thread as a duplicate.

The duplicate marker is the one that matters for search: it takes the newer
thread out of the index and leaves the older one holding the ranking, which
is the opposite of what happens if you simply delete the repost.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `thread_id` | path | integer | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `is_sticky` | boolean or null | no |
| `is_locked` | boolean or null | no |
| `category_slug` | string or null | no |
| `duplicate_of_thread_id` | integer or null | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Update post {#op-put-api-v1-orgs-org-slug-portal-community-forum-posts-post-id}

`PUT /api/v1/orgs/{org_slug}/portal/community/forum/posts/{post_id}`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `post_id` | path | integer | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `body_markdown` | string | yes |
| `edit_reason` | string or null | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Delete post {#op-delete-api-v1-orgs-org-slug-portal-community-forum-posts-post-id}

`DELETE /api/v1/orgs/{org_slug}/portal/community/forum/posts/{post_id}`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `post_id` | path | integer | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### React to post {#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}/react`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `post_id` | path | integer | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `reaction_type` | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Vote post {#op-post-api-v1-orgs-org-slug-portal-community-forum-posts-post-id-vote}

`POST /api/v1/orgs/{org_slug}/portal/community/forum/posts/{post_id}/vote`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `post_id` | path | integer | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `value` | integer | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Report content {#op-post-api-v1-orgs-org-slug-portal-community-forum-reports}

`POST /api/v1/orgs/{org_slug}/portal/community/forum/reports`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `thread_id` | query | integer or null | no |
| `post_id` | query | integer or null | no |
| `handle` | query | string or null | no |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `category` | string | no |
| `reason` | string or null | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Threads the member follows, with how many posts they have not seen {#op-get-api-v1-orgs-org-slug-portal-community-forum-subscriptions}

`GET /api/v1/orgs/{org_slug}/portal/community/forum/subscriptions`

Threads the member follows, with how many posts they have not seen.

#### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `org_slug` | path | string | yes |  |
| `unread` | query | boolean | no | Default: `False`. |
| `page` | query | integer | no | Default: `1`. |
| `page_size` | query | integer | no | Default: `20`. |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Mark subscriptions read {#op-post-api-v1-orgs-org-slug-portal-community-forum-subscriptions-read}

`POST /api/v1/orgs/{org_slug}/portal/community/forum/subscriptions/read`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Create thread {#op-post-api-v1-orgs-org-slug-portal-community-forum-threads}

`POST /api/v1/orgs/{org_slug}/portal/community/forum/threads`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `category_slug` | string | yes |
| `title` | string | yes |
| `body_markdown` | string | yes |
| `kind` | string | no |
| `tags` | array of string or null | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Update thread {#op-put-api-v1-orgs-org-slug-portal-community-forum-threads-thread-id}

`PUT /api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `thread_id` | path | integer | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `title` | string or null | no |
| `body_markdown` | string or null | no |
| `tags` | array of string or null | no |
| `edit_reason` | string or null | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Delete thread {#op-delete-api-v1-orgs-org-slug-portal-community-forum-threads-thread-id}

`DELETE /api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `thread_id` | path | integer | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Bump thread {#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}/bump`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `thread_id` | path | integer | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Create post {#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}/posts`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `thread_id` | path | integer | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `body_markdown` | string | yes |
| `parent_post_id` | integer or null | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Accept a reply as the answer {#op-post-api-v1-orgs-org-slug-portal-community-forum-threads-thread-id-solution}

`POST /api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}/solution`

Accept a reply as the answer.

The reference forum has no such thing, which is why its question boards are
thousands of pages that end without one. An accepted answer is the single
strongest signal in the relevance score, and the only one that promotes a
thread into the assistant-facing export.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `thread_id` | path | integer | yes |
| `post_id` | query | integer | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Clear solution {#op-delete-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`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `thread_id` | path | integer | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Toggle subscription {#op-post-api-v1-orgs-org-slug-portal-community-forum-threads-thread-id-subscription}

`POST /api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}/subscription`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `thread_id` | path | integer | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Stop following, idempotently {#op-delete-api-v1-orgs-org-slug-portal-community-forum-threads-thread-id-subscriptio}

`DELETE /api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}/subscription`

Stop following, idempotently. The toggle is wrong for a list of
Unfollow buttons, where a double click would follow again.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `thread_id` | path | integer | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### My articles {#op-get-api-v1-orgs-org-slug-portal-community-guides-articles}

`GET /api/v1/orgs/{org_slug}/portal/community/guides/articles`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Create article {#op-post-api-v1-orgs-org-slug-portal-community-guides-articles}

`POST /api/v1/orgs/{org_slug}/portal/community/guides/articles`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `title` | string or null | no |
| `slug` | string or null | no |
| `summary` | string or null | no |
| `body_markdown` | string or null | no |
| `category` | string or null | no |
| `tags` | array of string or null | no |
| `difficulty` | string or null | no |
| `game_slug` | string or null | no |
| `cover_data_uri` | string or null | no |
| `seo_title` | string or null | no |
| `seo_description` | string or null | no |
| `change_note` | string or null | no |
| `submit` | boolean | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Get my article {#op-get-api-v1-orgs-org-slug-portal-community-guides-articles-article-id}

`GET /api/v1/orgs/{org_slug}/portal/community/guides/articles/{article_id}`

#### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `article_id` | path | integer | yes |  |
| `org_slug` | path | string | yes |  |
| `view` | query | string | no | Default: `live`. |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Propose or update {#op-put-api-v1-orgs-org-slug-portal-community-guides-articles-article-id}

`PUT /api/v1/orgs/{org_slug}/portal/community/guides/articles/{article_id}`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `article_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `title` | string or null | no |
| `slug` | string or null | no |
| `summary` | string or null | no |
| `body_markdown` | string or null | no |
| `category` | string or null | no |
| `tags` | array of string or null | no |
| `difficulty` | string or null | no |
| `game_slug` | string or null | no |
| `cover_data_uri` | string or null | no |
| `seo_title` | string or null | no |
| `seo_description` | string or null | no |
| `change_note` | string or null | no |
| `submit` | boolean | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### The author removing their own guide, whatever state it is in {#op-delete-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.

A hard delete, on purpose: the author is withdrawing something they
wrote, and a row kept around "archived" would still be theirs to find in
the library and staff's to stumble over in the queue. Revisions, comments,
votes, reports and notifications go with it. The rows are removed in
dependency order rather than left to the cascades, because the two
article→revision keys were added best-effort and may not exist on an
older database.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `article_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Article diff {#op-get-api-v1-orgs-org-slug-portal-community-guides-articles-article-id-diff}

`GET /api/v1/orgs/{org_slug}/portal/community/guides/articles/{article_id}/diff`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `article_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Withdraw proposal {#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}/proposal/withdraw`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `article_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Propose or update {#op-post-api-v1-orgs-org-slug-portal-community-guides-articles-article-id-propose}

`POST /api/v1/orgs/{org_slug}/portal/community/guides/articles/{article_id}/propose`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `article_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `title` | string or null | no |
| `slug` | string or null | no |
| `summary` | string or null | no |
| `body_markdown` | string or null | no |
| `category` | string or null | no |
| `tags` | array of string or null | no |
| `difficulty` | string or null | no |
| `game_slug` | string or null | no |
| `cover_data_uri` | string or null | no |
| `seo_title` | string or null | no |
| `seo_description` | string or null | no |
| `change_note` | string or null | no |
| `submit` | boolean | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Moderation queue {#op-get-api-v1-orgs-org-slug-portal-community-guides-moderation}

`GET /api/v1/orgs/{org_slug}/portal/community/guides/moderation`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Mod approve {#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}/approve`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `article_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Mod reject {#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`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `article_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `reason` | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Mod approve comment {#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}/approve`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `comment_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Mod reject comment {#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`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `comment_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `reason` | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Close a report {#op-post-api-v1-orgs-org-slug-portal-community-guides-moderation-reports-report-id-r}

`POST /api/v1/orgs/{org_slug}/portal/community/guides/moderation/reports/{report_id}/resolve`

Close a report. Without this the queue only ever grew.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `report_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### List notifications {#op-get-api-v1-orgs-org-slug-portal-community-guides-notifications}

`GET /api/v1/orgs/{org_slug}/portal/community/guides/notifications`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Mark notification read {#op-post-api-v1-orgs-org-slug-portal-community-guides-notifications-notification-id}

`POST /api/v1/orgs/{org_slug}/portal/community/guides/notifications/{notification_id}/read`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `notification_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Create wall post {#op-post-api-v1-orgs-org-slug-portal-community-members-handle-wall}

`POST /api/v1/orgs/{org_slug}/portal/community/members/{handle}/wall`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `handle` | path | string | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `body_markdown` | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Get own profile {#op-get-api-v1-orgs-org-slug-portal-community-profile}

`GET /api/v1/orgs/{org_slug}/portal/community/profile`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Update own profile {#op-put-api-v1-orgs-org-slug-portal-community-profile}

`PUT /api/v1/orgs/{org_slug}/portal/community/profile`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `display_name` | string or null | no |
| `biography` | string or null | no |
| `location` | string or null | no |
| `website_url` | string or null | no |
| `signature` | string or null | no |
| `avatar_data_uri` | string or null | no |
| `banner_data_uri` | string or null | no |
| `wall_enabled` | boolean or null | no |
| `index_opt_out` | boolean or null | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Delete wall comment {#op-delete-api-v1-orgs-org-slug-portal-community-wall-comments-comment-id}

`DELETE /api/v1/orgs/{org_slug}/portal/community/wall/comments/{comment_id}`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `comment_id` | path | integer | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Delete wall post {#op-delete-api-v1-orgs-org-slug-portal-community-wall-wall-post-id}

`DELETE /api/v1/orgs/{org_slug}/portal/community/wall/{wall_post_id}`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `wall_post_id` | path | integer | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Create wall comment {#op-post-api-v1-orgs-org-slug-portal-community-wall-wall-post-id-comments}

`POST /api/v1/orgs/{org_slug}/portal/community/wall/{wall_post_id}/comments`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `wall_post_id` | path | integer | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `body_markdown` | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |
