Skip to main content
A fan is one subscriber (current or past) of one creator. The same person subscribed to two of your creators is two fans, with two ids. Fans come from OnlyFans and update continuously while the creator is connected. Scopes: fans:read to list and read; fans:write to set custom names, notes and mute.

The Fan object

Fan
Timestamps are null when OnlyFans has not reported them.

List and filter fans

GET /v1/fans returns fans across the creators the key can see, biggest spenders first by default. Segments
Response 200
GET /v1/fans/{fanId} returns one fan. A fan id you cannot see returns 404 FAN_NOT_FOUND.

Purchase history

GET /v1/fans/{fanId}/purchases lists what the fan bought from this creator, newest first: paid-message unlocks and tips. Sales the AI made, sales your team made and unlocks bought on OnlyFans directly are all included; refunded sales are not. Subscription payments are not in this list: find them in the creator’s transaction ledger (GET /v1/creators/{creatorId}/transactions, scope money:read; see Pull stats). Page with limit (1 to 100, default 25) and cursor.
Response 200

Notes, custom names and mute

PATCH /v1/fans/{fanId} (scope fans:write) changes only the fields you send. Send an empty string or null to clear a text field. Any other field is refused with 400 VALIDATION_ERROR. Send an optional Idempotency-Key header to make retries safe.
The response is the updated Fan. Nothing here is visible to the fan.

Fan lists

GET /v1/fan-lists (optionally creatorId; limit 1 to 100, default 25, and cursor) returns the creators’ OnlyFans lists with their size. Lists are mirrored from OnlyFans; managing them is not available through the API yet.
Response 200
kind is the kind of list as OnlyFans reports it, for example subscribers, rebill_off (renew off) or custom for lists the creator made herself. It is a plain string, so treat values you do not recognize as system lists. Each Fan’s lists shows which lists it is on.

Recipes

  • Lapsing whales to save this week: segment=lapsing&sort=spend&order=desc, then have your team (or the AI) reach out personally.
  • Win-back campaign: segment=winback, sorted by spend. OnlyFans often refuses messages to fans who are no longer subscribed (SEND_REFUSED), so pair this list with offers outside the inbox, such as a discounted trial link from Tracking links.
  • Who to thank: segment=recent_buyer&sort=last_purchase&order=desc.
  • Enrich your CRM: page through GET /v1/fans nightly and store id, totalSpentCents, lastPurchaseAt and renewOn.