Platforms
One API for OnlyFans and Fansly
Every creator account lives on one platform. The same routes, keys, MCP tools and webhooks serve both, and anything a platform lacks answers not_supported_on_platform. The tables below come straight from the API contract, so they change when the API does.
OnlyFans
Chats, fans, spend, revenue, posts, tracking links and the vault, plus mass messages, paid messages, online fans and webhooks for every new message, sale and subscriber.
- 22
- REST routes
- 11
- webhook events
- 28
- MCP tools
Fansly
Fans, chats, revenue, posts, tracking links and the vault on the same routes, with the same keys. Send free messages and take them back, each approved by your team.
- 20
- REST routes
- 8
- webhook events
- 24
- MCP tools
Differences
What only one platform has
Everything else works the same on both. Calling one of these for an account on the other platform answers not_supported_on_platform.
OnlyFans only
- REST routes
Mass messagesOnline fansCall OnlyFans- Webhook events
message.receivedtransaction.createdsubscriber.new
Fansly only
- REST routes
Call Fansly- Rules
- A message is free, goes to a chat the account already has and attaches free vault media only. Each account syncs about every 30 minutes. More on the Fansly API
Route by route
What works on each platform
Read from the API contract. Each name links to its reference in the docs.
REST routes
Every route an API key can call. Routes that take an account answer with meta.platform.
| REST routes | OnlyFans | Fansly |
|---|---|---|
GET /Who am I | Works on OnlyFans | Works on Fansly |
GET /List accountsAdd platform=fansly or platform=onlyfans to list one platform. | Works on OnlyFans | Works on Fansly |
POST /Create linkSet platform, or leave it out and the creator picks. | Works on OnlyFans | Works on Fansly |
GET /Get link | Works on OnlyFans | Works on Fansly |
GET /Get account | Works on OnlyFans | Works on Fansly |
GET /List fans | Works on OnlyFans | Works on Fansly |
GET /Get fanfresh=true reads the fan live on either platform. | Works on OnlyFans | Works on Fansly |
GET /Fan lists | Works on OnlyFans | Works on Fansly |
GET /List chats | Works on OnlyFans | Works on Fansly |
GET /List messagesOn Fansly, fresh=true works for a chat the account already has. | Works on OnlyFans | Works on Fansly |
GET /Search messages | Works on OnlyFans | Works on Fansly |
GET /Revenue summary | Works on OnlyFans | Works on Fansly |
GET /List transactions | Works on OnlyFans | Works on Fansly |
GET /Mass messages | Works on OnlyFans | Does not work on Fansly |
GET /Top contentTips per post are set on Fansly and null on OnlyFans. | Works on OnlyFans | Works on Fansly |
GET /Tracking linksurl is null on Fansly, which does not say the address fans open. | Works on OnlyFans | Works on Fansly |
GET /Online fans | Works on OnlyFans | Does not work on Fansly |
GET /Vault | Works on OnlyFans | Works on Fansly |
GET /Call OnlyFans | Works on OnlyFans | Does not work on Fansly |
GET /Call Fansly | Does not work on OnlyFans | Works on Fansly |
POST /Create actionFansly takes send_message and unsend_message. | Works on OnlyFans | Works on Fansly |
GET /Get action | Works on OnlyFans | Works on Fansly |
GET /List actions | Works on OnlyFans | Works on Fansly |
Writes
Each write is an action that waits for a person to approve it, unless an owner or admin gave the key auto-approve.
| Writes | OnlyFans | Fansly |
|---|---|---|
send_messageSend messageOn Fansly it is free, goes to a chat the account already has and attaches free vault media only. | Works on OnlyFans | Works on Fansly |
send_mass_messageSend mass message | Works on OnlyFans | Does not work on Fansly |
unsend_messageUnsend messageOn OnlyFans it can take back every copy of a mass message. | Works on OnlyFans | Works on Fansly |
add_fan_to_listAdd fan to list | Works on OnlyFans | Does not work on Fansly |
remove_fan_from_listRemove fan from list | Works on OnlyFans | Does not work on Fansly |
Webhook events
Every event that names an account carries account.platform. Read new Fansly messages, sales and subscribers from the API.
| Webhook events | OnlyFans | Fansly |
|---|---|---|
account.connectedA creator account was linked to the workspace. | Works on OnlyFans | Works on Fansly |
account.status_changedAn account's status changed, for example to Needs relink. | Works on OnlyFans | Works on Fansly |
account.removedAn account was removed from the workspace. | Works on OnlyFans | Works on Fansly |
link.failedA hosted link session ended without connecting. | Works on OnlyFans | Works on Fansly |
message.receivedA fan sent a message. | Works on OnlyFans | Does not work on Fansly |
transaction.createdA fan paid for something: a subscription, tip, message, post or stream. | Works on OnlyFans | Does not work on Fansly |
subscriber.newA fan subscribed or resubscribed. | Works on OnlyFans | Does not work on Fansly |
action.pendingAn API client asked for a write that needs approval. | Works on OnlyFans | Works on Fansly |
action.executedAn approved write ran on the account. | Works on OnlyFans | Works on Fansly |
action.rejectedA person rejected a pending write. | Works on OnlyFans | Works on Fansly |
action.failedAn approved write failed on the platform. | Works on OnlyFans | Works on Fansly |
MCP tools
One tool set serves both platforms. The account decides which platform a call reaches.
| MCP tools | OnlyFans | Fansly |
|---|---|---|
list_accountsList accounts | Works on OnlyFans | Works on Fansly |
account_healthAccount health | Works on OnlyFans | Works on Fansly |
link_accountLink an account | Works on OnlyFans | Works on Fansly |
get_linkCheck a link | Works on OnlyFans | Works on Fansly |
find_fansFind fans | Works on OnlyFans | Works on Fansly |
get_fanGet fan | Works on OnlyFans | Works on Fansly |
list_chatsList chats | Works on OnlyFans | Works on Fansly |
get_chatGet chat | Works on OnlyFans | Works on Fansly |
search_messagesSearch messages | Works on OnlyFans | Works on Fansly |
revenue_summaryRevenue summary | Works on OnlyFans | Works on Fansly |
list_transactionsList transactions | Works on OnlyFans | Works on Fansly |
mass_message_performanceMass message performance | Works on OnlyFans | Does not work on Fansly |
top_contentTop content | Works on OnlyFans | Works on Fansly |
link_performanceTracking link performance | Works on OnlyFans | Works on Fansly |
online_fansOnline fans | Works on OnlyFans | Does not work on Fansly |
list_vaultList vault | Works on OnlyFans | Works on Fansly |
search_apiSearch the platform API | Works on OnlyFans | Works on Fansly |
describe_endpointDescribe a platform endpoint | Works on OnlyFans | Works on Fansly |
call_apiCall the platform API | Works on OnlyFans | Works on Fansly |
search_docsSearch docs | Works on OnlyFans | Works on Fansly |
get_docGet doc | Works on OnlyFans | Works on Fansly |
draft_messageDraft a message | Works on OnlyFans | Works on Fansly |
send_messageSend message | Works on OnlyFans | Works on Fansly |
send_mass_messageSend mass message | Works on OnlyFans | Does not work on Fansly |
unsend_messageUnsend message | Works on OnlyFans | Works on Fansly |
list_fan_listsList fan lists | Works on OnlyFans | Works on Fansly |
label_fanAdd or remove a fan from a list | Works on OnlyFans | Does not work on Fansly |
get_actionGet action | Works on OnlyFans | Works on Fansly |
Linking
How creators connect each platform
On both platforms the creator signs in on our hosted page, so you never see a password.
| Linking | OnlyFans | Fansly |
|---|---|---|
| Signs in with | Account email and password | Username or email, and password |
| Two-factor code | From an authenticator app, a text message or email | By email or from an authenticator app |
| Human check | Sometimes | Never |
| Selfie check | Sometimes | Never |
| Statuses | All seven, including Awaiting selfie and Restricted by OnlyFans | Five. Never Awaiting selfie or Restricted |
| Workspaces | Any number, each with its own access | One at a time. A second link fails with account_in_use |
| Sandbox creators | Ivy, Juniper and Wren | Sloane |
One workspace
Write it once for both
A key reaches every account in its workspace, on either platform. Branch on platform only where the platforms differ, and keep every id a string.
const BFL = "https://betterfans.link/v1";
const headers = { Authorization: `Bearer ${process.env.BFL_KEY}` };
// One key reaches every account in the workspace, on either platform
const { data: accounts } = await fetch(`${BFL}/accounts`, { headers }).then((r) => r.json());
for (const account of accounts) {
// Same route on both. Ids are strings: Fansly ids do not fit in a number.
const { data: fans, meta } = await fetch(
`${BFL}/accounts/${account.id}/fans?sort=spend&limit=5`,
{ headers },
).then((r) => r.json());
console.log(meta.platform, account.username, fans.length);
if (account.platform === "onlyfans") {
// Online fans and mass messages exist on OnlyFans only
}
}FAQ
OnlyFans and Fansly API questions
Can one workspace hold OnlyFans and Fansly creators?
Yes. A workspace can link creators on both platforms, and GET /v1/accounts lists them together with each one's platform. Add platform=fansly or platform=onlyfans to list one platform. Roles, approvals, the request log and the audit log cover every account the same way.
What happens if I call an OnlyFans only route for a Fansly account?
The API answers 400 not_supported_on_platform and does nothing. The same goes for a write type the platform does not take: a mass message for a Fansly account is refused when you create it, before any action exists. Each route in the docs lists the platforms it works for.
Do OnlyFans and Fansly return the same data shapes?
Yes. A fan, chat, message, transaction, post, tracking link or vault item has the same fields on both platforms. A field is null where a platform does not say it, such as the address of a Fansly tracking link or the tips on an OnlyFans post.
How do I tell which platform an account is on?
Every account has a platform field, onlyfans or fansly. Every response for one account repeats it in meta.platform, and every webhook event that names an account carries account.platform, so you can branch on it anywhere.
GET STARTED
Build it in test mode today.
Sign up, make a test key and build against sandbox creators on both platforms. Link real accounts when your flow is ready.
Questions first? Write to hello@betterfans.link.