curl --request GET \
--url https://api.fanvue.com/v1/subscribers/{userUuid}/history \
--header 'Authorization: Bearer <token>' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>'import requests
url = "https://api.fanvue.com/v1/subscribers/{userUuid}/history"
headers = {
"X-Fanvue-API-Version": "<x-fanvue-api-version>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'X-Fanvue-API-Version': '<x-fanvue-api-version>',
Authorization: 'Bearer <token>'
}
};
fetch('https://api.fanvue.com/v1/subscribers/{userUuid}/history', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"source": "checkout_link",
"checkoutLinkUuid": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"type": "renew",
"paidAt": "2025-05-20T12:15:03.000Z",
"periodStart": "2025-05-20T12:40:00.000Z",
"periodEnd": "2025-06-19T12:40:00.000Z",
"amountPaid": 1500,
"intervalMonths": 1,
"followsLapse": false,
"refunded": false,
"chargedBack": false
},
{
"source": "profile",
"checkoutLinkUuid": null,
"type": "renew",
"paidAt": "2025-05-09T09:31:12.000Z",
"periodStart": "2025-05-09T10:00:00.000Z",
"periodEnd": "2025-06-08T10:00:00.000Z",
"amountPaid": 999,
"intervalMonths": 1,
"followsLapse": false,
"refunded": false,
"chargedBack": false
},
{
"source": "profile",
"checkoutLinkUuid": null,
"type": "subscribe",
"paidAt": "2025-02-08T10:00:00.000Z",
"periodStart": "2025-02-08T10:00:00.000Z",
"periodEnd": "2025-05-09T10:00:00.000Z",
"amountPaid": 2499,
"intervalMonths": 3,
"followsLapse": true,
"refunded": false,
"chargedBack": false
},
{
"source": "profile",
"checkoutLinkUuid": null,
"type": "trial",
"paidAt": "2024-12-01T18:22:40.000Z",
"periodStart": "2024-12-01T18:22:40.000Z",
"periodEnd": "2024-12-08T18:22:40.000Z",
"amountPaid": 0,
"intervalMonths": null,
"followsLapse": false,
"refunded": false,
"chargedBack": false
}
],
"nextCursor": null
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}Get subscriber history
Returns the fan’s subscription billing history with the creator, newest first: one item per paid subscription, trial or renewal charge, with the period it paid for. Use it to show when a fan subscribed, renewed, lapsed and came back, and what they paid each time. Former subscribers keep their history; a fan who was never billed returns an empty list.
Profile subscriptions are always included. Checkout-link subscriptions are included only when the token also holds read:creator and, for an agency acting on a creator’s behalf, the team member’s role has earnings:read: the same access the checkout-link subscriptions endpoint requires. Without it the history holds profile subscriptions only.
Refunded and charged-back charges stay in the history, flagged with refunded and chargedBack.
This is billing history, not a log of setting changes: whether the subscription currently auto-renews, and its current status, are on the subscriber (subscription.autoRenewalEnabled, subscription.status). When auto-renew was switched off is not recorded.
curl --request GET \
--url https://api.fanvue.com/v1/subscribers/{userUuid}/history \
--header 'Authorization: Bearer <token>' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>'import requests
url = "https://api.fanvue.com/v1/subscribers/{userUuid}/history"
headers = {
"X-Fanvue-API-Version": "<x-fanvue-api-version>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'X-Fanvue-API-Version': '<x-fanvue-api-version>',
Authorization: 'Bearer <token>'
}
};
fetch('https://api.fanvue.com/v1/subscribers/{userUuid}/history', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"source": "checkout_link",
"checkoutLinkUuid": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"type": "renew",
"paidAt": "2025-05-20T12:15:03.000Z",
"periodStart": "2025-05-20T12:40:00.000Z",
"periodEnd": "2025-06-19T12:40:00.000Z",
"amountPaid": 1500,
"intervalMonths": 1,
"followsLapse": false,
"refunded": false,
"chargedBack": false
},
{
"source": "profile",
"checkoutLinkUuid": null,
"type": "renew",
"paidAt": "2025-05-09T09:31:12.000Z",
"periodStart": "2025-05-09T10:00:00.000Z",
"periodEnd": "2025-06-08T10:00:00.000Z",
"amountPaid": 999,
"intervalMonths": 1,
"followsLapse": false,
"refunded": false,
"chargedBack": false
},
{
"source": "profile",
"checkoutLinkUuid": null,
"type": "subscribe",
"paidAt": "2025-02-08T10:00:00.000Z",
"periodStart": "2025-02-08T10:00:00.000Z",
"periodEnd": "2025-05-09T10:00:00.000Z",
"amountPaid": 2499,
"intervalMonths": 3,
"followsLapse": true,
"refunded": false,
"chargedBack": false
},
{
"source": "profile",
"checkoutLinkUuid": null,
"type": "trial",
"paidAt": "2024-12-01T18:22:40.000Z",
"periodStart": "2024-12-01T18:22:40.000Z",
"periodEnd": "2024-12-08T18:22:40.000Z",
"amountPaid": 0,
"intervalMonths": null,
"followsLapse": false,
"refunded": false,
"chargedBack": false
}
],
"nextCursor": null
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}read:fan— Access fan-related data and information within the platform.
Authorizations
OAuth 2.0 access token, presented as a JWT bearer token in the Authorization header. Obtain a token via the authorization-code flow; the scopes granted to the token determine which operations it may call.
Headers
API version to use for the request
"2025-06-26"
Path Parameters
UUID of the fan whose subscription history to retrieve
Query Parameters
Opaque pagination cursor from a previous response's nextCursor. It is bound to the creator and fan it was issued for.
Number of items to return (1-50, default: 15)
1 <= x <= 50Was this page helpful?