curl --request GET \
--url https://api.kraken.com/v0/insto/custody/vaults/{vault_id}/assets/balances \
--header 'api-key: <api-key>' \
--header 'api-nonce: <api-key>' \
--header 'api-sign: <api-key>'import requests
url = "https://api.kraken.com/v0/insto/custody/vaults/{vault_id}/assets/balances"
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/v0/insto/custody/vaults/{vault_id}/assets/balances', 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/v0/insto/custody/vaults/{vault_id}/assets/balances"
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))
}{
"result": [
{
"asset": "BTC",
"asset_class": "currency",
"name": "Bitcoin",
"name_full": "Bitcoin",
"symbol": "BTC",
"decimals": 8,
"display_decimals": 8,
"rate_decimals": 8,
"funding_decimals": 8,
"min_lot": "0.00010000",
"reserve": false,
"virtual": true,
"metadata": {
"color_code": "#F7931A"
},
"balance": "1.50000000",
"quote_value_change_24h": "1.25",
"spot_balance": "1.50000000",
"hold_balance": "0.00000000",
"available_balance": "1.50000000",
"staked_balance": "0.00000000",
"pledged_balance": "0.00000000",
"quote_value": "97500.00",
"quote_spot_value": "97500.00",
"quote_available_value": "97500.00",
"quote_price": "65000.00"
},
{
"asset": "USD",
"asset_class": "currency",
"name": "US Dollar",
"name_full": "US Dollar",
"symbol": "USD",
"decimals": 4,
"display_decimals": 2,
"rate_decimals": 4,
"funding_decimals": 4,
"min_lot": "0.0100",
"reserve": false,
"virtual": false,
"metadata": {
"color_code": "#85BB65"
},
"balance": "10000.0000",
"spot_balance": "10000.0000",
"hold_balance": "0.0000",
"available_balance": "10000.0000",
"staked_balance": "0.0000",
"quote_value": "10000.00",
"quote_spot_value": "10000.00",
"quote_available_value": "10000.00",
"quote_price": "1.0000"
}
],
"quote_asset": "USD"
}{
"type": "tag:kraken.com,2025:BadRequest",
"status": 400,
"title": "Bad Request",
"data": {
"message": "Invalid quote parameter."
},
"detail": "Invalid quote parameter.",
"instance": "https://debug.kraken.com/req/01HXYZABCDEF"
}{
"type": "tag:kraken.com,2025:PermissionDenied",
"status": 403,
"title": "Forbidden",
"data": {
"message": "Permission denied."
},
"detail": "The caller is not authorized to perform this action.",
"instance": "https://debug.kraken.com/req/01HXYZABCDEF"
}{
"type": "tag:kraken.com,2025:gateway/ReadUpstream",
"status": 500,
"title": "Internal Server Error",
"data": "<unknown>",
"detail": "Failed to read response from upstream custody service.",
"instance": "https://debug.kraken.com/req/01HXYZABCDEF"
}{
"type": "tag:kraken.com,2025:gateway/Connect",
"status": 503,
"title": "Service Unavailable",
"data": {},
"detail": "Downstream custody service is temporarily unreachable; retry with backoff.",
"instance": "https://debug.kraken.com/req/01HXYZABCDEF"
}List vault asset balances
Returns per-asset balances for a vault, including spot, hold, available, staked, and pledged components for each asset. Each row includes asset metadata and optional quote-currency valuations. Use quote_asset to select the valuation currency (defaults to USD). Numeric strings are always returned at full upstream precision.
Rate limit: 200 requests per 30 seconds per IP.
curl --request GET \
--url https://api.kraken.com/v0/insto/custody/vaults/{vault_id}/assets/balances \
--header 'api-key: <api-key>' \
--header 'api-nonce: <api-key>' \
--header 'api-sign: <api-key>'import requests
url = "https://api.kraken.com/v0/insto/custody/vaults/{vault_id}/assets/balances"
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/v0/insto/custody/vaults/{vault_id}/assets/balances', 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/v0/insto/custody/vaults/{vault_id}/assets/balances"
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))
}{
"result": [
{
"asset": "BTC",
"asset_class": "currency",
"name": "Bitcoin",
"name_full": "Bitcoin",
"symbol": "BTC",
"decimals": 8,
"display_decimals": 8,
"rate_decimals": 8,
"funding_decimals": 8,
"min_lot": "0.00010000",
"reserve": false,
"virtual": true,
"metadata": {
"color_code": "#F7931A"
},
"balance": "1.50000000",
"quote_value_change_24h": "1.25",
"spot_balance": "1.50000000",
"hold_balance": "0.00000000",
"available_balance": "1.50000000",
"staked_balance": "0.00000000",
"pledged_balance": "0.00000000",
"quote_value": "97500.00",
"quote_spot_value": "97500.00",
"quote_available_value": "97500.00",
"quote_price": "65000.00"
},
{
"asset": "USD",
"asset_class": "currency",
"name": "US Dollar",
"name_full": "US Dollar",
"symbol": "USD",
"decimals": 4,
"display_decimals": 2,
"rate_decimals": 4,
"funding_decimals": 4,
"min_lot": "0.0100",
"reserve": false,
"virtual": false,
"metadata": {
"color_code": "#85BB65"
},
"balance": "10000.0000",
"spot_balance": "10000.0000",
"hold_balance": "0.0000",
"available_balance": "10000.0000",
"staked_balance": "0.0000",
"quote_value": "10000.00",
"quote_spot_value": "10000.00",
"quote_available_value": "10000.00",
"quote_price": "1.0000"
}
],
"quote_asset": "USD"
}{
"type": "tag:kraken.com,2025:BadRequest",
"status": 400,
"title": "Bad Request",
"data": {
"message": "Invalid quote parameter."
},
"detail": "Invalid quote parameter.",
"instance": "https://debug.kraken.com/req/01HXYZABCDEF"
}{
"type": "tag:kraken.com,2025:PermissionDenied",
"status": 403,
"title": "Forbidden",
"data": {
"message": "Permission denied."
},
"detail": "The caller is not authorized to perform this action.",
"instance": "https://debug.kraken.com/req/01HXYZABCDEF"
}{
"type": "tag:kraken.com,2025:gateway/ReadUpstream",
"status": 500,
"title": "Internal Server Error",
"data": "<unknown>",
"detail": "Failed to read response from upstream custody service.",
"instance": "https://debug.kraken.com/req/01HXYZABCDEF"
}{
"type": "tag:kraken.com,2025:gateway/Connect",
"status": 503,
"title": "Service Unavailable",
"data": {},
"detail": "Downstream custody service is temporarily unreachable; retry with backoff.",
"instance": "https://debug.kraken.com/req/01HXYZABCDEF"
}Authorizations
Path Parameters
Vault identifier, a V-prefixed 14-char base32 string with a final check character.
"VABCDEF234567A"
Query Parameters
Currency code used to value quote fields on each row. Defaults to USD when omitted; only USD is currently accepted.
Response
OK. Returns per-asset balances for the vault as an envelope. The result field is the array of balance rows; quote_asset carries the quote currency once for the whole response.
Was this page helpful?