OnlyFans API
FanvueChat Messages

Send Chat Message

Send a message to a fan. Provide text, a gif, or one or more mediaUuids. A body with none of the three is rejected before Fanvue is called.

Media is referenced by the UUIDs Fanvue already holds for this creator; uploading new media is not part of this API. Set a price to make the message pay-to-view, and mediaPreviewUuid to show one of the attached items unlocked as its teaser.

Send an Idempotency-Key header to make a retry safe: the second request with the same key and body replays the first response instead of sending a second message. Proxies Fanvue's POST /v1/chats/{userUuid}/message.

POST
/api/fanvue/{fanvueAccount}/chats/{userUuid}/messages
AuthorizationBearer <token>

Get your API Key from OnlyFansAPI Console - https://app.onlyfansapi.com/api-keys

In: header

Path Parameters

fanvueAccount*string

The Fanvue Account ID

userUuid*string

The fan's Fanvue user UUID. Chats are keyed by the counterpart, so this is also the chat id.

Request Body

application/json

text?string

The message text (1 - 5000 characters). Required unless gif or mediaUuids is provided; alongside a GIF or media it is rendered as a caption.

price?number

Unlock price in USD cents, minimum 300 ($3.00). Makes the message pay-to-view, and requires mediaUuids: Fanvue rejects a priced message with no media attached.

mediaUuids?array<string>

UUIDs of existing Fanvue media to attach.

mediaPreviewUuid?string

UUID of a single media item shown for free as the teaser of a pay-to-view message. Requires a price and attached media.

gif?

A third-party GIF to send in place of media, with id, format (GIF or WEBP), url, width, height and an optional title. Cannot be combined with mediaUuids, mediaPreviewUuid or price.

templateUuid?string

Response Body

application/json

curl -X POST "https://app.onlyfansapi.com/api/fanvue/fanvue_acct_XXXXXXXXXXXXXXX/chats/f47ac10b-58cc-4372-a567-0e02b2c3d479/messages" \  -H "Content-Type: application/json" \  -d '{}'
{
  "data": {
    "messageUuid": "9c2d4f81-77a3-4e60-b1c5-2a8e6d0f4b12"
  },
  "_meta": {
    "_credits": {
      "used": 1,
      "balance": 10055811,
      "note": "Always"
    },
    "_cache": {
      "is_cached": false,
      "note": "Cache disabled for this endpoint"
    },
    "_rate_limits": {
      "limit_minute": 5000,
      "limit_day": null,
      "remaining_minute": 4999,
      "remaining_day": null,
      "notice": "We have decided to remove our daily rate limits. Please remove any references to these in your integrations."
    }
  }
}