/v1 is the current URL version. The unversioned paths you call today (/chats, /posts, and so on) and their explicit /v0 twins are the previous version. They keep working, and they are still in this reference: use the version selector in the top bar of the API Reference to move between v1 and v0.
The date version and the URL version are independent. Keep sending
X-Fanvue-API-Version: 2025-06-26 when you move to /v1.Why move
Legacy lists page withpage and size. The database has to scan past every earlier row to reach page 40, so a deep crawl gets slower the further it goes and costs the platform work proportional to depth.
/v1 lists page with a cursor. Each page starts exactly where the previous one ended, so page 400 costs the same as page 1.
What actually changes
Most of the surface does not change at all. For the large majority of endpoints,/v1/<path> is the same path, the same request body, the same response fields and the same OAuth scopes as <path>. Prefix the path and you are done.
The changes are concentrated in list endpoints.
Cursor pagination replaces page and size
total. Many return only data and nextCursor:
nextCursor you were given as the cursor of the next request, and stop when nextCursor is null.
totalis not always there. Roughly half of the v1 lists do not carry the field at all, and some of those that do return it asnullwhere the count is too expensive to compute. The mapping table below shows which envelope each endpoint returns; read it rather than assuming.hasMoreis gone;nextCursor === nullis the end of the collection.- Keep
sizeconstant for the whole walk. A cursor is only valid for the page size it was issued with. Changingsizemid-walk moves the page boundary. - A cursor is opaque. Do not parse it, store it long term, or build one yourself. Pass back exactly what you were given.
The two message endpoints change more
GET /v1/chats/{userUuid}/messages and GET /v1/creators/{creatorUserUuid}/chats/{userUuid}/messages do not use the standard cursor envelope. They take limit, sentBefore and receivedBefore in place of page, size, startDate and endDate, and answer with { data, dateFilter }.
Some lists gain filters
A few v1 lists accept filters their predecessor did not, for examplesearch and filter on /v1/agencies/chats and a date range and sort on /v1/creators/{creatorUserUuid}/subscribers. These are additive. See the mapping below for the exact set per endpoint.
Endpoints with no v1
App Store endpoints (/apps/*) have no /v1 path, so they do not appear under v1 in the reference. Keep calling them on the unversioned path.
Account health is split rather than absent. The self-scoped /account-health and /account-health/flagged-media are v0 only, but the creator-scoped pair does have a v1 form and is listed in the mapping below.
Endpoint mapping
Every endpoint not listed below is unchanged apart from the prefix: call/v1/<path> exactly as you call <path> today.
/checkout-links, /collections, /media-links, /creators/{creatorUserUuid}/checkout-links and /creators/{creatorUserUuid}/vault/folders accept page and size on the legacy version even though the legacy reference never listed them. On /v1 the cursor parameters are declared, so what you see is what the endpoint accepts.Migration checklist
1
Prefix the paths
Change
<path> to /v1/<path>. Keep the X-Fanvue-API-Version header exactly as it is.2
Replace page loops with cursor loops
Stop incrementing
page. Read nextCursor from each response, pass it as cursor on the next request, and stop when it is null. Hold size constant for the whole walk.3
Stop reading pagination and hasMore
Read
nextCursor instead. Only depend on total where you have checked it is not null for the endpoint you are calling.4
Handle the two message endpoints separately
They take
limit, sentBefore and receivedBefore and return { data, dateFilter }.5
Check the endpoints with no v1
/apps/* stays on the unversioned path, as do the self-scoped /account-health and /account-health/flagged-media. The creator-scoped account-health endpoints do move to /v1.