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))
}Get Daily Activity
Return one page of referred-user activity for the authenticated affiliate. The API returns activity for the account that owns the key, under its affiliate plan eligible for this API.
Two ways to request activity (use one per request):
- Day —
activity_date(YYYY-MM-DD). One page of enrolled referred users who had activity that UTC trade day and have not opted out, plus quiet users who enrolled that day and day-widetotals. Even a user who has never traded has an enrollment-day entry withenrolled_atand emptyproducts. Setall_users=trueto include all still-enrolled users enrolled by that day, regardless of trading. Opted-out users appear as existence stubs only withall_users=true; their individual activity is excluded fromitemsandtotals. Unenrolled users are omitted fromitemsonly; their activity stays intotals. - History —
iiban(one to ten full Kraken account identifiers, comma-delimited) with inclusivestart_dateandend_date. The same per-day entries for those people only. An opted-out user still enrolled by the end of the range returns one existence stub withoutactivity_date. 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 activity or matching enrollments returns 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 cover only the classified portion; the
difference from the product total is unclassified activity.
The products map is open-ended: ignore unknown keys. An absent key on a visible
entry means no reported activity for that product. On an opted-out stub,
empty or omitted products means withheld data, not zero activity.
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 include activity from referred users who have not opted out,
including users omitted from items because they are not enrolled in your plan.
Activity from people who opted out may appear under opted_out as summary;
smaller groups are suppressed. Daily figures may differ from weekly payments:
totals exclude activity that cannot earn commission, activity from blocked
regions is shown separately, and this API groups by trade date while payments
group by when activity was recorded.
Opted-out stubs retain referee_reference, hour-truncated enrolled_at,
opted_out=true, and the plan’s referral_code with empty products.
They omit iiban, masked_iiban, and individual financial or plan-status details.
Stub presence is independent of trading; do not interpret a stub as zero activity.
Use referee_reference to match a referred user across days. masked_iiban is
the last four characters of the IIBAN and is not unique. Visible entries
also include the full iiban, which you can use for history requests. 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. Enrollments and opt-out changes do not advance it;
poll the roster even when revision is unchanged. Re-check the trailing 35 days
for late events. estimated is true when amounts for that calendar day are still an estimate.
Examples use synthetic identifiers, not customer account data. Replace example dates with dates inside the current 90-day window. Empty collections and zero-valued fields may be omitted; treat missing items or products as empty.
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: select the Query affiliate participants checkbox.
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))
}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 (Kraken account identifiers),
comma-delimited. Empty, duplicate, or malformed values are a 400.
Validity is a format check only, not account existence. An opted-out
user still enrolled by the end of the range returns one existence stub
without activity_date. Unknown or unattributed identifiers return an
empty result. Visible entries return the full iiban; opted-out stubs omit it.
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}$Day variant only. Include quiet users enrolled in your affiliate plan by the requested date who are still enrolled, including those enrolled more than 90 days ago. Users without reportable activity have empty products. Trading totals, active_users, and revision are unchanged. Using all_users=true with history returns 400. Keep this value unchanged when following next_cursor.
Value from next_cursor in a previous response. Pass it unchanged to
request the next page; do not parse or construct it. A daily cursor
used for a full-roster request, or vice versa, returns 400.
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"
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 there is no activity, and on later pages. A later value on re-fetch means this partner's figures moved.
Day variant, first page only. Count of enrolled users sharing reportable trading activity that day. Excludes quiet users and opted-out users, even when they appear in the roster. May be omitted when zero. Omitted on later pages; not a roster size or remaining-page count.
x >= 0Day variant, first page only. Totals for referred users who have not
opted out, including people omitted from items because they are not
enrolled in your plan. An empty map on a later page is omission, not
a zero day.
Show child attributes
Show child attributes
Present when more results exist. Pass as cursor on the next request.
Referred users for this page. May be omitted when empty.
Show child attributes
Show child attributes
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?