Skip to main content
The insights and earnings endpoints report money in a few different ways, and the differences are not guessable from the field names. This page is the reference for three things integrators keep having to ask about: what each payment source actually covers, which figures are gross and which are net of refunds and chargebacks, and how a reversal is recorded.

Payment sources

Every earning row on GET /insights/earnings carries a source, and the fan spend breakdown on GET /insights/fans/{userUuid} is keyed by the same names.

The renewal catch-all

renewal is not “subscription renewal”. It is every recurring charge after the first payment, no matter which product started the subscription: profile subscriptions, checkout-link subscriptions and recurring fan experiences all bill as renewal from their second charge onwards. appStore is the single exception. An app subscription’s recurring charges stay under appStore. The consequence catches integrators out. A fan subscribes to a recurring fan experience priced at 500 cents per month: So fanExperience only ever holds first payments and one-off unlocks, and the same is true of subscription and checkoutLink. If you want a product’s full recurring revenue you cannot read it off one source: renewal is where the ongoing money is, and it does not say which product produced it.
A renewal row does not tell you which product renewed. To attribute renewals to a product, follow the fan’s subscription rather than the earning source.

Fan experiences and the App Store are different transactions

Both involve a third-party app, and the same app can produce both, but the parties are different:
  • fanExperience is the creator selling to a fan. An experience is a fan-facing mini-app the creator publishes, backed by a third-party app. This is fan-to-creator spend and it belongs in fan spend metrics.
  • appStore is the app developer selling to the creator. The buyer is the creator who installs the app. A fan cannot even see the App Store, so an appStore invoice is not fan spend on a creator.
Only paid experiences produce a payment. A free experience produces no invoice of any kind, so it never appears on any earnings or spend figure.
Fan experiences are not fully live yet. They are behind a staged rollout, so most creators will have no fanExperience rows at all today.

Gross, net, and reversals

Two different distinctions share the words gross and net, and the endpoint decides which one is meant:
  • The fee axis. On the earnings endpoints and the agency insights endpoints, gross is what the fan paid and net is the creator’s cut after platform fees. Both describe the same transaction.
  • The reversal axis. Whether a refunded or charged-back purchase is still counted. This is per field, and it is not consistent across the insights surface.
The table below is the reversal axis, field by field.

Why the sources do not add up to the total

On GET /insights/fans/{userUuid}, spending.total is net of reversals while spending.sources are gross of them. The two therefore disagree, and the gap is exactly the reversals, which are dropped from sources entirely rather than shown as their own entry. If you need the two to reconcile, fetch the fan’s reversals from GET /insights/spending with fanUuid set and subtract them yourself.
Fanvue is adding reversal-free companions to spending.total, to each per-source figure and its average, and a last-valid-purchase field alongside spending.lastPurchaseAt. The existing fields keep their current meaning, so nothing shifts under an integration that already reads them. Separately, Fanvue is removing appStore from the fan spend metrics as a correction, because it records a creator’s purchase from an app developer rather than a fan’s spend. That one does move numbers, and the changelog will call it out when it ships.

How a reversal is recorded

A refund or a chargeback is written as its own invoice, never as an edit to the payment it reverses. Three consequences worth knowing:
  1. The original stays settled. It keeps its own row on GET /insights/earnings with its original amount. Nothing about it changes when it is reversed.
  2. A reversal is always the full amount. Fanvue has no partial refunds, so a reversed purchase is reversed for exactly what the fan paid.
  3. The pairing is explicit. On GET /insights/earnings, refund and chargeback rows carry reversedTransactionOrderId, which is the transactionOrderId of the payment they reverse. That is the supported way to match the two.
Both rows also carry the fan’s user object, trimmed here for brevity. Note that the original message row is untouched: it still reports the full 1999 it was paid.

Freshness

Agency insights

Three agency-level insights endpoints sit alongside the chatter leaderboard, under Agency Insights in the API Reference. All of them are agency-wide: they aggregate across every creator the agency manages, and accept a creatorUuids filter (max 50) to narrow to a subset. Every row returns both figures, gross and net, so you never have to pick one at request time. On top-fans, earningsView chooses which of the two the ranking is done by, and both are returned regardless. Amounts are USD cents. This gross-and-net-on-every-row shape is the convention the fan insights endpoints are moving to as well.
Agency endpoints require agency admin access on top of the scopes above. A creatorUuids value that does not belong to the agency fails the whole request with 403 rather than being ignored.