List custody transactions
Retrieve the transaction history for a specified vault.
curl --request POST \
--url https://api.kraken.com/0/private/ListCustodyTransactions \
--header 'API-Key: <api-key>' \
--header 'API-Sign: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"nonce": 123,
"page_size": 1,
"quote": {
"asset": "<string>"
},
"preferred_asset_name": "<string>",
"sorting": {},
"cursor": "<string>",
"types": [],
"ids": [
"<string>"
],
"assets": [
{
"asset": "<string>"
}
],
"ref_ids": [
{
"ref_id": "<string>"
}
]
}
'import requests
url = "https://api.kraken.com/0/private/ListCustodyTransactions"
payload = {
"nonce": 123,
"page_size": 1,
"quote": { "asset": "<string>" },
"preferred_asset_name": "<string>",
"sorting": {},
"cursor": "<string>",
"types": [],
"ids": ["<string>"],
"assets": [{ "asset": "<string>" }],
"ref_ids": [{ "ref_id": "<string>" }]
}
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'API-Key': '<api-key>',
'API-Sign': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
nonce: 123,
page_size: 1,
quote: {asset: '<string>'},
preferred_asset_name: '<string>',
sorting: {},
cursor: '<string>',
types: [],
ids: ['<string>'],
assets: [{asset: '<string>'}],
ref_ids: [{ref_id: '<string>'}]
})
};
fetch('https://api.kraken.com/0/private/ListCustodyTransactions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.kraken.com/0/private/ListCustodyTransactions"
payload := strings.NewReader("{\n \"nonce\": 123,\n \"page_size\": 1,\n \"quote\": {\n \"asset\": \"<string>\"\n },\n \"preferred_asset_name\": \"<string>\",\n \"sorting\": {},\n \"cursor\": \"<string>\",\n \"types\": [],\n \"ids\": [\n \"<string>\"\n ],\n \"assets\": [\n {\n \"asset\": \"<string>\"\n }\n ],\n \"ref_ids\": [\n {\n \"ref_id\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("API-Sign", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"errors": [
{
"severity": "E",
"errorClass": "<string>",
"type": "<string>",
"errorMessage": "<string>"
}
],
"result": {
"transactions": [
{
"id": "TXURLTG-FFGYT-X7F73S",
"time": "2025-07-04T19:21:24.734Z",
"type": "custody_otc_loan_pledge",
"category": "custody",
"area": "custody",
"status": "successful",
"ref_id": "TSGOQO3-RE57R-6QY57X",
"ref_id2": "TSGOQO3-RE57R-6QY57X"
}
],
"stats": {
"transactions_seen": 100
},
"next_cursor": "ABCDEF"
}
}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.
Query Parameters
Vault ID
14^V[A-Z2-7]{12}[ACEGIKMOQSUWY246]$Body
Nonce used in construction of API-Sign header
Page size. If not specified a default value of 25 will be used instead.
x >= 0Quote amounts and fees in main transaction details in this currency (the quoting is a best effort job of getting the closest rate to the time of the transaction) by default the quoted fields are None
Quoting isn't always available, when its not a None will be returned as well.
Show child attributes
Show child attributes
Preferred asset name
Sorting. If not specified, items will be sorted descending.
Show child attributes
Show child attributes
Continue paginating with a cursor
List of transaction types to filter by.
unspecified, deposit, withdrawal, trade, margin, adjustment, rollover, interest, credit, transfer, transfer_peer_to_peer, settle, dividend, nft_trade, reward, nft_creator_fee, nft_rebate, nft_airdrop, simple_order, simple_order_with_deposit, simple_order_failed, custom_simple_order, custom_simple_order_with_deposit, custom_simple_order_failed, recurring_simple_order, recurring_simple_order_with_deposit, recurring_simple_order_failed, simple_order_opposite_side, reserved_fee, fee_sweep, ic_settlement, fee_sweep_dlt, reward_sweep, reward_sweep_old, interest_sweep, conversion, dust_sweep, futures_transfer, custody_transfer, deposit_action, withdrawal_action, legacy_staking_allocation, legacy_staking_deallocation, legacy_staking_reward, earn_legacy_migration, block_trade, equity_trade, equity_acats, earn_staking_allocation, earn_staking_deallocation, earn_staking_reward, earn_staking_auto_allocation, earn_oir_allocation, earn_oir_deallocation, earn_oir_reward, earn_oir_auto_allocation, earn_base_reward, earn_base_auto_allocation, earn_base_auto_deallocation, custody_staking, custody_unstaking, custody_staking_reward, custody_staking_reward_aggregated, credit_rollover, airdrop, earn_oir_auto_deallocation, earn_staking_auto_deallocation, bridge_deposit, bridge_simple_order, simple_order_deposit_action, otc_buy, otc_sell, bundle_trade, equity_fee, equity_journal, corporate_action, user_account_transfer, earn_restaking, subscription, custody_otc_loan_pledge, custody_otc_collateral_liquidation, paytag_transfer, paylink_transfer, paytag_request_transfer, paylink_request_transfer, kard_transfer, krak_card, custody_otc_loan_release, fpsl_reward, fcm_trade, boost, fcm_misc Portfolio IDs filter
A portfolio transaction ID
Assets filter
Show child attributes
Show child attributes
Ref ids filter
Show child attributes
Show child attributes
Response
Transactions retrieved.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
{
"transactions": [
{
"id": "TXURLTG-FFGYT-X7F73S",
"time": "2025-07-04T19:21:24.734Z",
"type": "custody_otc_loan_pledge",
"category": "custody",
"area": "custody",
"status": "successful",
"ref_id": "TSGOQO3-RE57R-6QY57X",
"ref_id2": "TSGOQO3-RE57R-6QY57X"
}
],
"stats": { "transactions_seen": 100 },
"next_cursor": "ABCDEF"
}
curl --request POST \
--url https://api.kraken.com/0/private/ListCustodyTransactions \
--header 'API-Key: <api-key>' \
--header 'API-Sign: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"nonce": 123,
"page_size": 1,
"quote": {
"asset": "<string>"
},
"preferred_asset_name": "<string>",
"sorting": {},
"cursor": "<string>",
"types": [],
"ids": [
"<string>"
],
"assets": [
{
"asset": "<string>"
}
],
"ref_ids": [
{
"ref_id": "<string>"
}
]
}
'import requests
url = "https://api.kraken.com/0/private/ListCustodyTransactions"
payload = {
"nonce": 123,
"page_size": 1,
"quote": { "asset": "<string>" },
"preferred_asset_name": "<string>",
"sorting": {},
"cursor": "<string>",
"types": [],
"ids": ["<string>"],
"assets": [{ "asset": "<string>" }],
"ref_ids": [{ "ref_id": "<string>" }]
}
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'API-Key': '<api-key>',
'API-Sign': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
nonce: 123,
page_size: 1,
quote: {asset: '<string>'},
preferred_asset_name: '<string>',
sorting: {},
cursor: '<string>',
types: [],
ids: ['<string>'],
assets: [{asset: '<string>'}],
ref_ids: [{ref_id: '<string>'}]
})
};
fetch('https://api.kraken.com/0/private/ListCustodyTransactions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.kraken.com/0/private/ListCustodyTransactions"
payload := strings.NewReader("{\n \"nonce\": 123,\n \"page_size\": 1,\n \"quote\": {\n \"asset\": \"<string>\"\n },\n \"preferred_asset_name\": \"<string>\",\n \"sorting\": {},\n \"cursor\": \"<string>\",\n \"types\": [],\n \"ids\": [\n \"<string>\"\n ],\n \"assets\": [\n {\n \"asset\": \"<string>\"\n }\n ],\n \"ref_ids\": [\n {\n \"ref_id\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("API-Sign", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"errors": [
{
"severity": "E",
"errorClass": "<string>",
"type": "<string>",
"errorMessage": "<string>"
}
],
"result": {
"transactions": [
{
"id": "TXURLTG-FFGYT-X7F73S",
"time": "2025-07-04T19:21:24.734Z",
"type": "custody_otc_loan_pledge",
"category": "custody",
"area": "custody",
"status": "successful",
"ref_id": "TSGOQO3-RE57R-6QY57X",
"ref_id2": "TSGOQO3-RE57R-6QY57X"
}
],
"stats": {
"transactions_seen": 100
},
"next_cursor": "ABCDEF"
}
}