Send Post
Compose and send a new post to your OnlyFans account.
You can retrieve your token by visiting the OnlyFansAPI Console and clicking API Keys -> Create API Key.
In: header
Path Parameters
The Account ID
The post text content
Array of OF label IDs. Refer to our /posts/labels
endpoint.
Array of OFAPI ofapi_media_
IDs, or OF media IDs
Array OnlyFans creator user IDs to tag in your post
Number of days after which the post will expire. Can be 1, 3, 7 or 30 days. Keep empty for no expiration.
Schedule your post in the future (UTC timezone).
Add your post to the "Saved for later" queue.
Add a fundraising target to your post. If present, value must be at least 10.
Specify which tip amounts will be listed under the fundraising card. Required with fundRaisingTargetAmount
, and you must provide at least 1 option. Array items cannot be higher than the fundRaisingTargetAmount
.
Include a poll or quiz within your post.
"poll" | "quiz"
The due date (in days) of your poll/quiz. Can be 1, 3, 7 or 30 days. Can only be filled with votingType
.
The options of your poll/quiz. Required with votingType
.
The array key of your quiz' correct answer. Required when votingType
is "quiz". Keep in mind that arrays start at 0
Response Body
curl -X POST "https://app.onlyfansapi.com/api/acct_XXXXXXXXXXXXXXX/posts" \
-H "Content-Type: application/json" \
-d '{
"text": "Hello!"
}'
const body = JSON.stringify({
"text": "Hello!"
})
fetch("https://app.onlyfansapi.com/api/acct_XXXXXXXXXXXXXXX/posts", {
body
})
package main
import (
"fmt"
"net/http"
"io/ioutil"
"strings"
)
func main() {
url := "https://app.onlyfansapi.com/api/acct_XXXXXXXXXXXXXXX/posts"
body := strings.NewReader(`{
"text": "Hello!"
}`)
req, _ := http.NewRequest("POST", url, body)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
import requests
url = "https://app.onlyfansapi.com/api/acct_XXXXXXXXXXXXXXX/posts"
body = {
"text": "Hello!"
}
response = requests.request("POST", url, json = body, headers = {
"Content-Type": "application/json"
})
print(response.text)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpResponse.BodyHandlers;
import java.time.Duration;
import java.net.http.HttpRequest.BodyPublishers;
var body = BodyPublishers.ofString("""{
"text": "Hello!"
}""");
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.build();
HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
.uri(URI.create("https://app.onlyfansapi.com/api/acct_XXXXXXXXXXXXXXX/posts"))
.header("Content-Type", "application/json")
.POST(body)
.build();
try {
HttpResponse<String> response = client.send(requestBuilder.build(), BodyHandlers.ofString());
System.out.println("Status code: " + response.statusCode());
System.out.println("Response body: " + response.body());
} catch (Exception e) {
e.printStackTrace();
}
using System;
using System.Net.Http;
using System.Text;
var body = new StringContent("""
{
"text": "Hello!"
}
""", Encoding.UTF8, "application/json");
var client = new HttpClient();
var response = await client.PostAsync("https://app.onlyfansapi.com/api/acct_XXXXXXXXXXXXXXX/posts", body);
var responseBody = await response.Content.ReadAsStringAsync();
{
"data": {
"author": {
"view": "a",
"avatar": "https://public.onlyfans.com/files/.../avatar.jpg",
"avatarThumbs": {
"c50": "https://thumbs.onlyfans.com/public/files/thumbs/.../avatar.jpg",
"c144": "https://thumbs.onlyfans.com/public/files/thumbs/.../avatar.jpg"
},
"header": "https://public.onlyfans.com/files/.../header_image.jpg",
"headerSize": {
"width": 4032,
"height": 3024
},
"headerThumbs": {
"w480": "https://thumbs.onlyfans.com/public/files/thumbs/w480/.../header_image.jpg",
"w760": "https://thumbs.onlyfans.com/public/files/thumbs/w760/.../header_image.jpg"
},
"id": 123,
"name": "Name",
"username": "username",
"canLookStory": true,
"canCommentStory": true,
"hasNotViewedStory": false,
"isVerified": true,
"canPayInternal": true,
"hasScheduledStream": false,
"hasStream": false,
"hasStories": false,
"tipsEnabled": false,
"tipsTextEnabled": true,
"tipsMin": 5,
"tipsMinInternal": 1,
"tipsMax": 200,
"canEarn": true,
"canAddSubscriber": false,
"subscribePrice": 4.99,
"hasStripe": false,
"isStripeExist": false,
"subscriptionBundles": [],
"canSendChatToAll": true,
"creditsMin": 10,
"creditsMax": 200,
"isPaywallPassed": true,
"canCreateLists": true,
"showMediaCount": true,
"showPostsInFeed": true,
"subscribedBy": true,
"canTrialSend": false
},
"responseType": "post",
"id": 123,
"postedAt": "2025-01-01T01:01:01+00:00",
"postedAtPrecise": "123.000000",
"text": "Text",
"isMarkdownDisabled": true,
"canDelete": true,
"canComment": true,
"canEdit": true,
"mediaCount": 1,
"isOpened": true,
"canToggleFavorite": true,
"tipsAmount": "$0",
"rawText": "Text",
"media": [
{
"id": 123,
"type": "photo",
"convertedToVideo": false,
"canView": true,
"hasError": false,
"createdAt": "2025-01-01T00:00:00+00:00",
"isReady": false,
"files": {
"full": {
"url": null,
"width": 0,
"height": 0,
"size": 0,
"sources": []
},
"thumb": null,
"preview": null,
"squarePreview": null
},
"duration": 0,
"releaseForms": [],
"hasCustomPreview": false
}
],
"canViewMedia": true
},
"_meta": {
"_credits": {
"used": 1,
"balance": 999999991,
"note": "Always"
},
"_cache": {
"is_cached": false,
"note": "Cache disabled for this endpoint"
},
"_rate_limits": {
"limit_minute": 1000,
"limit_day": 50000,
"remaining_minute": 999,
"remaining_day": 49990
}
}
}