curl --request GET \
--url https://api.onlyx.ai/v1/stats/revenue \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.onlyx.ai/v1/stats/revenue"
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/revenue', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"asOf": "2026-09-26T14:02:11.000Z",
"balance": {
"availableCents": 820000,
"pendingCents": 511700
},
"byCreator": [
{
"creatorId": "cre_8f2c1a9b0d7e4c3f2a1b",
"grossCents": 5266250,
"name": "Mia Rose",
"netCents": 4213000,
"spenders": 612,
"transactions": 1840
}
],
"byDay": [
{
"date": "2026-09-25",
"grossCents": 214875,
"netCents": 171900
}
],
"bySeller": {
"ai": {
"grossCents": 2380625,
"netCents": 1904500,
"transactions": 612
},
"team": {
"grossCents": 387875,
"netCents": 310300,
"transactions": 138
},
"unattributedNetCents": 0
},
"byType": [
{
"grossCents": 2768500,
"netCents": 2214800,
"type": "ppv"
},
{
"grossCents": 1888000,
"netCents": 1510400,
"type": "subscription"
},
{
"grossCents": 609750,
"netCents": 487800,
"type": "tip"
}
],
"complete": true,
"coverageFrom": "2025-01-04",
"end": "2026-09-26",
"start": "2026-09-01",
"timezone": "Europe/London",
"totals": {
"feeCents": 1053250,
"grossCents": 5266250,
"netCents": 4213000,
"pendingNetCents": 511700,
"refundedNetCents": 2400,
"refundedTransactions": 2,
"settledNetCents": 3701300,
"spenders": 612,
"transactions": 1840,
"unknownSettlementNetCents": 0
}
}Get revenue
Returns earnings for a window: totals (net after OnlyFans’ fee, gross, fee, settled versus still clearing, refunds), a split by what was paid for, one entry per day, per creator, and paid-message sales by who sent them — the AI (ai) or your team (team). Choose the window with days, or with start and end (both included, workspace time zone). Figures come from each creator’s OnlyFans earnings ledger as OnlyX has read it; complete: false means some ledger could not be read in full and the totals are a lower bound. Cached for a few 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/revenue \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.onlyx.ai/v1/stats/revenue"
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/revenue', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"asOf": "2026-09-26T14:02:11.000Z",
"balance": {
"availableCents": 820000,
"pendingCents": 511700
},
"byCreator": [
{
"creatorId": "cre_8f2c1a9b0d7e4c3f2a1b",
"grossCents": 5266250,
"name": "Mia Rose",
"netCents": 4213000,
"spenders": 612,
"transactions": 1840
}
],
"byDay": [
{
"date": "2026-09-25",
"grossCents": 214875,
"netCents": 171900
}
],
"bySeller": {
"ai": {
"grossCents": 2380625,
"netCents": 1904500,
"transactions": 612
},
"team": {
"grossCents": 387875,
"netCents": 310300,
"transactions": 138
},
"unattributedNetCents": 0
},
"byType": [
{
"grossCents": 2768500,
"netCents": 2214800,
"type": "ppv"
},
{
"grossCents": 1888000,
"netCents": 1510400,
"type": "subscription"
},
{
"grossCents": 609750,
"netCents": 487800,
"type": "tip"
}
],
"complete": true,
"coverageFrom": "2025-01-04",
"end": "2026-09-26",
"start": "2026-09-01",
"timezone": "Europe/London",
"totals": {
"feeCents": 1053250,
"grossCents": 5266250,
"netCents": 4213000,
"pendingNetCents": 511700,
"refundedNetCents": 2400,
"refundedTransactions": 2,
"settledNetCents": 3701300,
"spenders": 612,
"transactions": 1840,
"unknownSettlementNetCents": 0
}
}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 - 64The last N calendar days including today (workspace time zone), 1 to 366. Ignored when start or end is sent.
1 <= x <= 366First day of the window (YYYY-MM-DD, workspace time zone), included.
Last day of the window (YYYY-MM-DD), included. The window never extends past today and keeps at most its latest 366 days.
Response
Earnings for the window: totals, by type, by day, by seller and by creator.
Revenue for a window. New fields may be added; ignore fields you do not know.
When these figures were read from the ledger (UTC).
Show child attributes
Show child attributes
Per creator, largest first.
Show child attributes
Show child attributes
One entry per day in the window, oldest first, including days with no earnings.
Show child attributes
Show child attributes
Paid-message sales in chats, split by who sent the message: the AI (ai) or your team (team).
Show child attributes
Show child attributes
The window split by what was paid for, largest first.
Show child attributes
Show child attributes
false when some creator's ledger could not be read in full, so the figures are a lower bound.
The oldest day the earnings ledger has been read back to for the worst-covered creator; earlier days may be missing.
Last day of the window, included.
First day of the window (YYYY-MM-DD), included.
The workspace time zone days are counted in.
Show child attributes
Show child attributes