---
title: "Create forum post"
method: POST
path: "/forum_posts"
tags: ["Forum posts"]
---

# Create forum post

`POST /forum_posts`

Create a new forum post or comment within an experience. Supports text content, attachments, polls, paywalling, and pinning. Pass experience_id 'public' with a company_id to post to a company's public forum.

Required permissions:
 - `forum:post:create`

## Request body

- object — Parameters for CreateForumPostV2
  - `attachments` object[], nullable — A list of file attachments to include with the post, such as images or videos.
    - `id` string, required — The ID of an existing file object.
  - `company_id` string, nullable — The unique identifier of the company whose public forum to post in. Required when experience_id is 'public'. For example, 'biz_xxxxx'.
  - `content` string, nullable — The main body of the post in Markdown format. For example, 'Check out this **update**'. Hidden if the post is paywalled and the viewer has not purchased access.
  - `experience_id` string, required — The unique identifier of the experience to create this post in. For example, 'exp_xxxxx'. Pass 'public' along with company_id to automatically use the company's public forum.
  - `is_mention` boolean, nullable — Whether to send this post as a mention notification to all users in the experience who have mentions enabled.
  - `parent_id` string, nullable — The unique identifier of the parent post to comment on. Omit this field to create a top-level post.
  - `paywall_amount` number, nullable — The price to unlock this post in the specified paywall currency. For example, 5.00 for $5.00. When set, users must purchase access to view the post content.
  - `paywall_currency` 'usd' | 'sgd' | 'inr' | 'aud' | 'brl' | 'cad' | 'dkk' | 'eur' | 'nok' | 'gbp' | 'sek' | 'chf' | 'hkd' | 'huf' | 'jpy' | 'mxn' | 'myr' | 'pln' | 'czk' | 'nzd' | 'aed' | 'eth' | 'ape' | 'cop' | 'ron' | 'thb' | 'bgn' | 'idr' | 'dop' | 'php' | 'try' | 'krw' | 'twd' | 'vnd' | 'pkr' | 'clp' | 'uyu' | 'ars' | 'zar' | 'dzd' | 'tnd' | 'mad' | 'kes' | 'kwd' | 'jod' | 'all' | 'xcd' | 'amd' | 'bsd' | 'bhd' | 'bob' | 'bam' | 'khr' | 'crc' | 'xof' | 'egp' | 'etb' | 'gmd' | 'ghs' | 'gtq' | 'gyd' | 'ils' | 'jmd' | 'mop' | 'mga' | 'mur' | 'mdl' | 'mnt' | 'nad' | 'ngn' | 'mkd' | 'omr' | 'pyg' | 'pen' | 'qar' | 'rwf' | 'sar' | 'rsd' | 'lkr' | 'tzs' | 'ttd' | 'uzs' | 'rub' | 'btc' | 'cny' | 'usdt' | 'kzt' | 'awg' | 'whop_usd' | 'xau' — The available currencies on the platform
  - `pinned` boolean, nullable — Whether this post should be pinned to the top of the forum.
  - `poll` object, nullable — A poll to attach to this post, allowing members to vote on options.
    - `options` object[], required — The options for the poll. Must have sequential IDs starting from 1
      - `id` string, required — Sequential ID for the poll option (starting from '1')
      - `text` string, required — The text of the poll option
  - `rich_content` string, nullable — The rich content of the post in Tiptap JSON format. When provided, takes priority over the markdown content field for rendering.
  - `title` string, nullable — The title of the post, displayed prominently at the top. Required for paywalled posts as it remains visible to non-purchasers.
  - `visibility` 'members_only' | 'globally_visible' — The visibility types for forum posts

## Response `200`

A successful response

- ForumPost — A post or comment in a forum feed, supporting rich text, attachments, polls, and reactions.
  - `attachments` object[], required — All file attachments on this post, such as images, documents, and videos.
    - `content_type` string, nullable, required — Uploaded file MIME type, such as image/jpeg, video/mp4, or audio/mpeg.
    - `filename` string, nullable, required — The original filename of the uploaded attachment, including its file extension.
    - `id` string, required — Represents a unique identifier that is Base64 obfuscated. It is often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `"VXNlci0xMA=="`) or integer (such as `4`) input value will be accepted as an ID.
    - `url` string, nullable, required — A pre-optimized URL for rendering this attachment on the client. This should be used for displaying attachments in apps.
  - `comment_count` integer, required — The total number of direct comments on this post.
  - `content` string, nullable, required — The body of the forum post in Markdown format. Null if the post is paywalled and the current user does not have access.
  - `created_at` string, date-time, required — The time this post was created, as a Unix timestamp.
  - `id` string, required — Represents a unique identifier that is Base64 obfuscated. It is often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `"VXNlci0xMA=="`) or integer (such as `4`) input value will be accepted as an ID.
  - `is_edited` boolean, required — Whether this post has been edited after its initial creation.
  - `is_pinned` boolean, required — Whether this post is pinned to the top of the forum feed.
  - `is_poster_admin` boolean, required — Whether the author of this post is an admin of the company that owns the forum.
  - `like_count` integer, nullable, required — The total number of like reactions this post has received.
  - `parent_id` string, nullable, required — The unique identifier of the parent post. Null if this is a top-level post.
  - `title` string, nullable, required — The headline of the forum post. Null if the post has no title.
  - `updated_at` string, date-time, required — The time this post was last updated, as a Unix timestamp.
  - `user` object, required — The user who authored this forum post.
    - `id` string, required — The unique identifier for the user.
    - `name` string, nullable, required — The user's display name shown on their public profile.
    - `username` string, required — The user's unique username shown on their public profile.
  - `view_count` integer, nullable, required — The total number of times this post has been viewed by users.

## Other responses

- `400` — Bad request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not found
- `422` — Verification required
- `429` — Too many requests
- `500` — Internal server error

---

[API](https://skmtc.net/whop/apis/whop-api.md) · [All operations](https://skmtc.net/whop/apis/whop-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/whop/whop-api/versions/866821546d67/schema)
