curl --request GET \
--url https://api.kraken.com/v0/insto/custody/vaults/{vault_id}/transactions/{transaction_id} \
--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}/transactions/{transaction_id}"
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}/transactions/{transaction_id}', 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}/transactions/{transaction_id}"
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))
}{
"id": "TXABCDE-FGHIJ-KLMNO2",
"type": "deposit",
"status": "completed",
"asset": "BTC",
"asset_class": "currency",
"amount": "1.25",
"time": "2024-05-14T22:13:20.000Z",
"transaction_hash": "0x4a7d1ed414474e4033ac29ccb8653d9b00d3f1c9a3b7e5d2c8f6a4b1e9d7c5a3",
"ref_id": "FTABCDE-FGHIJ-KLMNO2",
"fee_amount": "0.01",
"fee_asset": "BTC",
"fee_asset_class": "currency",
"extension_type": "post_trade_settlement",
"source_address": "bc1q9h6yzs4h29m0zqf6l2dv4kv9m8g3xj7t5c0pzr",
"destination_address": "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq",
"task": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"initiator": {
"full_name": "Alex Doe",
"role": "vault_admin",
"ip_address": "203.0.113.10",
"iiban": "ABCD EFGH IJKL MNOP"
}
},
"source_wallet": {
"id": "WABCDEF234567A",
"type": "spot"
},
"destination_wallet": {
"id": "WBCDEFG345678B",
"type": "custody_staking"
}
}{
"type": "tag:kraken.com,2025:BadRequest",
"status": 400,
"title": "Bad Request",
"data": {
"message": "Request failed validation."
},
"detail": "Request failed validation.",
"instance": "https://debug.kraken.com/req/01HXYZABCDEF"
}{
"type": "tag:kraken.com,2025:PermissionDenied",
"status": 403,
"title": "Forbidden",
"data": {
"message": "Caller lacks access to the requested resource."
},
"detail": "Caller lacks access to the requested resource.",
"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": "<unknown>",
"detail": "Downstream custody service is temporarily unreachable.",
"instance": "https://debug.kraken.com/req/01HXYZABCDEF"
}Get transaction
Returns a single transaction for the given vault. Available only to callers with access to the vault.
Only custody movements are addressable here. Trade and conversion records are not exposed as custody transactions and are not linked through ref_id. Use the Kraken Spot and OTC trade history APIs for those.
Rate limit: 200 requests per 30 seconds per IP.
curl --request GET \
--url https://api.kraken.com/v0/insto/custody/vaults/{vault_id}/transactions/{transaction_id} \
--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}/transactions/{transaction_id}"
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}/transactions/{transaction_id}', 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}/transactions/{transaction_id}"
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))
}{
"id": "TXABCDE-FGHIJ-KLMNO2",
"type": "deposit",
"status": "completed",
"asset": "BTC",
"asset_class": "currency",
"amount": "1.25",
"time": "2024-05-14T22:13:20.000Z",
"transaction_hash": "0x4a7d1ed414474e4033ac29ccb8653d9b00d3f1c9a3b7e5d2c8f6a4b1e9d7c5a3",
"ref_id": "FTABCDE-FGHIJ-KLMNO2",
"fee_amount": "0.01",
"fee_asset": "BTC",
"fee_asset_class": "currency",
"extension_type": "post_trade_settlement",
"source_address": "bc1q9h6yzs4h29m0zqf6l2dv4kv9m8g3xj7t5c0pzr",
"destination_address": "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq",
"task": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"initiator": {
"full_name": "Alex Doe",
"role": "vault_admin",
"ip_address": "203.0.113.10",
"iiban": "ABCD EFGH IJKL MNOP"
}
},
"source_wallet": {
"id": "WABCDEF234567A",
"type": "spot"
},
"destination_wallet": {
"id": "WBCDEFG345678B",
"type": "custody_staking"
}
}{
"type": "tag:kraken.com,2025:BadRequest",
"status": 400,
"title": "Bad Request",
"data": {
"message": "Request failed validation."
},
"detail": "Request failed validation.",
"instance": "https://debug.kraken.com/req/01HXYZABCDEF"
}{
"type": "tag:kraken.com,2025:PermissionDenied",
"status": 403,
"title": "Forbidden",
"data": {
"message": "Caller lacks access to the requested resource."
},
"detail": "Caller lacks access to the requested resource.",
"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": "<unknown>",
"detail": "Downstream custody service is temporarily unreachable.",
"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"
Transaction identifier, as returned in the vault's transaction history.
"TXABCDE-FGHIJ-KLMNO2"
Response
The requested transaction.
Transaction identifier.
"TXABCDE-FGHIJ-KLMNO2"
Transaction type (e.g. deposit, withdrawal, custody_transfer).
"deposit"
Transaction status, resolved per the asset's crypto or fiat classification (e.g. pending, broadcast, completed, failed, settled, on_hold).
"completed"
Asset code of the transaction amount.
"BTC"
Asset class of the transaction amount (e.g. currency, tokenized_asset).
"currency"
Transaction amount, fixed-precision decimal as string. Spend amounts are negative.
"1.25"
Transaction time (ISO-8601).
"2024-05-14T22:13:20.000Z"
On-chain transaction hash, when available.
"0x4a7d1ed414474e4033ac29ccb8653d9b00d3f1c9a3b7e5d2c8f6a4b1e9d7c5a3"
Reference identifier of the originating operation, when available. For funding deposits and withdrawals this is the FT-prefixed funding transfer reference, the successor to the legacy details.core.funding_reference field. Other movements carry other prefixes, such as CT for custody transfers, EL for earn allocations, and T for trade-settlement movements. There is no separate funding_reference field on this API.
"FTABCDE-FGHIJ-KLMNO2"
Fee amount charged for the transaction, fixed-precision decimal as string. Present when a fee applies.
"0.01"
Asset code the fee is charged in. Present when a fee applies.
"BTC"
Asset class of the fee asset (e.g. currency, tokenized_asset). Present when a fee applies.
"currency"
Custody extension type for extended transactions (e.g. post_trade_settlement), when available.
"post_trade_settlement"
Address or account the funds moved from, when available. The sender address for deposits, the vault's sending address for withdrawals, and the counterparty account identifier (IIBAN) for internal transfers. Omitted when the movement has no source address.
"bc1q9h6yzs4h29m0zqf6l2dv4kv9m8g3xj7t5c0pzr"
Destination address of the transaction, when available. The vault's receiving address for deposits, the recipient address for withdrawals, and the counterparty account identifier (IIBAN) for internal transfers. Omitted when the movement has no destination address.
"bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq"
Linked custody task that created this transaction. Carries id (approval UUID) and optional initiator. Omitted when no task is linked. The transaction object does not also return task_id or approval_id. Approver history remains on GET /v0/insto/custody/tasks/{task_id}.
Show child attributes
Show child attributes
Wallet the funds moved out of, when available. Present on withdrawals, and on transfers where the vault holds the sending side. Omitted otherwise. type is included when portfolio supplies a non-empty wallet type (for example spot, custody_staking, custody_pledged_collateral).
Show child attributes
Show child attributes
Wallet the funds moved into, when available. Present on deposits, and on transfers where the vault holds the receiving side. Omitted otherwise. type is included when portfolio supplies a non-empty wallet type (for example spot, custody_staking, custody_pledged_collateral).
Show child attributes
Show child attributes
Was this page helpful?