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*
stringThe unique identifier for the connected account.
post_id*
stringThe 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
contentandmediaIdsvalues if you only want to change other fields likereplyPermissions. - Scheduled posts: You can update a post's content, media, permissions, or schedule before it goes live. Once published, changing
scheduledForhas no effect. - Validation rules: The same rules apply as creation — at least one of
contentormediaIdsis required for standard posts, andmediaIdsis 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
following | boolean | No | Allow replies from users who are following you. |
subscribed | boolean | No | Allow replies from subscribed users. |
tipped | boolean | No | Allow replies from users who have tipped you. |
tippedMinAmount | number | No | Minimum tip amount in dollars. Only used when tipped is true. |
followedMe | boolean | No | Allow replies from users you follow back. |
mediaPurchases | boolean | No | Allow replies from users who have purchased your media. |
mediaPurchasesMinAmount | number | No | Minimum 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
| Field | Type | Description |
|---|---|---|
statusCode | number | HTTP status code of the response (200) |
message | string | A human-readable status message |
data | object | The main response payload |
├─ status_code | number | Internal Fansly operation status code |
└─ data | object | Nested data container |
└─ response | object | The updated post object |
├─ id | string | Unique identifier of the updated post |
├─ accountId | string | The account ID that owns the post |
├─ content | string | The text content of the post |
├─ fypFlags | number | Internal FYP visibility flags |
├─ inReplyTo | string | null | ID of the post being replied to, if any |
├─ quotedPostId | string | null | ID of the post being quoted, if any |
├─ replyPermissionFlags | number | Raw combined reply permission bitmask |
├─ postReplyPermissionFlags | array | Applied reply permission rule objects |
├─ expiresAt | number | Unix timestamp for expiration (0 = never expires) |
├─ wallIds | array | Wall IDs the post was published to |
├─ pinWallIds | array | Wall IDs where the post is pinned |
├─ pinned | number | Whether the post is pinned |
├─ mediaLikeCount | number | Total number of media likes |
├─ totalTipAmount | number | Total tip amount received on the post |
├─ attachmentTipAmount | number | Tip amount attributed to attachments |
└─ accountMentions | array | List of accounts mentioned in the post |
timestamp | string | ISO 8601 timestamp of when the response was generated |