> ## Documentation Index
> Fetch the complete documentation index at: https://docs.onlyfansapi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Send Post (/api-reference/fansly/posts/send-post)

Compose and publish a new post. Provide `text`, one or more media IDs in `mediaFiles`, or both. Media must first be uploaded via the Upload Media endpoint (use the returned `fansly_media_` ID). Use `wallIds` (from the List Walls endpoint) to choose which walls the post is published to.

Attached media can be gated with any combination of the `requirePurchase`, `requireSubscription`, and `requireFollow` options (they stack — e.g. a media can require both a subscription and a purchase). The gating applies to all attached media: a single file, or the whole bundle when several are attached. When none of the gating options are sent, media is posted ungated (visible to anyone who can see the post).

Any attached media can be given a free preview — a separate media shown unlocked while the paid media is locked — via `previews`, a map of `mediaFiles` handle to preview handle.

## OpenAPI

````yaml https://app.onlyfansapi.com/scribe-fansly-docs/openapi.yaml post /api/fansly/{fanslyAccount}/posts
openapi: 3.0.3
info:
  title: Fansly API Documentation
  description: ""
  version: 1.0.0
servers:
  - url: https://app.onlyfansapi.com
security:
  - default: []
tags:
  - name: Account
    description: Endpoints for your linked Fansly accounts
  - name: Chat Messages
    description: Endpoints for Fansly chats (messaging groups)
  - name: Chats
    description: Endpoints for Fansly chats (messaging groups)
  - name: Connect Fansly Account
    description: ""
  - name: Earnings
    description: Endpoints for Fansly Earnings — wallets, balances, transactions,
      payouts, and statements.
  - name: Followers
    description: Endpoints for Fansly followers.
  - name: Following
    description: Endpoints for the accounts a Fansly Account is following.
  - name: Lists
    description: Endpoints for Fansly subscriber/fan lists (e.g. "VIP", "Spenders").
  - name: Mass Messaging
    description: Endpoints for Fansly mass messages (broadcasts) — send one message
      to many recipients at once, and manage scheduled broadcasts.
  - name: Media
    description: Upload media for use in Fansly posts and messages
  - name: Posts
    description: Endpoints for Fansly wall posts.
  - name: Profile Statistics
    description: Endpoints for Fansly Profile Statistics (viewer engagement insights).
  - name: Subscribers
    description: Endpoints for Fansly subscribers and subscription tiers.
  - name: Subscription Discounts
    description: Endpoints for Fansly subscription discounts (shown as "Gift Links"
      in the Fansly Dashboard).
  - name: Top Supporters
    description: Endpoints for the Fansly "Top Supporters" view — see who spends the
      most and what they spend on.
  - name: Tracking Links
    description: Endpoints for Fansly tracking links — per-source attribution links
      (e.g. "Twitter bio", "FYP", "Search").
  - name: Users
    description: APIs for fetching Fansly users
  - name: Walls
    description: Endpoints for Fansly walls — the tabbed feeds on a creator profile
      that posts are published to.
