curl --request GET \
--url https://api.onlyx.ai/v1/stats/audience \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.onlyx.ai/v1/stats/audience"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.onlyx.ai/v1/stats/audience', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"activity": {
"last30Days": 1311,
"last7Days": 640,
"last90Days": 1950
},
"asOf": "2026-09-26T14:00:02.000Z",
"fans": {
"active": 2210,
"expired": 520,
"spenders": 1439,
"total": 2841,
"unknown": 111
},
"renewal": {
"off": 318,
"on": 1892
},
"retention": {
"currentEnd": "2026-09-25",
"currentStart": "2026-09-19",
"previousEnd": "2026-09-18",
"previousFans": 580,
"previousStart": "2026-09-12",
"rate": 0.693,
"retainedFans": 402
},
"spendBands": [
{
"band": "none",
"fans": 1402
},
{
"band": "under_50",
"fans": 1022
},
{
"band": "50_to_200",
"fans": 314
},
{
"band": "200_plus",
"fans": 103
}
],
"timezone": "Europe/London"
}Get the audience
Summarises the fans: how many are active, expired or not yet reported by OnlyFans, auto-renew among active fans, how they spread over lifetime-spend bands, how many wrote in the last 7, 30 and 90 days, and week-over-week retention of fans who write. Covers every creator the credential can see, or one with creatorId (a creator it cannot see is 404 CREATOR_NOT_FOUND). Cached for several minutes. Limited to 20 requests per minute per credential across all /stats endpoints.
Scope: requires stats:read.
Rate limits: 20 requests to /stats endpoints per 60 seconds per credential — on top of the general limit of 120 requests per 60 seconds per credential.
curl --request GET \
--url https://api.onlyx.ai/v1/stats/audience \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.onlyx.ai/v1/stats/audience"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.onlyx.ai/v1/stats/audience', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"activity": {
"last30Days": 1311,
"last7Days": 640,
"last90Days": 1950
},
"asOf": "2026-09-26T14:00:02.000Z",
"fans": {
"active": 2210,
"expired": 520,
"spenders": 1439,
"total": 2841,
"unknown": 111
},
"renewal": {
"off": 318,
"on": 1892
},
"retention": {
"currentEnd": "2026-09-25",
"currentStart": "2026-09-19",
"previousEnd": "2026-09-18",
"previousFans": 580,
"previousStart": "2026-09-12",
"rate": 0.693,
"retainedFans": 402
},
"spendBands": [
{
"band": "none",
"fans": 1402
},
{
"band": "under_50",
"fans": 1022
},
{
"band": "50_to_200",
"fans": 314
},
{
"band": "200_plus",
"fans": 103
}
],
"timezone": "Europe/London"
}Authorizations
An API key (onx_sk_…) created in OnlyX under Settings → API & MCP, or an OAuth access token (onx_at_…) issued to a connected app. Send it as Authorization: Bearer <credential>. API keys may also be sent as X-API-Key: <key>.
Query Parameters
Only this creator (cre_…). Without it, every creator the credential can see. A creator the credential cannot see is 404 CREATOR_NOT_FOUND, never an empty report.
1 - 64Response
The fans by status, renewal, spend band, activity and retention.
Who the fans are: subscription status, renewal, spend and activity. New fields may be added.
Fans who wrote to a creator recently.
Show child attributes
Show child attributes
When the activity figures were computed (UTC).
Show child attributes
Show child attributes
Auto-renew among active fans.
Show child attributes
Show child attributes
Week-over-week: of the fans who wrote in one week, how many wrote again the next.
Show child attributes
Show child attributes
Fans by lifetime spend, every band listed.
Show child attributes
Show child attributes