OnlyFans API
OnlyFansFans

List Active Fans

Get a paginated list of fans for an Account. Newest fans are first. Paginate by following _pagination.next_page until it is null (data.hasMore is the authoritative flag). Do NOT use the page's item count to detect the last page — OnlyFans occasionally returns fewer than limit items (e.g. 19 for limit=20) on a non-final page because it filters entries server-side; no fans are skipped. To track progress, GET /{account}/me returns data.subscribersCount (the current active-subscriber count) as a total.

Supports filter[max_total_spent] (e.g. filter[max_total_spent]=0 for fans who have never spent), which OnlyFans itself cannot do. Those requests are answered from OnlyFansAPI's own fan index rather than proxied, so the page is limited to fans we have already indexed for this account — see data._source in the response.

GET
/api/{account}/fans/active
AuthorizationBearer <token>

Get your API Key from OnlyFansAPI Console - https://app.onlyfansapi.com/api-keys

In: header

Path Parameters

account*string

The Account ID

Query Parameters

limit?integer

Number of fans to return (1-20). OnlyFans does not allow more than 20 per page. Must be at least 1. Must not be greater than 20.

offset?integer

Number of fans to skip. Must be at least 0.

type?string

Filter by fan type.

Value in"active" | "expired" | "all"
filter?object

Filter by specific fields.

filter.online?integer|null

Filter by online status (1 for online fans). Must use bracket syntax: filter[online]=1 — the dot form (filter.online=1) is rejected with a 422, because PHP rewrites it to filter_online and the filter could not be applied.

Value in1 | 0
filter.total_spent?integer

Filter by minimum amount total spent by a fan. Must use bracket syntax: filter[total_spent]=100 — the dot form (filter.total_spent=100) is rejected with a 422, because PHP rewrites it to filter_total_spent and the filter could not be applied. Must be at least 0.

filter.tips?integer

Filter by minimum tips. Must use bracket syntax: filter[tips]=100 — the dot form (filter.tips=100) is rejected with a 422, because PHP rewrites it to filter_tips and the filter could not be applied. Must be at least 0.

filter.duration?integer

Filter by minimum subscription duration in months. Must use bracket syntax: filter[duration]=1 — the dot form (filter.duration=1) is rejected with a 422, because PHP rewrites it to filter_duration and the filter could not be applied. Must be at least 0.

filter.max_total_spent?number

Filter by maximum amount total spent by a fan — use filter[max_total_spent]=0 to isolate fans who have never spent. Combine with filter[total_spent] for a range. Must use bracket syntax: filter[max_total_spent]=0 — the dot form is rejected with a 422, because PHP rewrites it to filter_max_total_spent and the filter could not be applied.

OnlyFans itself has no maximum-spend filter, so this one is resolved against OnlyFansAPI's own fan index instead of being proxied. The fan objects in data.list are still fetched live from OnlyFans and are re-checked against your filters before being returned, but only fans we have already indexed for this account can appear. Each response reports its own coverage under data._source; when data._source.is_complete is false a full-base backfill is queued automatically, so retry later for a complete answer.

data._source.omitted_from_page counts fans that matched your filters but which OnlyFans returned no usable data for on that page (a deleted account, or a partial response). They are left out of data.list and not revisited later in the same walk, so a non-zero value means that page was short — start a fresh walk to retry them. Cannot be combined with filter[online]. Must be at least 0.

query?string|null

Search within fan name/username.

Response Body

application/json

