GET /affiliate/v1/daily-activity returns what your referred users did on a UTC
trade date, broken down by plan and then by product.
Authentication uses the same API key and secret as the rest of the Kraken REST API.
For key setup, see REST Authentication.
Requests sign each call and send api-key, api-sign, and api-nonce headers
(the signed path includes the query string). The key needs permission to query
referrals — see API key permissions.
Schemas are in Get Daily Activity.
Shared Python helper
Two ways to call it
Both variants are signed with your own API key. Dates are UTC calendar days (YYYY-MM-DD) and must be today or one of the previous 89 UTC days. A future
date or a date older than that window is a 400. An in-window day with no rows
is an empty page, not an error.
By day
Give a trade date. You get every referred user who was active that day, is still enrolled, and has not opted out, split by plan and then by product, plus day-wide totals.By person
Give up to ten full IIBANs that participants have shared, plus an inclusive date range. You get the same per-day entries for just those people — never a range total. Day-wide fields (totals, active_users, revision, estimated,
opted_out) are omitted.
400. Validity is a format
check only, not account existence. Unattributed, unknown, unenrolled, and
opted-out valid IIBANs all return the same empty result. The full identifier is never
echoed.
Sending both variants on one request is a 400.
Identifying a referred user
Usereferee_reference as the join key across days. It is stable for the same
referred user under your account, it is not a Kraken account id, and it is not
joinable across partners.
masked_iiban is the last four characters of the IIBAN. It is not unique. Do
not key on it. History responses do not echo which requested IIBAN produced the
row — correlate via referee_reference from day-variant results. When multiple
requested IIBANs share the same last four characters, masked_iiban cannot
disambiguate them. enrolled_at on each plan is truncated to the hour.
Products
One key per product that had activity. The map is open-ended: ignore unknown keys; an absent key means zero.
Options is not included.
maker and taker appear only on execution products,
and only when that side had classified fills. When both are present they sum to
the classified portion; headline minus maker minus taker is unclassified. Absence
means unclassified, not zero. Instant buy/sell and financing charges have no
liquidity side.
geo_blocked is present only when that product had blocked-region activity.
Blocked events pay zero commission. Parent volume, fees, event_count, and
commission cover payable activity only; geo_blocked is an additional breakdown
and is not included in those parent figures.
Totals, opt-out, and payments
Day-widetotals include every referred user except those who have opted
out. Opted-out users do not appear as full rows; their remainder is
opted_out. Unenrolled users are omitted from items, including on old
dates, but stay in totals so the headline does not move. They are not
counted in opted_out:
{ "suppressed": {} }when the opted-out group is too small to show, or when there are no opted-out participants{ "summary": { "active_participants", "products" } }otherwise
totals plus summary when summary is present.
Daily figures will not match weekly payments exactly:
- Headlines are payable-only
- Geo-blocked activity is shown separately and pays zero
- This endpoint windows on trade date; payments window on insert time
Staleness
A trade day is not sealed. Late events land on their trade date and rewrite that partner’s rows.revision (day variant, first page) is when your figures for that UTC day
were last written. A later value on re-fetch means your figures moved. Another
partner’s late event does not move this value. Re-check the trailing 35 days.
When estimated is true on the first page, amounts for that calendar day are
still an estimate, including the opted-out remainder.
Pagination
limit defaults to 50 and rejects values over 200. When next_cursor is
present, pass it as cursor on the next request.
- Day variant cursor: the last item’s
referee_reference - History variant cursor:
YYYY-MM-DD:plus that day’sreferee_reference
active_users, totals, revision, estimated, and opted_out are
first-page only. An empty totals map on a later page is omission, not a zero
day.
Errors
Successful bodies are the object itself. Errors are a non-2xx status with a typed
error body. The helper raises
KrakenApiError with the parsed body on failure.
Throttling is covered in Rate limits.