curl --request POST \
--url https://api.fanvue.com/v1/creators/{creatorUserUuid}/insights/fans/batch \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>' \
--data '
{
"userUuids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
'import requests
url = "https://api.fanvue.com/v1/creators/{creatorUserUuid}/insights/fans/batch"
payload = { "userUuids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"] }
headers = {
"X-Fanvue-API-Version": "<x-fanvue-api-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Fanvue-API-Version': '<x-fanvue-api-version>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({userUuids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a']})
};
fetch('https://api.fanvue.com/v1/creators/{creatorUserUuid}/insights/fans/batch', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"11111111-1111-4111-8111-111111111111": {
"status": "subscriber",
"spending": {
"lastPurchaseAt": "2026-04-12T08:32:00.000Z",
"lastValidPurchaseAt": "2026-03-30T19:05:00.000Z",
"total": {
"gross": 7000,
"total": 7000,
"netTotal": 7000
},
"maxSinglePayment": {
"gross": 5000,
"total": 5000
},
"sources": {
"subscription": {
"gross": 7000,
"total": 7000,
"netTotal": 7000,
"count": 7,
"netCount": 7,
"average": 1000,
"netAverage": 1000
},
"tips": {
"gross": 5000,
"total": 5000,
"netTotal": 0,
"count": 2,
"netCount": 0,
"average": 2500,
"netAverage": null
}
}
},
"subscription": {
"createdAt": "2026-01-15T00:00:00.000Z",
"renewsAt": "2026-06-15T00:00:00.000Z",
"autoRenewalEnabled": true
}
},
"22222222-2222-4222-8222-222222222222": {
"error": "not_found"
},
"33333333-3333-4333-9333-333333333333": {
"error": "internal"
}
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}Get fan insights in bulk for a creator (POST batch)
Returns detailed insights for up to 100 fans of the specified creator in a single request, keyed by the input fan UUID.
Per-key errors are reported inside the 200 response body so a single forbidden or missing fan never collapses the whole request.
{ "error": "forbidden" | "not_found" | "internal" }.curl --request POST \
--url https://api.fanvue.com/v1/creators/{creatorUserUuid}/insights/fans/batch \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>' \
--data '
{
"userUuids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
'import requests
url = "https://api.fanvue.com/v1/creators/{creatorUserUuid}/insights/fans/batch"
payload = { "userUuids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"] }
headers = {
"X-Fanvue-API-Version": "<x-fanvue-api-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Fanvue-API-Version': '<x-fanvue-api-version>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({userUuids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a']})
};
fetch('https://api.fanvue.com/v1/creators/{creatorUserUuid}/insights/fans/batch', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"11111111-1111-4111-8111-111111111111": {
"status": "subscriber",
"spending": {
"lastPurchaseAt": "2026-04-12T08:32:00.000Z",
"lastValidPurchaseAt": "2026-03-30T19:05:00.000Z",
"total": {
"gross": 7000,
"total": 7000,
"netTotal": 7000
},
"maxSinglePayment": {
"gross": 5000,
"total": 5000
},
"sources": {
"subscription": {
"gross": 7000,
"total": 7000,
"netTotal": 7000,
"count": 7,
"netCount": 7,
"average": 1000,
"netAverage": 1000
},
"tips": {
"gross": 5000,
"total": 5000,
"netTotal": 0,
"count": 2,
"netCount": 0,
"average": 2500,
"netAverage": null
}
}
},
"subscription": {
"createdAt": "2026-01-15T00:00:00.000Z",
"renewsAt": "2026-06-15T00:00:00.000Z",
"autoRenewalEnabled": true
}
},
"22222222-2222-4222-8222-222222222222": {
"error": "not_found"
},
"33333333-3333-4333-9333-333333333333": {
"error": "internal"
}
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}read:creator— Access creator profiles, content, and creator-specific information.read:insights— Access analytics, metrics, and insights data for performance tracking.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
Body
Array of fan UUIDs to fetch insights for (1-100)
1 - 100 elementsResponse
Per-key insights or error for each requested fan. Always 200 when the request itself is valid, even if every key fails.
Map of input fan UUID to insights or a per-key error (forbidden, not_found, or internal).
- Option 1
- Option 2
Show child attributes
Show child attributes
Was this page helpful?