OnlyFans API
FanvueInsights

List Top Spenders

List the creator's highest-spending fans over a date range, with their gross and net totals in USD cents and how many messages they exchanged. Proxies Fanvue's GET /v1/insights/top-spenders.

The date range is part of the ordering, so the cursor carries it: once cursor is supplied, startDate and endDate are ignored and the walk continues over the range the first page used. Start a new walk without a cursor to change the range.

Totals are a snapshot taken when the walk starts, which is what keeps fans from moving between pages. A payment that lands mid-walk is counted on no page of it; start a new walk to pick it up. A fan can occasionally appear twice, so de-duplicate on user.uuid.

GET
/api/fanvue/{fanvueAccount}/insights/top-spenders
AuthorizationBearer <token>

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

In: header

Path Parameters

fanvueAccount*string

The Fanvue Account ID

Query Parameters

startDate?string

Only count spending on or after this ISO 8601 datetime. Ignored when cursor is given.

endDate?string

Only count spending before this ISO 8601 datetime (non-inclusive). Ignored when cursor is given.

cursor?string

Opaque pagination cursor from a previous response's nextCursor.

size?integer

Number of fans to return (1 - 50). Default = 15

Response Body

application/json

curl -X GET "https://app.onlyfansapi.com/api/fanvue/fanvue_acct_XXXXXXXXXXXXXXX/insights/top-spenders?startDate=2026-01-01T00%3A00%3A00Z&endDate=2026-02-01T00%3A00%3A00Z&cursor=eyJ2IjoxfQ&size=15"
{
  "data": {
    "data": [
      {
        "gross": 15000,
        "net": 12750,
        "messages": 342,
        "user": {
          "uuid": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
          "handle": "sarah-jones",
          "displayName": "Sarah Jones",
          "nickname": "SarahK",
          "isTopSpender": true,
          "avatarUrl": "https://media.fanvue.com/avatars/example-avatar.jpg",
          "registeredAt": "2024-01-10T12:00:00.000Z"
        }
      }
    ],
    "nextCursor": null,
    "total": null
  },
  "_meta": {
    "_credits": {
      "used": 1,
      "balance": 10055811,
      "note": "Always"
    },
    "_cache": {
      "is_cached": false,
      "note": "Cache disabled for this endpoint"
    },
    "_rate_limits": {
      "limit_minute": 5000,
      "limit_day": null,
      "remaining_minute": 4999,
      "remaining_day": null,
      "notice": "We have decided to remove our daily rate limits. Please remove any references to these in your integrations."
    }
  }
}