Part of Customer Portal.
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.
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/portal/community/forum/moderation/members/{handle}/role
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
handle |
path |
string |
yes |
application/json (required)
| Field |
Type |
Required |
role |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/portal/community/forum/moderation/members/{handle}/suspend
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
handle |
path |
string |
yes |
application/json (required)
| Field |
Type |
Required |
suspend |
boolean |
no |
reason |
string or null |
no |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
GET /api/v1/orgs/{org_slug}/portal/community/forum/moderation/reports
| 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. |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
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.
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
report_id |
path |
integer |
yes |
application/json (required)
| Field |
Type |
Required |
resolution |
string or null |
no |
action |
string |
no |
note |
string or null |
no |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
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.
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
thread_id |
path |
integer |
yes |
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 |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
PUT /api/v1/orgs/{org_slug}/portal/community/forum/posts/{post_id}
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
post_id |
path |
integer |
yes |
application/json (required)
| Field |
Type |
Required |
body_markdown |
string |
yes |
edit_reason |
string or null |
no |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
DELETE /api/v1/orgs/{org_slug}/portal/community/forum/posts/{post_id}
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
post_id |
path |
integer |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/portal/community/forum/posts/{post_id}/react
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
post_id |
path |
integer |
yes |
application/json (required)
| Field |
Type |
Required |
reaction_type |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/portal/community/forum/posts/{post_id}/vote
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
post_id |
path |
integer |
yes |
application/json (required)
| Field |
Type |
Required |
value |
integer |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/portal/community/forum/reports
| 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 |
application/json (required)
| Field |
Type |
Required |
category |
string |
no |
reason |
string or null |
no |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
GET /api/v1/orgs/{org_slug}/portal/community/forum/subscriptions
Threads the member follows, with how many posts they have not seen.
| 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. |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/portal/community/forum/subscriptions/read
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/portal/community/forum/threads
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
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 |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
PUT /api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
thread_id |
path |
integer |
yes |
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 |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
DELETE /api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
thread_id |
path |
integer |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}/bump
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
thread_id |
path |
integer |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}/posts
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
thread_id |
path |
integer |
yes |
application/json (required)
| Field |
Type |
Required |
body_markdown |
string |
yes |
parent_post_id |
integer or null |
no |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
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.
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
thread_id |
path |
integer |
yes |
post_id |
query |
integer |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
DELETE /api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}/solution
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
thread_id |
path |
integer |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/portal/community/forum/threads/{thread_id}/subscription
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
thread_id |
path |
integer |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
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.
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
thread_id |
path |
integer |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
GET /api/v1/orgs/{org_slug}/portal/community/guides/articles
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/portal/community/guides/articles
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
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 |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
GET /api/v1/orgs/{org_slug}/portal/community/guides/articles/{article_id}
| Name |
In |
Type |
Required |
Description |
article_id |
path |
integer |
yes |
|
org_slug |
path |
string |
yes |
|
view |
query |
string |
no |
Default: live. |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
PUT /api/v1/orgs/{org_slug}/portal/community/guides/articles/{article_id}
| Name |
In |
Type |
Required |
article_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
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 |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
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.
| Name |
In |
Type |
Required |
article_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
GET /api/v1/orgs/{org_slug}/portal/community/guides/articles/{article_id}/diff
| Name |
In |
Type |
Required |
article_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/portal/community/guides/articles/{article_id}/proposal/withdraw
| Name |
In |
Type |
Required |
article_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/portal/community/guides/articles/{article_id}/propose
| Name |
In |
Type |
Required |
article_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
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 |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
GET /api/v1/orgs/{org_slug}/portal/community/guides/moderation
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/portal/community/guides/moderation/articles/{article_id}/approve
| Name |
In |
Type |
Required |
article_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/portal/community/guides/moderation/articles/{article_id}/reject
| Name |
In |
Type |
Required |
article_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
application/json (required)
| Field |
Type |
Required |
reason |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/portal/community/guides/moderation/comments/{comment_id}/approve
| Name |
In |
Type |
Required |
comment_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/portal/community/guides/moderation/comments/{comment_id}/reject
| Name |
In |
Type |
Required |
comment_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
application/json (required)
| Field |
Type |
Required |
reason |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/portal/community/guides/moderation/reports/{report_id}/resolve
Close a report. Without this the queue only ever grew.
| Name |
In |
Type |
Required |
report_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
GET /api/v1/orgs/{org_slug}/portal/community/guides/notifications
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/portal/community/guides/notifications/{notification_id}/read
| Name |
In |
Type |
Required |
notification_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/portal/community/members/{handle}/wall
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
handle |
path |
string |
yes |
application/json (required)
| Field |
Type |
Required |
body_markdown |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
GET /api/v1/orgs/{org_slug}/portal/community/profile
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
PUT /api/v1/orgs/{org_slug}/portal/community/profile
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
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 |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
DELETE /api/v1/orgs/{org_slug}/portal/community/wall/comments/{comment_id}
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
comment_id |
path |
integer |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
DELETE /api/v1/orgs/{org_slug}/portal/community/wall/{wall_post_id}
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
wall_post_id |
path |
integer |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/portal/community/wall/{wall_post_id}/comments
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
wall_post_id |
path |
integer |
yes |
application/json (required)
| Field |
Type |
Required |
body_markdown |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |