generated: '2026-08-08' method: generated source: openapi/bullish-deprecated-api-openapi.yml, openapi/bullish-trading-api-openapi.yml description: Recommended x-agentic-access execution contracts, classified heuristically from the OpenAPI. A governance starting point for exposing this API to AI agents — review and bind audience per deployment. See research/curity/agentic-governance/. summary: operations: 94 by_action_class: connected: 65 acting: 29 by_consequence: read: 65 physical: 18 safety-critical: 3 write: 8 human_in_the_loop_required: 3 operations: - path: /v1/orders method: get operationId: trade-get-orders x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/orders method: post operationId: trade-create-order x-agentic-access: action-class: acting consequence: physical subject: required audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v1/orders method: delete operationId: trade-cancel-order x-agentic-access: action-class: acting consequence: physical subject: required audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v1/orders/{orderId} method: get operationId: trade-get-order-by-id x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/command?commandType=V1CancelAllOrders method: post operationId: trade-cancel-all-open-limit-orders x-agentic-access: action-class: acting consequence: physical subject: required audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v1/command?commandType=V1CancelAllOrdersByMarket method: post operationId: trade-cancel-all-open-limit-orders-by-market x-agentic-access: action-class: acting consequence: physical subject: required audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v1/command?commandType=V1DelayedCancelAllOrders method: post operationId: trade-delayed-cancel-all-open-limit-orders x-agentic-access: action-class: acting consequence: physical subject: required audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v1/command?commandType=V1UnsetDelayedCancelAllOrders method: post operationId: trade-unset-delayed-cancel-all-open-limit-orders x-agentic-access: action-class: acting consequence: safety-critical subject: required audience: null token: max-ttl: 120 exchange: true purpose-required: true proof-of-possession: true escalation: human-in-the-loop: required audit: required - path: /v1/amm-instructions method: get operationId: trade-get-amm-instructions x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/amm-instructions method: post operationId: trade-create-amm-instruction x-agentic-access: action-class: acting consequence: physical subject: required audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v1/amm-instructions method: delete operationId: trade-terminate-amm-instruction x-agentic-access: action-class: acting consequence: safety-critical subject: required audience: null token: max-ttl: 120 exchange: true purpose-required: true proof-of-possession: true escalation: human-in-the-loop: required audit: required - path: /v1/amm-instructions/{liquidityId} method: get operationId: trade-get-amm-instruction-by-id x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/accounts/spot method: get operationId: user-get-spot-accounts x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/accounts/spot/{symbol} method: get operationId: user-get-spot-account-by-symbol x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/command method: post operationId: submitAssetTransferCommand x-agentic-access: action-class: acting consequence: physical subject: required audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v1/nonce method: get operationId: getNonce x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/users/logout method: get operationId: logoutUser x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v2/users/login method: post operationId: loginUserV2 x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v1/users/hmac/login method: get operationId: loginUserHmac x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/accounts/trading-accounts method: get operationId: getTradingAccounts x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/accounts/trading-accounts/{tradingAccountId} method: get operationId: getTradingAccountById x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/accounts/asset method: get operationId: getAssetAccounts x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/accounts/asset/{symbol} method: get operationId: getAssetAccountBySymbol x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v2/orders method: get operationId: getOrdersV2 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v2/orders method: post operationId: createOrderV2 x-agentic-access: action-class: acting consequence: physical subject: required audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/orders/{orderId} method: get operationId: getOrderByIdV2 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v2/orders/client-order-id/{clientOrderId} method: get operationId: trade-get-order-by-client-order-id-v2 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v2/history/orders method: get operationId: getOrdersHistoryV2 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v2/amm-instructions method: get operationId: getAmmInstructions x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v2/amm-instructions method: post operationId: createAmmInstruction x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/amm-instructions/{instructionId} method: get operationId: getAmmInstructionByIdV2 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v2/command method: post operationId: submitCommand x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/command#transferAsset method: post operationId: submitTransferAssetCommand x-agentic-access: action-class: acting consequence: physical subject: required audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/command#terminateAMMInstruction method: post operationId: submitTerminateAMMInstructionCommand x-agentic-access: action-class: acting consequence: safety-critical subject: required audience: null token: max-ttl: 120 exchange: true purpose-required: true proof-of-possession: true escalation: human-in-the-loop: required audit: required - path: /v2/command#cancellations method: post operationId: submitCancellationCommands x-agentic-access: action-class: acting consequence: physical subject: required audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/command#amend method: post operationId: submitAmendmentCommand x-agentic-access: action-class: acting consequence: physical subject: required audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/mmp-configuration method: post operationId: setMmpConfiguration x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/mmp-configuration method: get operationId: getMmpConfiguration x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/trades method: get operationId: getTrades x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/trades/{tradeId} method: get operationId: getTradeById x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/trades/client-order-id/{clientOrderId} method: get operationId: trade-get-trade-by-client-order-id x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/history/trades method: get operationId: getTradesHistory x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/wallets/transactions method: get operationId: getCustodyTransactionHistory x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/wallets/limits/{symbol} method: get operationId: getCustodyWithdrawalLimits x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/wallets/deposit-instructions/crypto/{symbol} method: get operationId: getCryptoDepositInstructions x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/wallets/withdrawal-instructions/crypto/{symbol} method: get operationId: getCryptoWithdrawalInstructions x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/wallets/deposit-instructions/fiat/{symbol} method: get operationId: getFiatDepositInstructions x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/wallets/withdrawal-instructions/fiat/{symbol} method: get operationId: getFiatWithdrawalInstructions x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/wallets/self-hosted/initiate method: post operationId: custody-initiate-self-hosted-verification x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v1/wallets/self-hosted/verification-attempts method: get operationId: custody-get-self-hosted-verifications x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/wallets/withdrawal-instructions/{destinationId} method: delete operationId: custody-delete-withdrawal-instructions x-agentic-access: action-class: acting consequence: physical subject: required audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v1/wallets/withdrawal method: post operationId: createCustodyWithdrawal x-agentic-access: action-class: acting consequence: physical subject: required audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v1/assets method: get operationId: getAssets x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/assets/{symbol} method: get operationId: getAssetBySymbol x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/vol-grids method: get operationId: getVolGrids x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/assets/{symbol}/vol-grid method: get operationId: getVolGridByAsset x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/derivatives-positions method: get operationId: getDerivativesPositions x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/history/derivatives-settlement method: get operationId: getDerivativesSettlementHistory x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/history/transfer method: get operationId: getTransferHistory x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/markets method: get operationId: getMarkets x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/markets/{symbol} method: get operationId: getMarketBySymbol x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/history/markets method: get operationId: getHistoricalMarkets x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/history/markets/{symbol} method: get operationId: getHistoricalMarketBySymbol x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/markets/{symbol}/orderbook/hybrid method: get operationId: getMarketOrderBook x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/markets/{symbol}/trades method: get operationId: getLatestMarketTrades x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/index-prices method: get operationId: getIndexPrices x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/index-prices/{assetSymbol} method: get operationId: getIndexPriceBySymbol x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/history/markets/{symbol}/trades method: get operationId: getHistoricalMarketTrades x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/history/option-trades method: get operationId: getHistoricalOptionTrades x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/history/markets/{symbol}/funding-rate method: get operationId: getFundingRateHistory x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/option-ladder method: get operationId: getOptionLadder x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/option-ladder/{symbol} method: get operationId: getOptionLadderBySymbol x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/markets/{symbol}/tick method: get operationId: getMarketTick x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/markets/{symbol}/candle method: get operationId: getMarketCandles x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/history/borrow-interest method: get operationId: getBorrowInterestHistory x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/time method: get operationId: getExchangeTime x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/simulate-portfolio-margin method: post operationId: simulatePortfolioMargin x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v1/bulk-simulate-portfolio-margin method: post operationId: bulkSimulatePortfolioMargin x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/otc-trades method: post operationId: createOtcTrade x-agentic-access: action-class: acting consequence: physical subject: required audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/otc-trades method: get operationId: getOtcTrades x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v2/otc-trades/{otcTradeId} method: get operationId: getOtcTradeById x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v2/otc-trades/unconfirmed-trade method: get operationId: getUnconfirmedOtcTrade x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v2/otc-command#approve method: post operationId: otc-command-approve x-agentic-access: action-class: acting consequence: physical subject: required audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/otc-command#cancel method: post operationId: otc-command-cancel x-agentic-access: action-class: acting consequence: physical subject: required audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/otc-trades/delegated-accounts method: get operationId: otc-get-delegated-accounts x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v2/idb/delegated-accounts method: get operationId: idb-otc-get-delegated-accounts x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v2/idb/otc-trades method: post operationId: idb-otc-create-trade x-agentic-access: action-class: acting consequence: physical subject: required audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/idb/otc-trades#list method: get operationId: idb-otc-get-trades x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v2/idb/otc-command#cancel method: post operationId: idb-otc-command-cancel x-agentic-access: action-class: acting consequence: physical subject: required audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/idb/otc-command#update-remarks method: post operationId: idb-otc-command-update-remarks x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v1/expiry-prices/{symbol} method: get operationId: get-expiry-prices--symbol x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/markets/{symbol}/auctions method: get operationId: getAuctionBySymbol x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/markets/{symbol}/auctions/noii method: get operationId: getAuctionNoii x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v1/history/markets/{symbol}/auctions method: get operationId: getHistoricalAuctionResults x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none