curl -X GET "https://app.onlyfansapi.com/api/acct_XXXXXXXXXXXXXXX/fans/active?limit=20&offset=0"
{
  "data": {
    "list": [
      {
        "view": "x",
        "avatar": "https://public.onlyfans.com/files/l/la/lal/.../123/avatar.jpg",
        "avatarThumbs": {
          "c50": "https://thumbs.onlyfans.com/public/files/thumbs/c50/l/la/lal/.../123/avatar.jpg",
          "c144": "https://thumbs.onlyfans.com/public/files/thumbs/c144/l/la/lal/.../123/avatar.jpg"
        },
        "header": null,
        "headerSize": null,
        "headerThumbs": null,
        "id": 123,
        "name": "name",
        "username": "username",
        "canLookStory": false,
        "canCommentStory": false,
        "hasNotViewedStory": false,
        "isVerified": true,
        "canPayInternal": true,
        "hasScheduledStream": false,
        "hasStream": false,
        "hasStories": false,
        "tipsEnabled": false,
        "tipsTextEnabled": true,
        "tipsMin": 5,
        "tipsMinInternal": 1,
        "tipsMax": 200,
        "canEarn": true,
        "canAddSubscriber": true,
        "subscribePrice": 4.99,
        "subscriptionBundles": [],
        "displayName": "",
        "notice": "",
        "isPaywallRequired": true,
        "isRestricted": false,
        "canRestrict": true,
        "subscribedBy": false,
        "subscribedByExpire": null,
        "subscribedByExpireDate": null,
        "subscribedByAutoprolong": null,
        "subscribedIsExpiredNow": null,
        "currentSubscribePrice": null,
        "subscribedOn": true,
        "subscribedOnExpiredNow": false,
        "subscribedOnDuration": "6 days",
        "listsStates": [
          {
            "id": "following",
            "type": "following",
            "name": "Following",
            "hasUser": false,
            "canAddUser": false,
            "cannotAddUserReason": "SYSTEM_LIST"
          },
          {
            "id": "fans",
            "type": "fans",
            "name": "Fans",
            "hasUser": true,
            "canAddUser": false,
            "cannotAddUserReason": "ALREADY_EXISTS"
          },
          {
            "id": "recent",
            "type": "recent",
            "name": "Recent (last 24 hours)",
            "hasUser": false,
            "canAddUser": false,
            "cannotAddUserReason": "SYSTEM_LIST"
          },
          {
            "id": "tagged",
            "type": "tagged",
            "name": "Tagged",
            "hasUser": false,
            "canAddUser": false,
            "cannotAddUserReason": "SYSTEM_LIST"
          },
          {
            "id": "friends",
            "type": "friends",
            "name": "Friends",
            "hasUser": false,
            "canAddUser": true,
            "cannotAddUserReason": null
          },
          {
            "id": "muted",
            "type": "muted",
            "name": "Muted",
            "hasUser": false,
            "canAddUser": true,
            "cannotAddUserReason": null
          }
        ],
        "canReport": false,
        "canReceiveChatMessage": true,
        "hideChat": false,
        "lastSeen": "2025-01-01T00:00:00+00:00",
        "isPerformer": true,
        "isRealPerformer": true,
        "subscribedByData": null,
        "subscribedOnData": {
          "price": 0,
          "newPrice": 0,
          "regularPrice": 0,
          "subscribePrice": 0,
          "discountPercent": 0,
          "discountPeriod": 1,
          "subscribeAt": "2025-01-01T00:00:00+00:00",
          "expiredAt": "2025-01-01T00:00:00+00:00",
          "renewedAt": null,
          "discountFinishedAt": null,
          "discountStartedAt": null,
          "status": "Set to Expire",
          "isMuted": false,
          "unsubscribeReason": "No reason given",
          "duration": "6 days",
          "tipsSumm": 0,
          "subscribesSumm": 0,
          "messagesSumm": 0,
          "postsSumm": 0,
          "streamsSumm": 0,
          "totalSumm": 0,
          "lastActivity": "2025-01-01T00:00:00+00:00",
          "recommendations": 0,
          "subscribes": [
            {
              "id": 123,
              "userId": 123,
              "subscriberId": 123,
              "date": "2025-01-01T00:00:00+00:00",
              "duration": 7,
              "startDate": "2025-01-01T00:00:00+00:00",
              "expireDate": "2025-01-01T00:00:00+00:00",
              "cancelDate": null,
              "price": 0,
              "regularPrice": 4.99,
              "discount": 0,
              "earningId": 0,
              "action": "subscribe",
              "type": "trial",
              "offerStart": "2025-01-01T00:00:00+00:00",
              "offerEnd": "2025-01-01T00:00:00+00:00",
              "isCurrent": true
            }
          ],
          "hasActivePaidSubscriptions": false
        },
        "canTrialSend": false,
        "isBlocked": false,
        "promoOffers": [
          {
            "id": 123,
            "subscribeDays": 7,
            "createdAt": "2025-01-01T00:00:00+00:00",
            "expiredAt": "2025-01-01T00:00:00+00:00",
            "finishedAt": "2025-01-01T00:00:00+00:00",
            "subscriberId": "123",
            "userId": "123"
          }
        ]
      }
    ],
    "hasMore": false
  },
  "_pagination": {
    "next_page": null
  },
  "_meta": {
    "_credits": {
      "used": 1,
      "balance": 999999840,
      "note": "Always"
    },
    "_cache": {
      "is_cached": false,
      "note": "Cache disabled for this endpoint"
    },
    "_rate_limits": {
      "limit_minute": 10000000,
      "limit_day": 50000,
      "remaining_minute": 9999999,
      "remaining_day": 49998
    }
  }
}