curl --request GET \
--url https://api.kraken.com/affiliate/v1/daily-activity \
--header 'API-Key: <api-key>' \
--header 'API-Nonce: <api-key>' \
--header 'API-Sign: <api-key>'import requests
url = "https://api.kraken.com/affiliate/v1/daily-activity"
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"API-Nonce": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'API-Key': '<api-key>', 'API-Sign': '<api-key>', 'API-Nonce': '<api-key>'}
};
fetch('https://api.kraken.com/affiliate/v1/daily-activity', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.kraken.com/affiliate/v1/daily-activity"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("API-Sign", "<api-key>")
req.Header.Add("API-Nonce", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"activity_date": "2026-09-16",
"currency": "USD",
"revision": "2026-09-17T00:14:02Z",
"generated_at": "2026-09-17T12:01:04Z",
"active_users": 1,
"totals": {
"spot_trading": {
"volume": "42110.20",
"fees": "38.20",
"commission": "11.46",
"event_count": 12,
"maker": {
"volume": "18400.00",
"fees": "9.20",
"commission": "2.76",
"event_count": 5
},
"taker": {
"volume": "23710.20",
"fees": "29.00",
"commission": "8.70",
"event_count": 7
}
}
},
"items": [
{
"masked_iiban": "UN7A",
"referee_reference": "jsd6ggr6qjrzmemn",
"plans": [
{
"referral_code": "KOL8H2X",
"campaign": "tg-vip",
"referral_level": 1,
"enrolled_at": "2026-03-14T09:00:00Z",
"status": "active",
"earning": true,
"expires_at": "2027-03-14T09:21:07Z",
"products": {
"spot_trading": {
"volume": "42110.20",
"fees": "38.20",
"commission": "11.46",
"event_count": 12,
"maker": {
"volume": "18400.00",
"fees": "9.20",
"commission": "2.76",
"event_count": 5
},
"taker": {
"volume": "23710.20",
"fees": "29.00",
"commission": "8.70",
"event_count": 7
}
}
}
}
]
}
],
"limit": 50,
"opted_out": {
"suppressed": {}
}
}Get Daily Activity
Return one page of referred-user activity for the authenticated affiliate (KOL) partner. The caller is the API-key owner. Extra unmarked KOL plans and cashback-only plans are not included.
Two mutually exclusive variants:
- Day —
activity_date(YYYY-MM-DD). One page of visible enrolled referred users who had activity that UTC trade day, plus day-widetotals. Opted-out users are omitted fromitemsandtotals. Unenrolled users are omitted fromitemsonly; their activity stays intotals. - History —
iiban(one to ten full IIBANs, comma-delimited) with inclusivestart_dateandend_date. The same per-day entries for those participants only. Day-wide fields (totals,active_users,revision,estimated,opted_out) are omitted. Figures are never summed across days.
Sending both variants is a 400. Dates 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.
Monetary figures are decimal strings in the top-level currency (always USD
today): the reporting currency, not the payout asset. volume is omitted on
fee-only products (margin_rollover). maker and taker appear only on
execution products (spot, margin, futures, tokenized spot). Instant buy/sell
(ptl_trading, tokenized_equity_ptl_trading) and financing charges have no
liquidity side. Absence of maker/taker means unclassified, not zero.
When both are present they sum to the classified portion; headline minus
maker minus taker is the unclassified remainder.
The products map is open-ended: ignore unknown keys; an absent key means zero
activity for that product. Current keys: spot_trading, ptl_trading,
margin_trading, margin_rollover, futures_order_fill,
tokenized_equity_spot_trading, tokenized_equity_ptl_trading. Options is not
included.
Day-wide totals are visible users only. Opted-out activity is the separate
opted_out remainder (summary, or suppressed when that group is too small
to show). Payable for the day is totals plus summary when summary is
present. Daily figures will not tie exactly to weekly payments: headlines are
payable-only, geo-blocked activity is shown separately and pays zero commission,
and this endpoint windows on trade date while payments window on insert time.
Use referee_reference as the stable join key across days. masked_iiban is
the last four characters of the IIBAN and is not unique. enrolled_at is
truncated to the hour.
revision (day variant, first page) is when this partner’s figures for that UTC
day were last written. Re-check the trailing 35 days for late events. estimated
is true when amounts for that calendar day are still an estimate.
Successful responses are the object itself. Errors are a non-2xx
status with a typed error body, not a wrapped { "error", "result" }.
API Key Permissions Required: permission to query referrals
curl --request GET \
--url https://api.kraken.com/affiliate/v1/daily-activity \
--header 'API-Key: <api-key>' \
--header 'API-Nonce: <api-key>' \
--header 'API-Sign: <api-key>'import requests
url = "https://api.kraken.com/affiliate/v1/daily-activity"
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"API-Nonce": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'API-Key': '<api-key>', 'API-Sign': '<api-key>', 'API-Nonce': '<api-key>'}
};
fetch('https://api.kraken.com/affiliate/v1/daily-activity', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.kraken.com/affiliate/v1/daily-activity"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("API-Sign", "<api-key>")
req.Header.Add("API-Nonce", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"activity_date": "2026-09-16",
"currency": "USD",
"revision": "2026-09-17T00:14:02Z",
"generated_at": "2026-09-17T12:01:04Z",
"active_users": 1,
"totals": {
"spot_trading": {
"volume": "42110.20",
"fees": "38.20",
"commission": "11.46",
"event_count": 12,
"maker": {
"volume": "18400.00",
"fees": "9.20",
"commission": "2.76",
"event_count": 5
},
"taker": {
"volume": "23710.20",
"fees": "29.00",
"commission": "8.70",
"event_count": 7
}
}
},
"items": [
{
"masked_iiban": "UN7A",
"referee_reference": "jsd6ggr6qjrzmemn",
"plans": [
{
"referral_code": "KOL8H2X",
"campaign": "tg-vip",
"referral_level": 1,
"enrolled_at": "2026-03-14T09:00:00Z",
"status": "active",
"earning": true,
"expires_at": "2027-03-14T09:21:07Z",
"products": {
"spot_trading": {
"volume": "42110.20",
"fees": "38.20",
"commission": "11.46",
"event_count": 12,
"maker": {
"volume": "18400.00",
"fees": "9.20",
"commission": "2.76",
"event_count": 5
},
"taker": {
"volume": "23710.20",
"fees": "29.00",
"commission": "8.70",
"event_count": 7
}
}
}
}
]
}
],
"limit": 50,
"opted_out": {
"suppressed": {}
}
}Authorizations
The "API-Key" header should contain your API key.
Authenticated requests should be signed with the "API-Sign" header, using a signature generated with your private key, nonce, encoded payload, and URI path.
The "API-Nonce" header should contain an always-increasing 64-bit integer, most commonly a Unix timestamp in milliseconds. Each request must use a nonce greater than the nonce of the previous request signed with the same API key.
Query Parameters
Day variant: UTC trade date. Today or one of the previous 89 UTC days.
Mutually exclusive with iiban, start_date, and end_date.
10^[0-9]{4}-[0-9]{2}-[0-9]{2}$History variant: one to ten full IIBANs, comma-delimited. Empty, duplicate,
or malformed values are a 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; responses still serve masked_iiban only.
1 - 350History variant: inclusive start, YYYY-MM-DD, in the last 90 UTC days.
Required with iiban and end_date.
10^[0-9]{4}-[0-9]{2}-[0-9]{2}$History variant: inclusive end, YYYY-MM-DD, in the last 90 UTC days.
Required with iiban and start_date. Must be on or after start_date.
10^[0-9]{4}-[0-9]{2}-[0-9]{2}$Opaque cursor from a previous response. Day variant: last item's
referee_reference. History variant: YYYY-MM-DD: plus that day's
referee_reference. It is not a Kraken account id.
1Page size. Defaults to 50 when omitted. Values over 200 are rejected.
1 <= x <= 200Response
One page of affiliate daily activity.
One page of affiliate daily activity.
Reporting currency for every monetary figure. Always USD today.
"USD"
Show child attributes
Show child attributes
Page size used for this response. Echo of request limit after the default of 50.
1 <= x <= 200Day variant only. The UTC trade date every item shares.
^[0-9]{4}-[0-9]{2}-[0-9]{2}$Day variant, first page only. When this partner's figures for that UTC day were last updated. Omitted when this partner has no rows, and on later pages. A later value on re-fetch means this partner's figures moved.
Day variant, first page only. Count of visible enrolled users that day. Omitted on later pages; not a remaining-page count.
x >= 0Day variant, first page only. Totals for visible users in items. An empty
map on a later page is omission, not a zero day. Does not include opted-out
activity. Includes unenrolled users so the headline does not move.
Show child attributes
Show child attributes
Present when more results exist. Pass as cursor on the next request.
Day variant, first page only. Amounts for this date are an estimate of that calendar day, including the opted-out remainder. Omitted when exact.
Day variant, first page only. Opted-out remainder. Day-wide payable is
totals plus summary when summary is set.
- Option 1
- Option 2
Show child attributes
Show child attributes
Was this page helpful?