TEASEDocs
ProductsClubHow-to

Drill a source down to paying fans

Given a source (or the whole account), list exactly who paid, how much, and open one fan's lifetime money card.

Three reads take you from a leaderboard row down to individual fans. All three require the spenders_view team capability — a sources-scoped team member without it is rejected before any payer row is even computed.

Spenders for one source

curl "https://app.tease.link/api/admin/sources/ig-main.link/spenders?range=30d" \
  -H "Authorization: Bearer $TEASE_API_KEY"

Membership uses the same priority ladder as the leaderboard (cid → stored link → campaign → D3b → LLM); canonical organic/pending/checking fans never appear here. Returns { domain, chain_mode, chain, spenders: [...], totals: { revenue_cents, spenders, conversions } }. Each spender carries fan_id, fan_username, total_net_cents, purchases, country, is_returning, pre_anchor_cents, first_at, last_at.

Two query flags change what's summed, not who's included:

ParamEffect
full=trueEach fan's lifetime money instead of the windowed slice; ignores range.
chain=pathIf this domain has moved, sums the whole address history, not just the current hostname (default self, i.e. just this address). The chain field in the response always lists exactly which addresses were summed.

Account-wide spenders

curl "https://app.tease.link/api/admin/spenders?range=30d" \
  -H "Authorization: Bearer $TEASE_API_KEY"

Every fan who ever paid, source-agnostic — from of_transactions directly, so a fan with no attribution signal at all still shows up. Sorted by spend, newest-money-first.

This endpoint's source/country pairing on each row uses the older first-touch bridge (click cid → domain), not the full multi-stage ladder the leaderboard and the per-source drill above use — a fan resolved only via a stored link, campaign, or LLM guess shows up here as organic (source: null) even though the leaderboard attributes them correctly. Treat this endpoint as "who paid," not as a second attribution surface.

One fan's card

curl "https://app.tease.link/api/admin/fan/fan_456" \
  -H "Authorization: Bearer $TEASE_API_KEY"

404s if the fan has no of_transactions rows at all. Otherwise returns identity, lifetime total_net_cents/total_gross_cents, purchases, rebills (subscription renewals only, not every transaction), the tracking window (first_ts/last_ts), a per-day by_day net series, and transactions (newest first, each with kind and description).

Attribution on the card is richer than a single label — kind (cid|link|pending| organic|llm) says which rung of the ladder resolved it, precision (exact only for a cid first-touch, approx otherwise) says how sure that is, and origin_tag is the one human-readable "source · country" chip the panel shows. klass (ours|organic) is the coarse badge; is_returning/is_old are lifecycle flags.

What's next

On this page