Fans

FansMetric data

Get Fan Transactions

Every purchase one fan has made across the accounts you name, newest first, each with what the fan paid and what the creator kept. Refunds and chargebacks are included here, unlike the spend totals elsewhere, so a reversal shows up next to the charge it cancels. Requires permission api_fans_read_transactions.

https://public-api.fansmetric.com
POST/v1/fans/{fan_id}/transactions
Bearer

Authorization

default
AuthorizationBearer <token>

Send your FansMetric API key as a Bearer token in the Authorization header.

In: header

Path Parameters

  • fan_id*integer

    The fan's OnlyFans numeric user ID.

Request Body

application/json
  • account_ids*array

    Array of OnlyFans numeric account IDs.

  • limitinteger

    Default 25, min 1, max 100.

  • offsetinteger

    Default 0.

  • categoriesarray

    Keep only these transaction kinds. Any of tip, message, recurring_subscription, new_subscription, unlock, unknown. Absent or [] means every category. An unrecognised value returns 400 listing the allowed set — it never silently matches nothing.

  • statusesarray

    Keep only these statuses. Any of done, undo, pending_return, loading. Absent or [] means every status, chargebacks included. An unrecognised value returns 400.

  • fromstring

    Window start, inclusive. YYYY-MM-DD, YYYY-MM-DD HH:MM:SS, RFC 3339, now, or a relative shorthand like -30days. Absent means no lower bound.

  • tostring

    Window end, inclusive. Same formats. Absent means no upper bound. Sending from later than to returns 400.

Response Fields

  • data.transactions[].idstring

    OnlyFans' own transaction ID — the same one OnlyFans shows for this charge.

  • data.transactions[].transaction_created_atstring | null

    When the transaction occurred (RFC 3339, UTC).

  • data.transactions[].account_idstring

    OnlyFans numeric account ID the transaction belongs to — one of the account_ids you sent.

  • data.transactions[].account_namestring

    That account's OnlyFans username.

  • data.transactions[].amountnumber | null

    Gross — what the fan paid. This is the figure List Fans and Get Fan Stats total up, so summing it reproduces total_spend. null on older rows imported without the breakdown.

  • data.transactions[].feenumber | null

    OnlyFans' cut. null where unknown.

  • data.transactions[].vat_amountnumber | null

    VAT collected on the sale. null where unknown.

  • data.transactions[].netnumber

    What the creator received — amount less fee and vat_amount. Always present, even where the breakdown is not.

  • data.transactions[].currencystring | null

    Currency the amounts are in, as OnlyFans reported it. null on rows that predate the field.

  • data.transactions[].categorystring | null

    Transaction kind — one of tip, message, recurring_subscription, new_subscription, unlock, unknown. null is possible on legacy rows and is treated as unknown by the categories filter.

  • data.transactions[].statusstring

    done (settled), undo (refund or chargeback), pending_return (reversal in progress), or loading (still processing), as reported by OnlyFans.

  • _pagination.next_pagestring | null

    The offset for the next page. Absent on the last page.

  • dataobject | array

    Endpoint-specific payload. See the fields below for this route.

  • _meta._credits.usedinteger

    Credits consumed by this request (currently always 1).

  • _meta._rate_limits.limit_minuteinteger

    Maximum requests per minute for the organization.

  • _meta._rate_limits.remaining_minuteinteger

    Remaining requests in the current minute window.

  • _meta._rate_limits.limit_dayinteger

    Maximum requests per day for the organization.

  • _meta._rate_limits.remaining_dayinteger

    Remaining requests in the current day window.

curl --request POST "https://public-api.fansmetric.com/v1/fans/XXXXX/transactions" \
  --header "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "account_ids": ["100000001"],
  "limit": 25,
  "offset": 0,
  "categories": ["message", "tip"],
  "statuses": ["done"],
  "from": "2026-01-01",
  "to": "now"
}'

Response

200
{
"data":{
"transactions":[
0:{
"id":"3491820745"
"transaction_created_at":"2025-09-28T04:55:39Z"
"account_id":"100000001"
"account_name":"creator_XXXXX"
"amount":40
"fee":8
"vat_amount":0
"net":32
"currency":"USD"
"category":"message"
"status":"done"
}
]
}
"_pagination":{
"next_page":"25"
}
"_meta":{
"_credits":{
"used":1
}
"_rate_limits":{
"limit_minute":1000
"remaining_minute":999
"limit_day":50000
"remaining_day":49999
}
}
}