curl --request GET \
--url https://api.fanvue.com/v1/agencies/insights/chatter-earnings \
--header 'Authorization: Bearer <token>' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>'import requests
url = "https://api.fanvue.com/v1/agencies/insights/chatter-earnings"
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/agencies/insights/chatter-earnings', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"chatterUuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"chatterName": "Top Performer",
"avatarUrl": "https://cdn.example.com/avatars/a1b2c3d4.jpg",
"isCurrentMember": true,
"creatorUuid": "c3d4e5f6-7g8h-9i0j-1k2l-m3n4o5p6q7r8",
"creatorName": "Sarah Jones",
"creatorHandle": "sarah-jones",
"creatorAvatarUrl": null,
"revenue": 132500,
"ppvRevenue": 124500,
"ppvsSold": 41,
"thisPeriodRevenue": 110000,
"earlierSendsRevenue": 14500,
"earlierSendsCount": 5,
"tipsRevenue": 8000,
"tipsCount": 3,
"netRevenue": 106000,
"ppvNetRevenue": 99600,
"thisPeriodNetRevenue": 88000,
"earlierSendsNetRevenue": 11600,
"tipsNetRevenue": 6400,
"fanvueFee": 26500,
"refundAmount": 2000,
"refundsCount": 1,
"chargebackAmount": 0,
"chargebacksCount": 0
},
{
"chatterUuid": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"chatterName": "Rookie",
"avatarUrl": null,
"isCurrentMember": false,
"creatorUuid": "c3d4e5f6-7g8h-9i0j-1k2l-m3n4o5p6q7r8",
"creatorName": "Sarah Jones",
"creatorHandle": "sarah-jones",
"creatorAvatarUrl": null,
"revenue": 6000,
"ppvRevenue": 6000,
"ppvsSold": 3,
"thisPeriodRevenue": 6000,
"earlierSendsRevenue": 0,
"earlierSendsCount": 0,
"tipsRevenue": 0,
"tipsCount": 0,
"netRevenue": 4800,
"ppvNetRevenue": 4800,
"thisPeriodNetRevenue": 4800,
"earlierSendsNetRevenue": 0,
"tipsNetRevenue": 0,
"fanvueFee": 1200,
"refundAmount": 0,
"refundsCount": 0,
"chargebackAmount": 0,
"chargebacksCount": 0
}
],
"nextCursor": null,
"total": 2,
"totals": {
"revenue": 141000,
"ppvRevenue": 130500,
"ppvsSold": 44,
"thisPeriodRevenue": 116000,
"earlierSendsRevenue": 14500,
"earlierSendsCount": 5,
"tipsRevenue": 10500,
"tipsCount": 4,
"netRevenue": 112800,
"ppvNetRevenue": 104400,
"thisPeriodNetRevenue": 92800,
"earlierSendsNetRevenue": 11600,
"tipsNetRevenue": 8400,
"fanvueFee": 28200,
"refundAmount": 2000,
"refundsCount": 1,
"chargebackAmount": 0,
"chargebacksCount": 0
}
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}List chatter earnings by creator (cursor-paginated)
Returns one row per chatter and creator for the authenticated user’s agency over the requested period: what each chatter earned on each creator, for payroll. The rows come from the same read as the earnings leaderboard breakdown, so the two always agree.
Earnings are attributed to the purchase date. revenue is ppvRevenue plus tipsRevenue, all gross USD cents. A tip is credited to the chatter who sent the last 1:1 message in that chat shortly before it was paid. Refunds and chargebacks are reported in their own fields and never subtracted. Net figures are after the Fanvue fee.
Chatters whose accounts are deleted or banned, and tips credited to no chatter, are not returned, so the rows alone do not sum to the agency’s total chat earnings. totals does include them: it is the same for every page and equals the leaderboard’s totals for the same filters and period.
Rows are ordered by revenue descending. Page with the opaque nextCursor from the previous response, keeping the same filters. Pages are re-read on every request, so a period that includes the current day can shift between pages as new sales land; request a period that has ended for a stable payroll export. Without both startDate and endDate the period is all time.
Agencies without the chatter earnings breakdown enabled get a 404.
curl --request GET \
--url https://api.fanvue.com/v1/agencies/insights/chatter-earnings \
--header 'Authorization: Bearer <token>' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>'import requests
url = "https://api.fanvue.com/v1/agencies/insights/chatter-earnings"
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/agencies/insights/chatter-earnings', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"chatterUuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"chatterName": "Top Performer",
"avatarUrl": "https://cdn.example.com/avatars/a1b2c3d4.jpg",
"isCurrentMember": true,
"creatorUuid": "c3d4e5f6-7g8h-9i0j-1k2l-m3n4o5p6q7r8",
"creatorName": "Sarah Jones",
"creatorHandle": "sarah-jones",
"creatorAvatarUrl": null,
"revenue": 132500,
"ppvRevenue": 124500,
"ppvsSold": 41,
"thisPeriodRevenue": 110000,
"earlierSendsRevenue": 14500,
"earlierSendsCount": 5,
"tipsRevenue": 8000,
"tipsCount": 3,
"netRevenue": 106000,
"ppvNetRevenue": 99600,
"thisPeriodNetRevenue": 88000,
"earlierSendsNetRevenue": 11600,
"tipsNetRevenue": 6400,
"fanvueFee": 26500,
"refundAmount": 2000,
"refundsCount": 1,
"chargebackAmount": 0,
"chargebacksCount": 0
},
{
"chatterUuid": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"chatterName": "Rookie",
"avatarUrl": null,
"isCurrentMember": false,
"creatorUuid": "c3d4e5f6-7g8h-9i0j-1k2l-m3n4o5p6q7r8",
"creatorName": "Sarah Jones",
"creatorHandle": "sarah-jones",
"creatorAvatarUrl": null,
"revenue": 6000,
"ppvRevenue": 6000,
"ppvsSold": 3,
"thisPeriodRevenue": 6000,
"earlierSendsRevenue": 0,
"earlierSendsCount": 0,
"tipsRevenue": 0,
"tipsCount": 0,
"netRevenue": 4800,
"ppvNetRevenue": 4800,
"thisPeriodNetRevenue": 4800,
"earlierSendsNetRevenue": 0,
"tipsNetRevenue": 0,
"fanvueFee": 1200,
"refundAmount": 0,
"refundsCount": 0,
"chargebackAmount": 0,
"chargebacksCount": 0
}
],
"nextCursor": null,
"total": 2,
"totals": {
"revenue": 141000,
"ppvRevenue": 130500,
"ppvsSold": 44,
"thisPeriodRevenue": 116000,
"earlierSendsRevenue": 14500,
"earlierSendsCount": 5,
"tipsRevenue": 10500,
"tipsCount": 4,
"netRevenue": 112800,
"ppvNetRevenue": 104400,
"thisPeriodNetRevenue": 92800,
"earlierSendsNetRevenue": 11600,
"tipsNetRevenue": 8400,
"fanvueFee": 28200,
"refundAmount": 2000,
"refundsCount": 1,
"chargebackAmount": 0,
"chargebacksCount": 0
}
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}read:agency— Read agency information, including the agency’s team members.
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
Opaque pagination cursor from a previous response's nextCursor. Omit to fetch the first page.
Number of items to return (1-50, default: 15)
1 <= x <= 50Start 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). Stats are aggregated by UTC day.
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). Stats are aggregated by UTC day.
Comma-separated chatter UUIDs to filter by (max 100). Defaults to all chatters in the agency.
UUID of one of the agency's creators to restrict rows to. A creator outside the agency fails the request with 403. Defaults to every creator.
Response
Cursor-paginated chatter earnings by creator
Array of chatter × creator rows, ordered by revenue descending
Show child attributes
Show child attributes
Opaque cursor for the next page, or null when there are no more results
Total number of items across all pages, or null when no count is computed
Every chatter's earnings summed for the filters, across all pages: the rows plus deleted or banned chatters and tips credited to no chatter. Equals the earnings leaderboard's totals for the same agency, filters and period.
Show child attributes
Show child attributes
Was this page helpful?