TheDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/sieblyio/kraken-api/llms.txt
Use this file to discover all available pages before exploring further.
InstitutionalClient provides programmatic access to Kraken’s institutional-grade APIs: the OTC (Over-The-Counter) trading API for large-block quote requests and fills, and the Custody API for managing segregated vaults, viewing transaction history, and initiating deposits and withdrawals. It is designed for institutional clients such as asset managers, hedge funds, and treasury operations that require a higher level of security, compliance controls, and trade execution quality than the standard Spot API provides.
Access to the Institutional API requires a separate agreement with Kraken. OTC and Custody access are provisioned independently. Contact your Kraken account manager or visit kraken.com/institutions to get started.
Constructor
Instantiate the client with your institutional API key and secret. All methods use authenticated private endpoints.generateNewOrderID()
A convenience utility that generates a cryptographically random 32-character order ID using nanoid. Use this to populate client_order_id fields.
OTC Trading
The OTC API allows institutional clients to request and execute large-block trades off the public order book, with price discovery via a request-for-quote (RFQ) flow.checkOtcClient
Verify your account’s OTC eligibility and retrieve the list of permissions granted to your API key for the OTC portal.
Required permissions: Funds permissions — Query and Funds permissions — Deposit.
OTCCheckClientResponse — { result?: { permissions: string[] }, error: string[] }
createOtcQuoteRequest
Submit a new OTC request-for-quote (RFQ). The exchange returns a live, executable quote for the specified currency pair, side, and amount.
Required permissions: Orders and trades — Create & modify orders.
OTCCreateQuoteResponse — { result?: { quote: OtcQuote }, error: string[] }
The base currency of the trade (e.g.
BTC).The quote currency of the trade (e.g.
USD).Direction of the trade:
buy or sell.Amount in base currency to buy or sell. Provide either
amount or total.Amount in quote currency to spend or receive. Provide either
amount or total.getOtcActiveQuotes
Retrieve a list of currently active (open and not yet accepted/rejected) OTC quotes.
Required permissions: Orders and trades — Query open orders & trades.
OTCGetActiveQuotesResponse — { result?: OtcActiveQuote[], error: string[] }
Each OtcActiveQuote contains: quote_id, base, quote, type, price?, amount, total?, settlement, expires.time, client_order_id?.
getOtcHistoricalQuotes
Retrieve the history of past OTC quotes including their settlement status and trade IDs.
Required permissions: Orders and trades — Query open orders & trades.
OTCGetHistoricalQuotesResponse — { result?: OtcHistoricalQuote[], error: string[] }
Each OtcHistoricalQuote contains: quote_id, trade_id?, status?, base, quote, type, price, amount, total, settlement, settlement_status, acceptance.status, acceptance.time, client_order_id?.
updateOtcQuote
Accept or reject an active OTC quote. Call this after receiving a live quote from createOtcQuoteRequest.
Required permissions: Orders and trades — Create & modify orders.
OTCUpdateQuoteResponse — { result?: { quote_id?: string }, error: string[] }
The ID of the OTC quote to accept or reject.
Action to take:
accepted or rejected.getOtcExposures
Retrieve the current maximum and used OTC exposure limits for your account.
Required permissions: Orders and trades — Query open orders & trades.
OTCGetExposuresResponse — { result?: { max_otc, max_rfq, used_otc, used_rfq }, error: string[] }
getOtcPairs
List all OTC trading pairs available to your account, including size limits and decimal precision.
Required permissions: Funds permissions — Query and Funds permissions — Deposit.
OTCGetPairsResponse — { result: { spot_pairs: OtcPair[] }, error: string[] }
Each OtcPair contains: base, quote, pair_name, pair_decimals, lot_decimals, cost_decimals, max_base_amount, max_notional?, min_base_amount?, min_notional?.
OTC Full Flow Example
Custody
The Custody API provides access to Kraken’s institutional custody infrastructure: segregated vaults, transaction history, multi-party approval workflows, and deposit/withdrawal management.listCustodyVaults
Retrieve all vaults within your custody domain, with optional filtering, pagination, and ordering.
CustodyListVaultsResponse — { result?: CustodyVault[], errors?, start?, total? }
Include policy information in the response.
Filter vaults by
id, name, default_approvals, created_at, updated_at, or member. Uses a structured { and: [{ or: [...conditions] }] } filter syntax.Pagination controls:
{ limit: number, offset: number }.Sort results:
[{ by: 'name' | 'id' | 'created_at' | 'updated_at', direction?: 'asc' | 'desc' }].getCustodyVaultbyId
Retrieve detailed information and asset balances for a specific vault by its ID.
CustodyGetVaultResponse — { result?: CustodyVaultWithAssets, errors: CustodyApiError[] }
The CustodyVaultWithAssets includes all CustodyVault fields plus asset_details: CustodyVaultAssetDetail[], each containing asset, current_usd_price?, available_balance, and total_balance.
listCustodyTransactions
Retrieve the transaction history for a specified vault with optional type filtering, cursor-based pagination, and asset filtering.
CustodyListTransactionsResponse — { result?: { transactions, stats?, next_cursor? }, errors }
The vault ID whose transaction history to retrieve.
Filter by transaction types such as
deposit, withdrawal, trade, otc_buy, otc_sell, custody_transfer, etc.Filter by specific assets:
[{ asset: string, class: CustodyTransactionAssetClassReq }].Number of results per page.
Pagination cursor from a previous response’s
next_cursor.Sort order:
{ order: 'descending' | 'ascending' }.getCustodyTransactionbyId
Retrieve a single custody transaction by its ID.
CustodyGetTransactionResponse — { result?: { transaction, result_type }, error }
Transaction ID to retrieve.
The vault the transaction belongs to.
If
true, allows a longer server-side timeout for complex lookups.getCustodyDepositMethods
Retrieve the available deposit funding methods for a specific asset in a vault. The method name is required to generate deposit addresses.
The vault ID (passed as the
x-vault-id HTTP header automatically by the SDK).The asset to retrieve deposit methods for (e.g.
BTC, ETH).Must be
custody.getCustodyDepositAddresses
Retrieve (or generate a new) deposit address for a given asset and deposit method in a vault.
The vault ID.
The asset to deposit (e.g.
BTC).The deposit method name obtained from
getCustodyDepositMethods.If
true, generates a fresh deposit address.getCustodyWithdrawMethods
List withdrawal methods available for a vault, optionally filtered by asset or network.
The vault ID.
Filter by asset (e.g.
ETH).Must be
custody.Filter by network ID.
getCustodyWithdrawAddresses
List whitelisted withdrawal addresses for a vault.
The vault ID.
Filter by asset.
Filter by withdrawal method name.
If
true, return only verified addresses.listCustodyActivities
Retrieve all custody task activities (audit trail entries) matching the specified filter criteria.
CustodyListActivitiesResponse — { result?: CustodyActivity[], errors, start, total }
Structured filter on
id, scope, vault_id, task_id, approval_id, task_action, activity_action, created_at, or user.{ limit: number, offset: number }getCustodyActivitybyId
Retrieve details for a specific custody activity.
listCustodyTasks
Retrieve review tasks (pending approval workflows) matching the specified criteria.
CustodyListTasksResponse — { result?: CustodyTask[], errors, start, total }
Filter by
id, approval_id, vault_id, scope, state (pending, approved, denied, canceled, expired, executed, failed), action, created_at, updated_at, expires_at, or current_user_decision.{ limit: number, offset: number }[{ by: 'id' | 'vault_id' | 'state' | 'created_at' | 'updated_at' | 'expires_at', direction?: 'asc' | 'desc' }]