curl --request GET \
--url https://api.fanvue.com/v1/agencies/insights/demographics \
--header 'Authorization: Bearer <token>' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>'import requests
url = "https://api.fanvue.com/v1/agencies/insights/demographics"
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/demographics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"country": "US",
"fanCount": 842,
"gross": 2410000,
"net": 2048500
},
{
"country": "GB",
"fanCount": 311,
"gross": 890000,
"net": 756500
},
{
"country": "DE",
"fanCount": 146,
"gross": 412000,
"net": 350200
}
],
"nextCursor": null,
"total": null
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}List agency fan spend by country (cursor-paginated)
Returns the agency’s paying fans grouped by billing country over the requested date range, ordered by fan count descending, then gross spend, then country code. Fans whose country is unknown are excluded, so shares should be computed against the returned rows rather than against the agency’s total fan count.
Every row carries both figures: gross is what payers from that country paid, net is the creators’ cut after platform fees. Both are already net of refunds and chargebacks, so either can be negative for a country whose only activity in the range was a reversal.
The payer is not always a fan: an App Store invoice records a creator buying an app from its developer, and the live branch that serves the current day and either partial edge day counts it, so a country’s figures can include creator-to-developer spend.
Page with the opaque nextCursor from the previous response. The result set is bounded by the requested date range, so total is not computed and is always null.
curl --request GET \
--url https://api.fanvue.com/v1/agencies/insights/demographics \
--header 'Authorization: Bearer <token>' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>'import requests
url = "https://api.fanvue.com/v1/agencies/insights/demographics"
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/demographics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"country": "US",
"fanCount": 842,
"gross": 2410000,
"net": 2048500
},
{
"country": "GB",
"fanCount": 311,
"gross": 890000,
"net": 756500
},
{
"country": "DE",
"fanCount": 146,
"gross": 412000,
"net": 350200
}
],
"nextCursor": null,
"total": null
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}read:agency— Read agency information, including the agency’s team members.read:creator— Access creator profiles, content, and creator-specific information.
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 of the date range (inclusive). UTC ISO 8601 datetime with offset.
End of the date range (exclusive). UTC ISO 8601 datetime with offset.
Comma-separated list of creator UUIDs to restrict results to a subset of the agency's managed creators (max 50). Every uuid must belong to the agency: one that does not fails the whole request with 403 rather than being ignored. Comma-separated list of creator UUIDs (max 50)
50Response
Cursor-paginated fan-country distribution
Array of fan-country rows, ordered by fan count 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
Was this page helpful?