# Composing posts (/introduction/guides/composing-posts)



This guide will give you a brief overview of how to compose posts with various elements using our API.

<Callout type="warn">
  Please keep in mind that all of the below examples are meant to be sent as a `POST` request to our `https://app.onlyfansapi.com/api/{account}/posts` endpoint.
</Callout>

<Callout>
  **Looking for the developer-oriented documentation?** Please refer to our [API Reference](/api-reference/posts/send-post).
</Callout>

## Text-only posts

Simply want to send a regular text post? Use the following payload:

```json
{
  "text": "The text of your post"
}
```

## Post labels

### Retrieving the account's existing labels

<Callout>
  **Looking for the developer-oriented documentation?** Please refer to our [API Reference](/api-reference/post-labels/list-labels).
</Callout>

You can retrieve the account's existing labels by sending a `GET` request to the `https://app.onlyfansapi.com/api/{account}/posts/labels` endpoint.

It will return a payload like:

```json
[
  {
    "id": "archived",
    "name": "Archive",
    "type": "archived",
    "isClearInProgress": false,
    "postsCount": 0,
    "posts": []
  },
  {
    "id": "private_archived",
    "name": "Private Archive",
    "type": "private_archived",
    "isClearInProgress": false,
    "postsCount": 0,
    "posts": []
  },
  {
    "id": 123,
    "name": "My new label",
    "type": "custom",
    "isClearInProgress": false,
    "postsCount": 123,
    "posts": []
  }
]
```

You can then use the `id` of the label(s) to apply it to your post.

### Creating a new label

<Callout>
  **Looking for the developer-oriented documentation?** Please refer to our [API Reference](/api-reference/post-labels/create-label).
</Callout>

To create a new label, send a `POST` request to the `https://app.onlyfansapi.com/api/{account}/posts/labels` endpoint with the following payload:

```json
{
  "name": "My new label"
}
```

It will then return a payload like:

```json
{
  "data": {
    "id": 123,
    "name": "My new label",
    "type": "custom",
    "isClearInProgress": false,
    "postsCount": 0,
    "posts": []
  }
}
```

You can then use the `id` of the newly created label to apply it to your post.

### Adding label(s) to your post

To add label(s) to your post, you can use the `labels` field in your payload. You can specify multiple labels by providing an array of label IDs.

```json
{
  "text": "The text of your post",
  "labelIds": [123, 456]
}
```

## Adding media

Please refer to our dedicated guide on [uploading media](/introduction/guides/uploading-media) for more information on how to upload media files, and how to include them in your posts.

## Adding polls

Both regular polls and quizzes are supported in our API. You can choose which type of poll to include in your post by setting the `votingType` field in your payload to either `poll` or `quiz`.

### Regular polls

To include a regular poll in your post, set the `votingType` field to `poll`.

**Specifying the options**\
The poll's options can be set by using the `votingOptions` field. It should be an array of strings. **You must provide at least 2 options.**

**Setting a due date** (optional)\
You can set a due date by using the `votingDue` field, which specifies the number of days until the poll expires. Valid values are **1**, **3**, **7**, or **30** days. If not specified, the poll will never expire.

```json
{
  "text": "The text of your post",
  "votingType": "poll",
  "votingOptions": ["Option 1", "Option 2"],
  "votingDue": 7
}
```

### Quizzes

To include a quiz in your post, set the `votingType` field to `quiz`.

**Specifying the options**\
The quiz options can be set by using the `votingOptions` field. It should be an array of strings. **You must provide at least 2 options.**

**Specifying the correct answer**\
Specify the correct answer by using the `votingCorrectIndex` field. It should be an integer representing the index of the correct answer in the `votingOptions` array (starting from 0). For example, if the correct answer is the first option, set it to `0`.

**Setting a due date** (optional)\
You can set a due date by using the `votingDue` field, which specifies the number of days until the quiz expires. Valid values are **1**, **3**, **7**, or **30** days. If not specified, the quiz will never expire.

```json
{
  "text": "The text of your post",
  "votingType": "quiz",
  "votingOptions": ["Option 1", "Option 2"],
  "votingCorrectIndex": 0,
  "votingDue": 7
}
```

## Setting an expiration date

To set an expiration date for your post, you can use the `expireDays` field in your payload. The value must be **1**, **3**, **7** or **30** days.

```json
{
  "text": "The text of your post",
  "expireDays": 7
}
```

## Scheduling posts

To schedule your post, you can use the `scheduledDate` field in your payload. The value must be a valid date-time string formatted as `2025-06-03T15:30:00.000Z` (ISO 8601 format) in UTC timezone.

```json
{
  "text": "The text of your post",
  "scheduledDate": "2023-10-01T12:00:00Z"
}
```

## Saving a post for later

To save a post for later, you can use the `saveForLater` field in your payload. Set it to `true` to save the post without publishing it immediately. You can then find your post here: [https://onlyfans.com/saved-for-later-posts](https://onlyfans.com/saved-for-later-posts)

```json
{
  "text": "The text of your post",
  "saveForLater": true
}
```

## Setting a fundraising target

To include a fundraising target in your post, you can use the `fundRaisingTargetAmount` and `fundRaisingTipsPresets` fields in your payload.

**Setting a target amount**\
The `fundRaisingTargetAmount` field specifies the target amount for your fundraising post. It must be a at least `10` representing the amount in your account's currency.

**Setting tip presets**\
The `fundRaisingTipsPresets` field allows you to specify the preset tip amounts that users can choose from. It should be an array of integers representing the amounts in your account's currency.

**Tip preset rules**

* You must provide at least one preset value.
* Each preset value must be at least `5`.
* Each preset value may not be more than the `fundRaisingTargetAmount`.

```json
{
  "text": "The text of your post",
  "fundRaisingTargetAmount": 30,
  "fundRaisingTipsPresets": [5, 10, 15]
}
```

## Tagging other OnlyFans creators

To tag other OnlyFans creators in your post, you can use the `rfTag` field in your payload. You can specify multiple creators by providing an array of their OnlyFans user IDs.

```json
{
  "text": "The text of your post",
  "rfTag": [123, 456]
}
```

<Callout>
  **How to find the OnlyFans user ID of a creator?**

  * **If you've connected the relevant creator account to OnlyFans API**, you can use our [List Accounts](/api-reference/account/list-accounts) endpoint.
  * **Not connected, but you know the creator's username?** You can use our [Get Profile Details](/api-reference/public-profiles/get-profile-details) endpoint.
  * **Not connected and don't know the username?** You can use our [Search Profiles](/api-reference/public-profiles/search-profiles) endpoint.
</Callout>

## Formatting your post text

Please refer to our dedicated guide on [text formatting](/introduction/guides/text-formatting) for more information on how to format your post text, including text styles, colors, and more.
