Fans
FansMetric dataGet Fan Stats
A fan's spending split by account — one row per account you name, biggest spender first. Accounts they never bought from come back at zero rather than being dropped. The per-account view that List Fans rolls into a single total. Requires permission api_fans_read_stats.
https://public-api.fansmetric.comAuthorization
defaultAuthorizationBearer <token>Send your FansMetric API key as a Bearer token in the Authorization header.
In: header
Path Parameters
fan_id*integerThe fan's OnlyFans numeric user ID.
Request Body
application/jsonaccount_ids*arrayArray of OnlyFans numeric account IDs to report on. Every one you name gets a row, including accounts the fan has never bought from — those come back at
0with null dates.
Response Fields
data.stats[].account_idstringOnlyFans numeric account ID — the same value you sent in
account_ids.data.stats[].account_namestringThe account's OnlyFans username.
data.stats[].total_spendnumberGross lifetime spend by this fan on this account.
data.stats[].purchase_countintegerNumber of non-refunded transactions.
data.stats[].largest_purchasenumberSingle biggest transaction.
data.stats[].average_purchasenumberMean transaction value.
data.stats[].first_purchase_atstring | nullTheir first purchase on this account (RFC 3339, UTC).
nullwhen they have never bought from it.data.stats[].last_purchase_atstring | nullTheir most recent purchase on this account (RFC 3339, UTC). Same field name as on List Fans, where it spans every account you named rather than one.
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.stats[].account_id | string | OnlyFans numeric account ID — the same value you sent in account_ids. |
| data.stats[].account_name | string | The account's OnlyFans username. |
| data.stats[].total_spend | number | Gross lifetime spend by this fan on this account. |
| data.stats[].purchase_count | integer | Number of non-refunded transactions. |
| data.stats[].largest_purchase | number | Single biggest transaction. |
| data.stats[].average_purchase | number | Mean transaction value. |
| data.stats[].first_purchase_at | string | null | Their first purchase on this account (RFC 3339, UTC). null when they have never bought from it. |
| data.stats[].last_purchase_at | string | null | Their most recent purchase on this account (RFC 3339, UTC). Same field name as on List Fans, where it spans every account you named rather than one. |
| 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 POST "https://public-api.fansmetric.com/v1/fans/XXXXX/stats" \
--header "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"account_ids": ["100000002", "100000001"]
}'Response
200