curl --request GET \
--url https://api.fanvue.com/v1/insights/earnings/summary \
--header 'Authorization: Bearer <token>' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>'import requests
url = "https://api.fanvue.com/v1/insights/earnings/summary"
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/insights/earnings/summary', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"totals": {
"allTime": {
"gross": 1250000,
"net": 1037500
},
"thisMonth": {
"gross": 120000,
"net": 99000,
"previousMonthGross": 100000,
"previousMonthNet": 82500,
"grossChangePercentage": 20,
"netChangePercentage": 20
}
},
"breakdownBySource": {
"subs": {
"gross": 50000,
"net": 41250
},
"messages": {
"gross": 15000,
"net": 12375
},
"posts": {
"gross": 25000,
"net": 20625
},
"tips": {
"gross": 12000,
"net": 9900
},
"referrals": {
"gross": 4000,
"net": 3300
},
"renewals": {
"gross": 10000,
"net": 8250
},
"other": {
"gross": 4000,
"net": 3300
}
},
"earningsByType": {
"renewals": {
"gross": 10000,
"net": 8250
},
"messages": {
"gross": 15000,
"net": 12375
},
"tips": {
"gross": 12000,
"net": 9900
},
"subs": {
"gross": 50000,
"net": 41250
}
},
"overTime": [
{
"periodStart": "2026-03-01T00:00:00.000Z",
"gross": 24000,
"net": 19800
},
{
"periodStart": "2026-03-02T00:00:00.000Z",
"gross": 18000,
"net": 14850
}
],
"averageByDayOfWeek": {
"1": 11000,
"2": 9500,
"3": 10250,
"4": 9800,
"5": 12000,
"6": 8700,
"7": 9100
},
"averageByHourOfDay": {
"0": 0,
"1": 0,
"2": 0,
"3": 0,
"4": 0,
"5": 0,
"6": 0,
"7": 0,
"8": 1200,
"9": 2300,
"10": 2800,
"11": 3200,
"12": 3500,
"13": 3700,
"14": 4200,
"15": 3900,
"16": 3300,
"17": 3000,
"18": 2600,
"19": 2100,
"20": 1700,
"21": 1300,
"22": 900,
"23": 400
},
"period": {
"startDate": "2026-03-01T00:00:00.000Z",
"endDate": "2026-04-01T00:00:00.000Z",
"granularity": "day",
"timezone": "UTC"
}
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}Get aggregated earnings summary
Returns pre-aggregated earnings metrics for the authenticated creator, including all-time totals, month-over-month comparisons, source/type breakdowns, chart series, and averages.
Almost every money field pairs gross (pre-fee earnings) with net (the creator’s cut after Fanvue fees); refunds and chargebacks are left out of both rather than subtracted. The exception is averageByDayOfWeek and averageByHourOfDay: both are gross-only scalars with no net counterpart to select. gross is not always money a fan paid: referral, affiliate and giveaway earnings are creator rewards that no fan paid for, and they reach this summary through referrals and other.
Unlike the fan insights endpoints, results here are cached for up to 10 minutes per creator and per parameter set, so a figure can lag a payment that has already settled.
curl --request GET \
--url https://api.fanvue.com/v1/insights/earnings/summary \
--header 'Authorization: Bearer <token>' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>'import requests
url = "https://api.fanvue.com/v1/insights/earnings/summary"
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/insights/earnings/summary', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"totals": {
"allTime": {
"gross": 1250000,
"net": 1037500
},
"thisMonth": {
"gross": 120000,
"net": 99000,
"previousMonthGross": 100000,
"previousMonthNet": 82500,
"grossChangePercentage": 20,
"netChangePercentage": 20
}
},
"breakdownBySource": {
"subs": {
"gross": 50000,
"net": 41250
},
"messages": {
"gross": 15000,
"net": 12375
},
"posts": {
"gross": 25000,
"net": 20625
},
"tips": {
"gross": 12000,
"net": 9900
},
"referrals": {
"gross": 4000,
"net": 3300
},
"renewals": {
"gross": 10000,
"net": 8250
},
"other": {
"gross": 4000,
"net": 3300
}
},
"earningsByType": {
"renewals": {
"gross": 10000,
"net": 8250
},
"messages": {
"gross": 15000,
"net": 12375
},
"tips": {
"gross": 12000,
"net": 9900
},
"subs": {
"gross": 50000,
"net": 41250
}
},
"overTime": [
{
"periodStart": "2026-03-01T00:00:00.000Z",
"gross": 24000,
"net": 19800
},
{
"periodStart": "2026-03-02T00:00:00.000Z",
"gross": 18000,
"net": 14850
}
],
"averageByDayOfWeek": {
"1": 11000,
"2": 9500,
"3": 10250,
"4": 9800,
"5": 12000,
"6": 8700,
"7": 9100
},
"averageByHourOfDay": {
"0": 0,
"1": 0,
"2": 0,
"3": 0,
"4": 0,
"5": 0,
"6": 0,
"7": 0,
"8": 1200,
"9": 2300,
"10": 2800,
"11": 3200,
"12": 3500,
"13": 3700,
"14": 4200,
"15": 3900,
"16": 3300,
"17": 3000,
"18": 2600,
"19": 2100,
"20": 1700,
"21": 1300,
"22": 900,
"23": 400
},
"period": {
"startDate": "2026-03-01T00:00:00.000Z",
"endDate": "2026-04-01T00:00:00.000Z",
"granularity": "day",
"timezone": "UTC"
}
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}read:insights— Access analytics, metrics, and insights data for performance tracking.
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"
Query Parameters
Start date as ISO 8601 datetime string with optional timezone offset (e.g., 2024-10-20T00:00:00+01:00 or 2024-10-20T00:00:00Z).
End date as ISO 8601 datetime string with optional timezone offset (e.g., 2024-10-25T00:00:00+01:00 or 2024-10-25T00:00:00Z). Non-inclusive - data before this date is included.
Aggregation granularity for the over-time chart
day, week IANA timezone used for period grouping and month boundaries (e.g., Europe/London, America/New_York)
Response
Aggregated earnings summary
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Average gross earnings by ISO day-of-week (1=Monday, 7=Sunday)
Show child attributes
Show child attributes
Average gross earnings by hour-of-day in the selected timezone (0-23)
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?