Earnings
List All Earnings
Returns the account's per-transaction earnings feed across all revenue streams combined — subscriptions, tips, PPV post purchases, paid messages, stream earnings. One row per payment. Filter to a single stream with type; narrow tips to a single surface with tips_source. Requires permission api_earnings_list.
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_datestringLower bound on
createdAt. Default 2 years ago, UTC. FormatYYYY-MM-DD HH:MM:SSor ISO 8601 (Tis normalized to a space).end_datestringOptional upper bound on
createdAt. Same format asstart_date.markerstringPagination cursor (unix seconds). Omit on the first page; pass the previous response's
nextMarkerfor subsequent pages.typestringRevenue-stream filter. Values:
subscribes,tips,post,chat_messages,stream. Omit for everything.tips_sourcestringOnly meaningful when
type=tips. Narrows to a single surface. Values:profile,post_all,chat,stream,story. Forwarded upstream astipsSource.
Response Fields
data.list[]arrayTransactions in this page, newest first.
data.list[].idstringOnlyFans transaction ID (hex).
data.list[].amountnumberGross transaction amount in
currency.data.list[].vatAmountnumberVAT collected from the fan.
data.list[].taxAmountnumberOther tax withheld from the creator.
data.list[].mediaTaxAmountnumberMedia-specific tax withheld (digital-goods tax in some jurisdictions).
data.list[].feenumberOnlyFans platform fee (typically 20% of
amount).data.list[].netnumberAmount credited to the creator (
amount − fee − taxes).data.list[].currencystringISO 4217 currency code.
data.list[].createdAtstringISO 8601 transaction timestamp.
data.list[].descriptionstringHuman-readable label containing an HTML
<a>to the paying fan. Common prefixes:Payment for message from …,Tip from …,Post purchase by …,Subscription from ….data.list[].statusstringSettlement status.
loadingwhile still in thepayoutPendingDayshold; transitions to settled after.data.list[].payoutPendingDaysintegerDays the row stays pending before counting toward
payoutAvailable.data.list[].userobjectPaying fan:
id,username,name,displayName,avatar,avatarThumbs.data.markerintegerCursor used to fetch this page (unix seconds).
data.hasMorebooleanWhether more pages remain.
data.nextMarkerintegerCursor for the next page. Absent on the last page.
dataobject | arrayEndpoint-specific payload. See the fields below for this route.
_pagination.next_pagestringRelative URL for the next page, with the cursor or offset already applied. Append it to the API base URL and send it as-is. Omitted entirely on the last page.
_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.list[] | array | Transactions in this page, newest first. |
| data.list[].id | string | OnlyFans transaction ID (hex). |
| data.list[].amount | number | Gross transaction amount in currency. |
| data.list[].vatAmount | number | VAT collected from the fan. |
| data.list[].taxAmount | number | Other tax withheld from the creator. |
| data.list[].mediaTaxAmount | number | Media-specific tax withheld (digital-goods tax in some jurisdictions). |
| data.list[].fee | number | OnlyFans platform fee (typically 20% of amount). |
| data.list[].net | number | Amount credited to the creator (amount − fee − taxes). |
| data.list[].currency | string | ISO 4217 currency code. |
| data.list[].createdAt | string | ISO 8601 transaction timestamp. |
| data.list[].description | string | Human-readable label containing an HTML <a> to the paying fan. Common prefixes: Payment for message from …, Tip from …, Post purchase by …, Subscription from …. |
| data.list[].status | string | Settlement status. loading while still in the payoutPendingDays hold; transitions to settled after. |
| data.list[].payoutPendingDays | integer | Days the row stays pending before counting toward payoutAvailable. |
| data.list[].user | object | Paying fan: id, username, name, displayName, avatar, avatarThumbs. |
| data.marker | integer | Cursor used to fetch this page (unix seconds). |
| data.hasMore | boolean | Whether more pages remain. |
| data.nextMarker | integer | Cursor for the next page. Absent on the last page. |
| data | object | array | Endpoint-specific payload. See the fields below for this route. |
| _pagination.next_page | string | Relative URL for the next page, with the cursor or offset already applied. Append it to the API base URL and send it as-is. Omitted entirely on the last page. |
| _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?start_date=2026-01-01%2000%3A00%3A00&end_date=2026-01-31%2023%3A59%3A59&marker=sample_marker" \
--header "Authorization: Bearer YOUR_API_KEY"Response
200