The Only API docs
Messaging

Create a mass message

Create a native OnlyFans mass-message queue item. Select the native Fans audience explicitly with userLists: ["fans"]. Do not assume this includes expired subscribers or…

POST
/api2/v2/messages/queue

Create a native OnlyFans mass-message queue item. Select the native Fans audience explicitly with userLists: ["fans"]. Do not assume this includes expired subscribers or guarantees delivery to every subscriber. Discover lists with GET /api2/v2/lists?view=queue; preview Fans recipients using GET /api2/v2/chats/users?limit=1&offset=0&total=1&skip_users=all&filter[list_id]=fans&field=recent&sort=desc and read data.total.

Correction: queueBuyers selects buyers of previous queued messages; an empty array is not a verified all-subscribers selector.

For a free message use price: 0 and lockedText: false. For Feed-first reuse, persist the successful post ID and pass its permanent photo media[].id integers in mediaFiles. Do not re-upload or rely on reusing consumed temporary upload objects. The sending account must own the media.

This POST is a real send. There is no supported dry_run or documented idempotency-key contract. Requires allow_of_write_actions. Persist one unique local job per account/feed_post_id; hold ambiguous timeouts, transport errors and 5xx outcomes for reconciliation instead of blindly retrying. Never republish or roll back the Feed because a message fails. Queue acceptance does not prove delivery.

Verification on 27 October 2026 covered live reads and client payload construction, not a real send. See Messaging & mass DM and Write outcomes & verification. OnlyFans only.

X-API-Key<token>

Your CRM panel API key

In: header

Header Parameters

user-id*string

Creator account ID of the account to act as (e.g. 509955039). Required — omitting it returns 400 user-id header is required. Use GET /accounts to list your connected accounts. On /api2/v2/* the account must be an OnlyFans account; Fansly accounts are rejected there.

X-Proxy?string

Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. Required on the connection routes (POST /accounts/login, POST /accounts/login/cookies, POST /accounts/login/verify-otp) for OnlyFans accounts; optional for Fansly.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

curl -X POST "https://example.com/api2/v2/messages/queue" \  -H "user-id: 509955039" \  -H "Content-Type: application/json" \  -d '{    "text": "See more here: https://onlyfans.com/MODEL_USERNAME",    "price": 0,    "lockedText": false,    "mediaFiles": [      123456789,      987654321    ],    "previews": [],    "isForward": false,    "userLists": [      "fans"    ]  }'
Empty