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:
| Param | Effect |
|---|---|
full=true | Each fan's lifetime money instead of the windowed slice; ignores range. |
chain=path | If 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
- Read revenue by traffic source — the aggregate view this drills into.
- Fix a fan's wrong source — if a fan's card shows the wrong attribution.