OnlyFans API
FanvueFans

List Expiring Subscribers

List the subscribers whose subscription lapses inside a window and who have auto-renew switched off, so a win-back can be sent before they go. Ordered soonest to lapse first.

Fanvue has no endpoint for this and no server-side filter that answers it. The non_renewing smart list is the closest thing and is not the same question: it means auto-renew is off whenever the period ends, and its members carry no subscription dates to narrow with. So this endpoint pages GET /v1/subscribers and filters on subscription.currentPeriodEnd and subscription.autoRenewalEnabled, which is the derivation List Subscribers describes, done here instead of in your code.

This costs more than one credit. One page of 50 subscribers is one request Fanvue answers and one credit, the same rule as every other endpoint, and one call walks up to 20 pages, or fewer if Fanvue is slow and the walk passes 20 seconds. _meta._credits.used reports what a call actually cost. Because the cost is not known until the walk finishes, the balance check up front is against the worst case, so a balance under 20 is refused even when the call would have cost less.

A page can come back empty with a nextCursor set. The caps are on subscribers scanned and time spent, not on matches found, so an empty data with a cursor means "nothing matched so far, keep going" rather than "no expiring subscribers". Follow nextCursor until it is null, exactly as with the other list endpoints. Each item is a subscriber object in the same shape List Subscribers returns.

GET
/api/fanvue/{fanvueAccount}/fans/expiring
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

withinDays?integer

Include subscriptions ending within this many days (1 - 90). Default = 7

cursor?string

Opaque pagination cursor from a previous response's nextCursor, to carry on scanning where the last call stopped.

Request Body

application/json

withinDays?integer

Must be at least 1. Must not be greater than 90.

cursor?string

Response Body

application/json

curl -X GET "https://app.onlyfansapi.com/api/fanvue/fanvue_acct_XXXXXXXXXXXXXXX/fans/expiring?withinDays=7&cursor=eyJ2IjoxfQ" \  -H "Content-Type: application/json" \  -d '{}'
{
  "data": {
    "data": [
      {
        "uuid": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
        "handle": "sarah-jones",
        "displayName": "Sarah Jones",
        "nickname": null,
        "isTopSpender": false,
        "avatarUrl": null,
        "registeredAt": "2026-09-21T12:05:33.176Z",
        "subscription": {
          "status": "active",
          "price": 399,
          "amountPaid": 399,
          "currentPeriodStart": "2026-08-24T10:29:07.224Z",
          "currentPeriodEnd": "2026-09-24T10:28:59.873Z",
          "autoRenewalEnabled": false
        },
        "firstSubscribedAt": "2026-07-24T10:29:07.474Z"
      },
      {
        "uuid": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
        "handle": "mike-smith",
        "displayName": "Mike Smith",
        "nickname": null,
        "isTopSpender": false,
        "avatarUrl": null,
        "registeredAt": "2026-05-02T09:15:00.000Z",
        "subscription": {
          "status": "active",
          "price": 999,
          "amountPaid": 999,
          "currentPeriodStart": "2026-08-27T08:11:42.005Z",
          "currentPeriodEnd": "2026-09-27T08:11:42.005Z",
          "autoRenewalEnabled": false
        },
        "firstSubscribedAt": "2026-05-27T08:11:42.005Z"
      }
    ],
    "nextCursor": null
  },
  "_meta": {
    "_credits": {
      "used": 3,
      "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."
    }
  }
}