paths:
  /api/fansly/{fanslyAccount}/posts:
    parameters:
      - in: path
        name: fanslyAccount
        description: The Fansly Account ID
        example: fansly_acct_XXXXXXXXXXXXXXX
        required: true
        schema:
          type: string
    post:
      summary: Send Post
      operationId: sendPost
      description: >-
        Compose and publish a new post. Provide `text`, one or more media IDs in
        `mediaFiles`, or both. Media must first be uploaded via the Upload Media
        endpoint (use the returned `fansly_media_` ID). Use `wallIds` (from the
        List Walls endpoint) to choose which walls the post is published to.


        Attached media can be gated with any combination of the
        `requirePurchase`, `requireSubscription`, and `requireFollow` options
        (they stack — e.g. a media can require both a subscription and a
        purchase). The gating applies to all attached media: a single file, or
        the whole bundle when several are attached. When none of the gating
        options are sent, media is posted ungated (visible to anyone who can see
        the post).


        Any attached media can be given a free preview — a separate media shown
        unlocked while the paid media is locked — via `previews`, a map of
        `mediaFiles` handle to preview handle.
      parameters: []
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    accountId: "800000000000000001"
                    content: Hello everyone!
                    fypFlags: 0
                    inReplyTo: null
                    quotedPostId: null
                    replyPermissionFlags: 0
                    postReplyPermissionFlags: []
                    expiresAt: 1784301052641
                    attachments:
                      - contentType: 1
                        contentId: "500000000000000001"
                        pos: 0
                        postId: "400000000000000001"
                    wallIds:
                      - "200000000000000010"
                    pinWallIds: []
                    pinned: 0
                    id: "400000000000000001"
                    mediaLikeCount: 0
                    totalTipAmount: 0
                    attachmentTipAmount: 0
                    accountMentions: []
                  _meta:
                    _credits:
                      used: 1
                      balance: 10055789
                      note: Always
                    _cache:
                      is_cached: false
                      note: Cache disabled for this endpoint
                    _rate_limits:
                      limit_minute: 5000
                      limit_day: null
                      remaining_minute: 4999
                      remaining_day: null
                      notice: We have decided to remove our daily rate limits. Please remove any
                        references to these in your integrations.
                properties:
                  data:
                    type: object
                    properties:
                      accountId:
                        type: string
                        example: "800000000000000001"
                      content:
                        type: string
                        example: Hello everyone!
                      fypFlags:
                        type: integer
                        example: 0
                      inReplyTo:
                        type: string
                        example: null
                        nullable: true
                      quotedPostId:
                        type: string
                        example: null
                        nullable: true
                      replyPermissionFlags:
                        type: integer
                        example: 0
                      postReplyPermissionFlags:
                        type: array
                        example: []
                      expiresAt:
                        type: integer
                        example: 1784301052641
                      attachments:
                        type: array
                        example:
                          - contentType: 1
                            contentId: "500000000000000001"
                            pos: 0
                            postId: "400000000000000001"
                        items:
                          type: object
                          properties:
                            contentType:
                              type: integer
                              example: 1
                            contentId:
                              type: string
                              example: "500000000000000001"
                            pos:
                              type: integer
                              example: 0
                            postId:
                              type: string
                              example: "400000000000000001"
                      wallIds:
                        type: array
                        example:
                          - "200000000000000010"
                        items:
                          type: string
                      pinWallIds:
                        type: array
                        example: []
                      pinned:
                        type: integer
                        example: 0
                      id:
                        type: string
                        example: "400000000000000001"
                      mediaLikeCount:
                        type: integer
                        example: 0
                      totalTipAmount:
                        type: integer
                        example: 0
                      attachmentTipAmount:
                        type: integer
                        example: 0
                      accountMentions:
                        type: array
                        example: []
                  _meta:
                    type: object
                    properties:
                      _credits:
                        type: object
                        properties:
                          used:
                            type: integer
                            example: 1
                          balance:
                            type: integer
                            example: 10055789
                          note:
                            type: string
                            example: Always
                      _cache:
                        type: object
                        properties:
                          is_cached:
                            type: boolean
                            example: false
                          note:
                            type: string
                            example: Cache disabled for this endpoint
                      _rate_limits:
                        type: object
                        properties:
                          limit_minute:
                            type: integer
                            example: 5000
                          limit_day:
                            type: string
                            example: null
                            nullable: true
                          remaining_minute:
                            type: integer
                            example: 4999
                          remaining_day:
                            type: string
                            example: null
                            nullable: true
                          notice:
                            type: string
                            example: We have decided to remove our daily rate limits. Please remove any
                              references to these in your integrations.
      tags:
        - Posts
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                text:
                  type: string
                  description: The post text content. Required unless `mediaFiles` is provided.
                  example: Hello everyone!
                mediaFiles:
                  type: array
                  description: Media to attach, as `fansly_media_` upload IDs returned by the
                    Upload Media endpoint. A single item is attached on its own;
                    multiple are grouped into a bundle, in the given order.
                  example:
                    - fansly_media_01JR1234
                  items:
                    type: string
                wallIds:
                  type: array
                  description: Wall IDs to publish the post to. Refer to the List Walls endpoint.
                  example:
                    - "200000000000000010"
                  items:
                    type: string
                pinWallIds:
                  type: array
                  description: Wall IDs (from `wallIds`) the post should be pinned on.
                  example: []
                  items:
                    type: string
                expiresAt:
                  type: integer
                  description: Unix timestamp in milliseconds when the post should expire. Keep
                    empty for no expiration.
                  example: 1784301052641
                fypFlags:
                  type: integer
                  description: "For You Page behavior: 0 = post to the FYP if the post meets the
                    requirements (default), 4 = do not post to the FYP."
                  example: 0
                  enum:
                    - 0
                    - 4
                requirePurchase:
                  type: boolean
                  description: Require the fan to purchase (unlock) the attached media. Requires
                    `price`. Combinable with `requireSubscription` /
                    `requireFollow`.
                  example: false
                price:
                  type: integer
                  description: Unlock price for `requirePurchase`, in Fansly's smallest unit —
                    1000 = $1.00 (e.g. 10000 = $10.00). Required when
                    `requirePurchase` is true.
                  example: 10000
                requireSubscription:
                  type: boolean
                  description: Require the fan to be subscribed to view the attached media.
                    Combinable with `requirePurchase` / `requireFollow`.
                  example: false
                subscriptionTierId:
                  type: string
                  description: Restrict `requireSubscription` to a single subscription tier. Tier
                    IDs come from the List Subscription Tiers endpoint. Omit for
                    any tier.
                  example: "843584256474116096"
                requireFollow:
                  type: boolean
                  description: Require the fan to follow the account to view the attached media.
                    Combinable with `requirePurchase` / `requireSubscription`.
                  example: false
                previews:
                  type: object
                  description: Free previews for attached media, as a map of a `mediaFiles` handle
                    to a `fansly_media_` preview upload. Each preview is shown
                    unlocked while its (gated) media is locked. Only include
                    media that should have a preview.
                  example:
                    fansly_media_01JR1234: fansly_media_01JR5678
                  properties: {}
components:
  securitySchemes:
    default:
      type: http
      scheme: bearer
      description: Get your API Key from OnlyFansAPI Console -
        https://app.onlyfansapi.com/api-keys
````