OnlyFans Fans API
The subscribers list tells you who's in the audience; the OnlyFans fans API is how you open one of them. Fetch a single fan's record by id or username, then assemble the customer-360 view a CRM needs — identity, subscription state, recent activity, and lifetime spend. Each lookup is one Bearer-authed call, scoped to a linked account so an agency reads the right creator's fan.
What you can do
- Fetch a fan record by OnlyFans user id.
- Resolve a fan by username when you only have the handle.
- Join the record with money and activity data to build a full profile.
- Do it globally (first active account) or scoped to a specific account.
Endpoints
GET /api/public/v1/users/{targetUserId}
GET /api/public/v1/users/by-username/{username}
# account-scoped (agencies)
GET /api/public/v1/accounts/{accountId}/users/{targetUserId}
GET /api/public/v1/accounts/{accountId}/users/by-username/{username}
Fetch a fan by id
curl https://api.ofapis.com/api/public/v1/accounts/42/users/101 \
-H "Authorization: Bearer ofapis_sk_..."
Returns the fan's core record — id, username, display name, subscription status. One successful call, one credit; a failed call (expired session, unknown id) is free.
Building the full fan profile
A fan record on its own is identity plus subscription state. To get the numbers that matter for retention, join it with two other reads:
| Dimension | Source |
|---|---|
| Who they are | fans API (this page) |
| What they've spent | transactions API |
| What they've done lately | notifications API |
Filter transactions to a userId to get that fan's lifetime spend, and pull recent notifications to see their latest tips, messages, and renewals. Together those three reads are a complete fan card.
Use cases
- CRM enrichment. When a webhook or chat surfaces a raw user id, fetch the fan record to turn it into a real name and subscription state before writing it into your CRM.
- VIP detection. Fetch a fan and cross-reference their spend; promote the big ones into a fan segment for premium PPV.
- Support lookups. Give agents a fan-search box backed by the by-username route so they can pull up a fan mid-conversation.
Gotchas
- One fan, not the list. These routes return a single fan. To enumerate the whole audience, page through the subscribers API instead.
- Resolve handles once. Usernames change; ids don't. Resolve a handle to an id with the by-username route, then key your records on the numeric id.
- Spend lives elsewhere. The fan record carries identity and status, not a spend total — join with transactions for money figures.
- Billing and rate limits. One credit per successful lookup; failures are free. Pace to your plan's requests-per-minute and cache fields that rarely change — see pricing.
FAQ
How do I look up a fan if I only have their username?
Use GET /users/by-username/{username} (or the account-scoped form). It resolves the handle to a full fan record, including the numeric id you should store going forward.
Can I get a fan's total spend from this API?
The fan record carries identity and subscription state, not a spend total. Filter the transactions API by that fan's userId to compute lifetime spend, then attach it to the record on your side.
What's the difference between the fans API and the subscribers API?
The fans API fetches one fan by id or handle; the subscribers API enumerates the whole audience with pagination. Use subscribers to list, fans to drill in.
Is every fan lookup billed?
Yes — one credit per successful call. Failed calls, including an unknown id or an expired session, are not charged. See pricing for plan allowances.