OnlyFans API
Posts

Send Post

Compose and send a new post to your OnlyFans account.

POST
/api/{account}/posts
AuthorizationBearer <token>

You can retrieve your token by visiting the OnlyFansAPI Console and clicking API Keys -> Create API Key.

In: header

Path Parameters

accountstring

The Account ID

textstring

The post text content

labelIds?string

Array of OF label IDs. Refer to our /posts/labels endpoint.

mediaFiles?string

Array of OFAPI ofapi_media_ IDs, or OF media IDs

rfTag?string

Array OnlyFans creator user IDs to tag in your post

expireDays?integer

Number of days after which the post will expire. Can be 1, 3, 7 or 30 days. Keep empty for no expiration.

scheduledDate?string

Schedule your post in the future (UTC timezone).

saveForLater?boolean

Add your post to the "Saved for later" queue.

fundRaisingTargetAmount?integer

Add a fundraising target to your post. If present, value must be at least 10.

fundRaisingTipsPresets?array<string>

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.

votingType?string

Include a poll or quiz within your post.

Value in"poll" | "quiz"
votingDue?integer

The due date (in days) of your poll/quiz. Can be 1, 3, 7 or 30 days. Can only be filled with votingType.

votingOptions?array<string>

The options of your poll/quiz. Required with votingType.

votingCorrectIndex?integer

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
    }
  }
}