ofapisv1
solution

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

  1. Audience picker — load GET /lists; let the operator choose a segment or "everyone."
  2. Composer — text plus an optional price/media for a paid drop.
  3. Preview gatePOST .../preview; block send until the operator confirms reach and cost against the remaining balance.
  4. DispatchPOST .../trigger, store the returned runId.
  5. Status view — poll GET .../runs/{runId}; show delivered/total.

Gotchas

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

Related guides

All guides
Start free — 250 credits, no card
Generate a token and make your first call in minutes.
Get started