OnlyFans Mass Message Tool
A mass message tool is three moving parts wired in sequence: an audience picker, a cost preview, and a dispatch trigger with a progress readout. ofapis models the last two natively as mailings, so you spend your time on the tool's UX, not on OnlyFans plumbing. This page is the architecture for that tool.
The pipeline
| Step | Endpoint |
|---|---|
| List/build segments | GET/POST /accounts/{id}/lists |
| Create a mailing | POST /accounts/{id}/mailings |
| Preview cost + reach | POST /accounts/{id}/mailings/{mid}/preview |
| Trigger dispatch | POST /accounts/{id}/mailings/{mid}/trigger |
| Watch the run | GET /accounts/{id}/mailings/{mid}/runs/{runId} |
Everything sits under https://api.ofapis.com/api/public/v1.
1. Pick the audience
Your tool's audience dropdown is backed by fan segments — the same lists OnlyFans uses. Fetch them for the picker; a mailing with no listId targets every active subscriber, one with a listId targets just that segment.
2. Create, then preview
Never send straight from the compose box. Create the mailing, then call preview so the operator sees exactly who it hits and what it costs before committing:
# create
curl -X POST https://api.ofapis.com/api/public/v1/accounts/42/mailings \
-H "Authorization: Bearer ofapis_sk_..." -H "Content-Type: application/json" \
-d '{"name":"weekend-drop","text":"Weekend drop is live 🔥","listId":"9"}'
# → {"data":{"id":"9d4c1e77-3b2a-4f68-a5c9-7e10b2f8d341", ...}} ← mailing ids are UUIDs
# preview
curl -X POST https://api.ofapis.com/api/public/v1/accounts/42/mailings/9d4c1e77-3b2a-4f68-a5c9-7e10b2f8d341/preview \
-H "Authorization: Bearer ofapis_sk_..."
# → {"data":{"recipientCount":3120,"perRecipientWeight":1,"estimatedCost":3120}}
Billing is one credit per recipient, so estimatedCost is also the price. Render it as a confirmation modal — "This reaches 3,120 fans and costs 3,120 credits. Send?" Targeting all subscribers rather than a list returns recipientCount: -1 and estimatedCost: 0, so fall back to your own subscriber count for the confirmation.
3. Trigger and track
On confirm, fire the trigger. Dispatch is asynchronous, so poll the run rather than blocking the UI:
curl -X POST https://api.ofapis.com/api/public/v1/accounts/42/mailings/9d4c1e77-3b2a-4f68-a5c9-7e10b2f8d341/trigger \
-H "Authorization: Bearer ofapis_sk_..."
The trigger is one mailing operation, not thousands of chat writes, so an accidental double-click can't fan out into duplicate DMs. Poll /runs/{runId} to drive a progress bar to completion.
Build outline
- Audience picker — load
GET /lists; let the operator choose a segment or "everyone." - Composer — text plus an optional price/media for a paid drop.
- Preview gate —
POST .../preview; block send until the operator confirms reach and cost against the remaining balance. - Dispatch —
POST .../trigger, store the returnedrunId. - Status view — poll
GET .../runs/{runId}; show delivered/total.
Gotchas
- Segments drift. Preview reflects the audience at call time, so preview immediately before triggering, not at compose time.
- Budget large blasts. A 30k-fan send needs 30k credits — check the preview against your plan (Starter includes 30,000/mo, Pro 120,000) before firing. See pricing.
- Failed triggers are free. Only successful dispatch is metered.
For a multi-creator version of this tool, loop the same sequence per accountId — see agency automation.
FAQ
How is a mass message billed?
One credit per recipient. The preview call returns the exact recipient count before you trigger, so the cost is known up front and only a successful dispatch is charged.
Can I send to a specific segment instead of all fans?
Yes. Build a fan segment and pass its listId on the mailing; leave listId off to reach every active subscriber.
What stops accidental duplicate sends?
The trigger runs the whole mailing as one operation rather than per-fan chat writes, so repeating it does not silently double every message. Inspect the mailing's runs to confirm whether it already dispatched.
Is this the same as the mass DM API?
It is the tooling layer on top of it. The underlying capability is documented on the mass DM API page; this page is how you wrap it into an operator-facing send tool.
Start free · Fan segments API · Live playground
Related: OnlyFans automation guide