> ## 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.

# Update Post (/api-reference/fansly/posts/update-post)

Edit an existing post. Fansly replaces the full post on edit, so send the complete desired state — `text`, `mediaFiles`, `wallIds`, `expiresAt` — not just the fields you are changing. Omitting `mediaFiles` removes the post's media; any provided media is re-registered and replaces the current attachments.

Attached media can be gated with any combination of the `requirePurchase`, `requireSubscription`, and `requireFollow` options (they stack), with an optional per-media free preview via `previews` — identical to the Send Post endpoint. Re-send the gating on edit; omitting it re-registers the media ungated.

## OpenAPI

````yaml https://app.onlyfansapi.com/scribe-fansly-docs/openapi.yaml put /api/fansly/{fanslyAccount}/posts/{post_id}
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/{post_id}:
    parameters:
      - in: path
        name: fanslyAccount
        description: The Fansly Account ID
        example: fansly_acct_XXXXXXXXXXXXXXX
        required: true
        schema:
          type: string
      - in: path
        name: post_id
        description: The Fansly post ID.
        example: "400000000000000001"
        required: true
        schema:
          type: string
    put:
      summary: Update Post
      operationId: updatePost
      description: >-
        Edit an existing post. Fansly replaces the full post on edit, so send
        the complete desired state — `text`, `mediaFiles`, `wallIds`,
        `expiresAt` — not just the fields you are changing. Omitting
        `mediaFiles` removes the post's media; any provided media is
        re-registered and replaces the current attachments.


        Attached media can be gated with any combination of the
        `requirePurchase`, `requireSubscription`, and `requireFollow` options
        (they stack), with an optional per-media free preview via `previews` —
        identical to the Send Post endpoint. Re-send the gating on edit;
        omitting it re-registers the media ungated.
      parameters: []
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    id: "400000000000000001"
                    accountId: "800000000000000001"
                    content: Hello everyone! (edited)
                    fypFlags: 0
                    inReplyTo: null
                    inReplyToRoot: null
                    createdAt: 1784297503
                    expiresAt: 1784301052000
                    attachments:
                      - postId: "400000000000000001"
                        pos: 0
                        contentType: 1
                        contentId: "500000000000000001"
                        deletedAt: null
                    postReplyPermissionFlags: []
                  _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:
                      id:
                        type: string
                        example: "400000000000000001"
                      accountId:
                        type: string
                        example: "800000000000000001"
                      content:
                        type: string
                        example: Hello everyone! (edited)
                      fypFlags:
                        type: integer
                        example: 0
                      inReplyTo:
                        type: string
                        example: null
                        nullable: true
                      inReplyToRoot:
                        type: string
                        example: null
                        nullable: true
                      createdAt:
                        type: integer
                        example: 1784297503
                      expiresAt:
                        type: integer
                        example: 1784301052000
                      attachments:
                        type: array
                        example:
                          - postId: "400000000000000001"
                            pos: 0
                            contentType: 1
                            contentId: "500000000000000001"
                            deletedAt: null
                        items:
                          type: object
                          properties:
                            postId:
                              type: string
                              example: "400000000000000001"
                            pos:
                              type: integer
                              example: 0
                            contentType:
                              type: integer
                              example: 1
                            contentId:
                              type: string
                              example: "500000000000000001"
                            deletedAt:
                              type: string
                              example: null
                              nullable: true
                      postReplyPermissionFlags:
                        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! (edited)
                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. Replaces the post's
                    current attachments.
                  example:
                    - fansly_media_01JR1234
                  items:
                    type: string
                wallIds:
                  type: array
                  description: Wall IDs the post should be published 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
````