ofapisv1
solution

The OnlyFans CRM API

A creator or agency CRM needs three things from OnlyFans: who the fans are, what they have said, and a way to reach them. ofapis exposes all three as one authenticated REST API, so you build on documented JSON endpoints instead of scraping a browser session. This page is the API surface; for a start-to-finish build, see the CRM tutorial.

The endpoints a CRM uses

Need Endpoint Use
Fans GET /subscribers Page the audience into your store
Profiles GET /users/{id} Names, avatars, metadata for a contact
Conversations GET /chats, GET /chats/{id}/messages Build a per-fan timeline
Signals GET /notifications Tips, likes and subscribes for scoring
Segments POST /accounts/{id}/lists Group fans into tiers or cohorts
Outreach POST /accounts/{id}/mailings, POST /chats/{id}/messages Broadcast or reply one-to-one

Every route lives under https://api.ofapis.com/api/public/v1 and takes a Authorization: Bearer ofapis_sk_... header. The full contract is in the OpenAPI 3.0 spec.

Reading fans and conversations

List endpoints are offset-paged. Request a page, then follow nextOffset:

curl "https://api.ofapis.com/api/public/v1/chats?limit=50&offset=0" \
  -H "Authorization: Bearer ofapis_sk_..."
# -> { "data": { "list": [...], "hasMore": true, "nextOffset": 50 } }

Join chats to subscribers on the fan id to give every contact a spend total and a last-message timestamp. Resolve display names lazily via the profile API so you only pay a credit when you actually need the metadata.

Segment, then reach

The value of a CRM API is that outreach is wrapped. You do not fan out over a chat list — you push a cohort to a fan segment and send once:

# 1. create the mailing against a list (segment)
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":"lapsing-30d","listId":"9","text":"Miss you — 20% off this week"}'

# 2. preview reach + cost, then 3. trigger
curl -X POST ".../accounts/42/mailings/9d4c1e77-3b2a-4f68-a5c9-7e10b2f8d341/preview" -H "Authorization: Bearer ofapis_sk_..."

The separate preview step returns recipient count and cost so your CRM can show a confirmation before spending credits. The real send is one trigger call that fans out server-side, which keeps your outreach layer small and easy to reason about.

Cost and multi-account model

Billing is per successful call — one credit each — and failed calls (expired session, upstream error) are never charged, so a predictable sync loop has a predictable bill. Agencies address each creator by id under scoped routes (/accounts/{accountId}/chats, /accounts/{accountId}/mailings), so a multi-tenant CRM stays clean under a single token. See agency automation for the roster pattern and pricing for credit tiers.

FAQ

Which endpoints does a CRM actually need?

subscribers for the audience, chats and notifications for activity, lists to group fans, and mailings or chats/{id}/messages for outreach. Everything else is optional.

Can I manage many creators in one CRM?

Yes. Link multiple accounts on Pro and up, then scope every call by accountId under /accounts/{accountId}/.... All creators bill against one token.

How fresh is the data?

As fresh as your sync cadence. You control polling, and signed webhooks push new-message and subscription events so records update without a full resync.

Is sending to a segment one call or many?

One. A mailing to a segment is a single idempotent request that fans out server-side, so you never loop over individual chats to reach a cohort.

How is this billed?

Per successful API call, at one credit each; failed calls are free. Start free with 250 credits a month, then move to a metered plan on pricing.

Related: Running an agency at scale

Related guides

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