Fansly API LogoFansly API
Posts

Update Post

Update an existing post for a specific account.

Update an existing post on Fansly. Accepts the same body schema as Create Post.

https://v1.apifansly.com/api/fansly
POST
/{account_id}/posts/{post_id}

Get Started

All requests to the Fansly API require an API Key. See the Authentication page for details.

Request Body

curl -X POST "https://v1.apifansly.com/api/fansly/{account_id}/posts/{post_id}" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Updated post content...",
    "replyPermissions": {
      "subscribed": true,
      "tipped": true,
      "tippedMinAmount": 5
    }
  }'
fetch("https://v1.apifansly.com/api/fansly/{account_id}/posts/{post_id}", {
  method: "POST",
  headers: {
    "x-api-key": "YOUR_API_KEY",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    content: "Updated post content...",
    replyPermissions: {
      subscribed: true,
      tipped: true,
      tippedMinAmount: 5
    }
  })
})
import requests

url = "https://v1.apifansly.com/api/fansly/{account_id}/posts/{post_id}"
headers = {
    "x-api-key": "YOUR_API_KEY",
    "Content-Type": "application/json"
}
payload = {
    "content": "Updated post content...",
    "replyPermissions": {
        "subscribed": True,
        "tipped": True,
        "tippedMinAmount": 5
    }
}

response = requests.post(url, json=payload, headers=headers)
print(response.json())
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpRequest.BodyPublishers;

HttpClient client = HttpClient.newHttpClient();
String json = "{\"content\": \"Updated post content...\", \"replyPermissions\": {\"subscribed\": true, \"tipped\": true, \"tippedMinAmount\": 5}}";

HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://v1.apifansly.com/api/fansly/{account_id}/posts/{post_id}"))
        .header("x-api-key", "YOUR_API_KEY")
        .header("Content-Type", "application/json")
        .POST(BodyPublishers.ofString(json))
        .build();

client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
        .thenApply(HttpResponse::body)
        .thenAccept(System.out::println)
        .join();
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY");

var json = "{\"content\": \"Updated post content...\", \"replyPermissions\": {\"subscribed\": true, \"tipped\": true, \"tippedMinAmount\": 5}}";
var content = new StringContent(json, Encoding.UTF8, "application/json");

var response = await client.PostAsync("https://v1.apifansly.com/api/fansly/{account_id}/posts/{post_id}", content);
var responseString = await response.Content.ReadAsStringAsync();

Console.WriteLine(responseString);
package main

import (
    "bytes"
    "fmt"
    "io/ioutil"
    "net/http"
)

func main() {
    url := "https://v1.apifansly.com/api/fansly/{account_id}/posts/{post_id}"
    payload := []byte(`{"content": "Updated post content...", "replyPermissions": {"subscribed": true, "tipped": true, "tippedMinAmount": 5}}`)

    req, _ := http.NewRequest("POST", url, bytes.NewBuffer(payload))
    req.Header.Set("x-api-key", "YOUR_API_KEY")
    req.Header.Set("Content-Type", "application/json")

    client := &http.Client{}
    resp, _ := client.Do(req)
    defer resp.Body.Close()

    body, _ := ioutil.ReadAll(resp.Body)
    fmt.Println(string(body))
}

Path Parameters

account_id*
string
The unique identifier for the connected account.
post_id*
string
The unique identifier for the post to update.

Request Body Parameters

This endpoint accepts the same body parameters as Create Post. Refer to that page for the full list of fields including content, mediaIds, postToFYP, access_type, price, replyPermissions, wallIds, scheduledFor, expiresAt, and more.

Important Notes

  • Preserving content: Any field you omit will be cleared by Fansly. Always include the current content and mediaIds values if you only want to change other fields like replyPermissions.
  • Scheduled posts: You can update a post's content, media, permissions, or schedule before it goes live. Once published, changing scheduledFor has no effect.
  • Validation rules: The same rules apply as creation — at least one of content or mediaIds is required for standard posts, and mediaIds is strictly required for FYP posts.

Reply Permissions

The replyPermissions object controls who can reply to the post. All fields are optional. Omit the object entirely for unrestricted replies.

ParameterTypeRequiredDescription
followingbooleanNoAllow replies from users who are following you.
subscribedbooleanNoAllow replies from subscribed users.
tippedbooleanNoAllow replies from users who have tipped you.
tippedMinAmountnumberNoMinimum tip amount in dollars. Only used when tipped is true.
followedMebooleanNoAllow replies from users you follow back.
mediaPurchasesbooleanNoAllow replies from users who have purchased your media.
mediaPurchasesMinAmountnumberNoMinimum media purchase amount in dollars. Only used when mediaPurchases is true.

Response

{
    "statusCode": 200,
    "message": "Success",
    "data": {
        "status_code": 200,
        "data": {
            "success": true,
            "response": {
                "id": "post_id",
                "accountId": "account_id",
                "content": "Check out my new content! 🔥",
                "fypFlags": 0,
                "inReplyTo": null,
                "quotedPostId": null,
                "replyPermissionFlags": 0,
                "postReplyPermissionFlags": [
                    {
                        "id": "perm_id",
                        "postId": "post_id",
                        "flags": 62,
                        "type": 0,
                        "metadata": "{}"
                    }
                ],
                "expiresAt": 0,
                "attachments": [],
                "wallIds": [],
                "pinWallIds": [],
                "pinned": 0,
                "mediaLikeCount": 0,
                "totalTipAmount": 0,
                "attachmentTipAmount": 0,
                "accountMentions": []
            }
        }
    },
    "timestamp": "2026-02-01T01:09:02.943Z"
}

Response Body

FieldTypeDescription
statusCodenumberHTTP status code of the response (200)
messagestringA human-readable status message
dataobjectThe main response payload
├─ status_codenumberInternal Fansly operation status code
└─ dataobjectNested data container
└─ responseobjectThe updated post object
├─ idstringUnique identifier of the updated post
├─ accountIdstringThe account ID that owns the post
├─ contentstringThe text content of the post
├─ fypFlagsnumberInternal FYP visibility flags
├─ inReplyTostring | nullID of the post being replied to, if any
├─ quotedPostIdstring | nullID of the post being quoted, if any
├─ replyPermissionFlagsnumberRaw combined reply permission bitmask
├─ postReplyPermissionFlagsarrayApplied reply permission rule objects
├─ expiresAtnumberUnix timestamp for expiration (0 = never expires)
├─ wallIdsarrayWall IDs the post was published to
├─ pinWallIdsarrayWall IDs where the post is pinned
├─ pinnednumberWhether the post is pinned
├─ mediaLikeCountnumberTotal number of media likes
├─ totalTipAmountnumberTotal tip amount received on the post
├─ attachmentTipAmountnumberTip amount attributed to attachments
└─ accountMentionsarrayList of accounts mentioned in the post
timestampstringISO 8601 timestamp of when the response was generated

On this page