AI agents
An OnlyFans chatbot API that drafts replies for review
Agents are good at reading a chat, knowing what a fan has bought and writing a reply that fits. BetterFans Link gives your agent the fan context and the tools to draft. When it asks to send, the message waits for your team's approval by default, and an agent that signs in with OAuth always waits.
# 1. Read the chat, live, without marking it read
curl "https://betterfans.link/v1/accounts/$ACCOUNT_ID/chats/$FAN_ID/messages?fresh=true&limit=20" \
-H "Authorization: Bearer $BFL_KEY"
# 2. Your model writes the reply, then asks to send it
curl https://betterfans.link/v1/accounts/$ACCOUNT_ID/actions \
-H "Authorization: Bearer $BFL_KEY" \
-H "Idempotency-Key: reply-$FAN_ID-0412" \
-H "Content-Type: application/json" \
-d '{ "type": "send_message",
"params": { "fanId": "'"$FAN_ID"'", "text": "Glad you liked it. More on Friday." } }'
# 3. A person approves it in the dashboard, then action.executed firesAI chat agents
What your chatbot gets from the API
Fan context
Lifetime spend by type, subscription, lists, the creator's notes and presence for any fan, from one call or one tool.
Drafts that send nothing
The draft_message tool returns a reply for a fan using the chat so far. It never creates an action, so drafting is always safe.
Reply suggestions
The reply_suggestions prompt drafts replies for unread chats with paying fans, ready for a person to review.
Untrusted fan text
Anything a fan wrote arrives wrapped as untrusted text in tool results, so your agent can tell instructions from chat content.
Approval in the loop
By default a send becomes a pending action with the recipient, price and media. Owners and admins approve or reject it, with an optional note.
Know when it lands
Webhooks tell your code when an action is executed, rejected or failed, and get_action checks one from inside the agent.
FAQ
Frequently asked questions
Can I build an AI chatbot for OnlyFans?
Yes. Your agent reads chats and fan details through the API or the MCP server, writes a reply with your own model and asks to send it. By default the send waits as a pending action until an owner or admin approves it in the dashboard.
How does the agent know what a fan has spent?
GET /v1/accounts/{accountId}/fans/{fanId}, or the get_fan tool, returns lifetime spend split by type, gross and net, from the fan's transactions. It also returns the fan's lists, the creator's notes and whether the fan is online.
How do you protect agents from prompt injection in fan messages?
Fan-written text in MCP tool results is wrapped in untrusted_fan_text tags, and the server instructions tell the agent to treat it as content, never as instructions. An agent that signs in with OAuth can only ask to send, so even a misled one cannot send without an owner or admin approving it.
Related
Related features
GET STARTED
Build it in test mode today.
Sign up, make a test key and work against sandbox creators. Link a real account when your flow is ready.
Questions first? Write to hello@betterfans.link.