Earnings
Earnings Overview
Returns aggregated earnings and activity stats for a date window — top-line totals plus per-section breakdowns (posts, streams, visitors, mass messages) with chart data. The "dashboard" view; for the per-transaction feed use List All Earnings. Requires permission api_earnings_read_overview.
https://public-api.fansmetric.comAuthorization
defaultAuthorizationBearer <token>Send your FansMetric API key as a Bearer token in the Authorization header.
In: header
Path Parameters
account_id*integerOnlyFans numeric account ID.
Query Parameters
start_datestringWindow start. Default 2 years ago, UTC. Format
YYYY-MM-DD HH:MM:SSor ISO 8601.end_datestringWindow end. Default end of today, UTC. Same format as
start_date.bystringNarrow the response to a single section. Values:
earnings(top-line only),posts,streams,visitors,messages,story,promo. Forwarded upstream as-is.byis an input vocabulary and does not always match the response key —by=messagesreturns the section keyedmassMessages.
Response Fields
data.earning.totalnumberNet earnings to the creator across the window.
data.earning.grossnumberGross earnings before fees/taxes.
data.earning.deltaintegerPercent change vs the prior equal-length window (
100= +100%, saturates at 100).data.postsobjectPosts section.
count= posts published;views= total post views;earnings= revenue attributed to posts. See Section shape.data.streamsobjectStreams section.
count.totalis a string duration (e.g."4h 12m");viewsis viewer count.data.visitorsobjectProfile visitors. Also carries
subscriptions.newandsubscriptions.renewcounters.data.massMessagesobjectMass-message activity.
count= messages sent;views= opens.data.<section>.hasStatisticbooleantrueif upstream has data for this section in the window.falsesections still return zeroed fields for layout stability.data.<section>.chartData[]arrayChart buckets
{ date, count }. Bucket granularity is window-dependent — read each point'sdaterather than assuming a period.countunits are section-defined — earnings for posts/streams/massMessages, visitor counts for visitors.dataobject | arrayEndpoint-specific payload. See the fields below for this route.
_meta._credits.usedintegerCredits consumed by this request (currently always
1)._meta._rate_limits.limit_minuteintegerMaximum requests per minute for the organization.
_meta._rate_limits.remaining_minuteintegerRemaining requests in the current minute window.
_meta._rate_limits.limit_dayintegerMaximum requests per day for the organization.
_meta._rate_limits.remaining_dayintegerRemaining requests in the current day window.
| Field | Type | Description |
|---|---|---|
| data.earning.total | number | Net earnings to the creator across the window. |
| data.earning.gross | number | Gross earnings before fees/taxes. |
| data.earning.delta | integer | Percent change vs the prior equal-length window (100 = +100%, saturates at 100). |
| data.posts | object | Posts section. count = posts published; views = total post views; earnings = revenue attributed to posts. See Section shape. |
| data.streams | object | Streams section. count.total is a string duration (e.g. "4h 12m"); views is viewer count. |
| data.visitors | object | Profile visitors. Also carries subscriptions.new and subscriptions.renew counters. |
| data.massMessages | object | Mass-message activity. count = messages sent; views = opens. |
| data.<section>.hasStatistic | boolean | true if upstream has data for this section in the window. false sections still return zeroed fields for layout stability. |
| data.<section>.chartData[] | array | Chart buckets { date, count }. Bucket granularity is window-dependent — read each point's date rather than assuming a period. count units are section-defined — earnings for posts/streams/massMessages, visitor counts for visitors. |
| data | object | array | Endpoint-specific payload. See the fields below for this route. |
| _meta._credits.used | integer | Credits consumed by this request (currently always 1). |
| _meta._rate_limits.limit_minute | integer | Maximum requests per minute for the organization. |
| _meta._rate_limits.remaining_minute | integer | Remaining requests in the current minute window. |
| _meta._rate_limits.limit_day | integer | Maximum requests per day for the organization. |
| _meta._rate_limits.remaining_day | integer | Remaining requests in the current day window. |
curl --request GET "https://public-api.fansmetric.com/v1/100000001/earnings/overview?start_date=2026-01-01%2000%3A00%3A00&end_date=2026-01-31%2023%3A59%3A59&by=sample_by" \
--header "Authorization: Bearer YOUR_API_KEY"Response
200