{"openapi":"3.0.0","paths":{"/api/v1/networks":{"get":{"operationId":"NetworksController_networks","summary":"Returns networks supported by the API","parameters":[{"name":"name","required":false,"in":"query","description":"Title of the network to search for","schema":{"example":"mainnet"}},{"name":"chainId","required":false,"in":"query","description":"Chain ID of the network to search for","schema":{"example":"1"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ConnectedNetwork"}}}}}},"tags":["metadata"]}},"/api/v1/prices/{chainId}/{address}":{"get":{"operationId":"PricesController_getPrice","summary":"Returns price for a token","parameters":[{"name":"address","required":true,"in":"path","description":"Address of the token to search for","schema":{"example":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}},{"name":"chainId","required":true,"in":"path","description":"Chain ID of the network to search for","schema":{"example":"1"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Price"}}}}},"tags":["metadata"]}},"/api/v1/prices/{chainId}":{"get":{"operationId":"PricesController_getPrices","summary":"Returns price for multiple tokens","parameters":[{"name":"chainId","required":true,"in":"path","description":"Chain ID of the network to search for","schema":{"example":"1","type":"number"}},{"name":"addresses","required":true,"in":"query","description":"Token address on the selected chain (max 100 addresses). Solana addresses are case-sensitive.","schema":{"example":["0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"],"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Price"}],"nullable":true}}}}}},"tags":["metadata"]}},"/api/v1/account/accountId":{"get":{"operationId":"AccountController_accountId","summary":"Returns accountId connected to your api key used in the on-chain event.","parameters":[],"responses":{"200":{"description":"Your accountId","content":{"application/json":{"schema":{"type":"string"}}}}},"tags":["metadata"]}},"/api/v1/shortcuts/route":{"get":{"operationId":"RouterController_routeShortcutTransaction","summary":"Find optimal route between tokens (direct routes, zaps)","parameters":[{"name":"chainId","required":true,"in":"query","description":"Chain ID of the network to execute the transaction on","schema":{"default":1,"type":"number"}},{"name":"fromAddress","required":true,"in":"query","description":"Ethereum address of the wallet to send the transaction from","schema":{"default":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","type":"string"}},{"name":"routingStrategy","required":false,"in":"query","description":"Routing strategy to use","schema":{"nullable":true,"enum":["ensowallet-v2","router","delegate","router-legacy","delegate-legacy"],"type":"string"}},{"name":"executionMode","required":false,"in":"query","description":"Controls how quote is built based on execution mode","schema":{"default":"user","enum":["user","backend"],"type":"string"}},{"name":"toEoa","required":false,"in":"query","description":"Flag that indicates if gained tokenOut should be sent to EOA","deprecated":true,"schema":{"nullable":true,"type":"boolean"}},{"name":"includeTransactionCost","required":false,"in":"query","description":"Include point-in-time source-chain transaction cost estimates in native units and USD, plus USD values for reported bridge fees","schema":{"default":false,"type":"boolean"}},{"name":"useIntentAddress","required":false,"in":"query","description":"Route a cross-chain request through an intent address on the destination chain. The bridge delivers to that address, then a keeper runs the destination route and sends tokenOut to the receiver. When omitted, intents are used if both chains support them. Set to false to use a bridge callback instead. Ignored for same-chain routes.","schema":{"type":"boolean"}},{"name":"spender","required":false,"in":"query","description":"Ethereum address of the spender of the tokenIn","schema":{"example":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","type":"string"}},{"name":"refundReceiver","required":false,"in":"query","description":"Ethereum address of the receiver of any dust tokens produced during execution. Required for routes to Solana.","schema":{"example":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","type":"string"}},{"name":"amountIn","required":true,"in":"query","description":"Amount of tokenIn to swap in wei","schema":{"example":["1000000000000000000"],"type":"array","items":{"type":"string"}}},{"name":"minAmountOut","required":false,"in":"query","description":"Minimum amount out in wei. If specified, slippage should not be specified","schema":{"default":null,"type":"array","items":{"type":"string"}}},{"name":"slippage","required":false,"in":"query","description":"Slippage in basis points (1/10000). e.g. 50 = 0.50%. If specified, minAmountOut should not be specified","schema":{"default":"50","example":"300","type":"string"}},{"name":"ignoreAggregators","required":false,"in":"query","description":"A list of swap aggregators to be ignored from consideration","schema":{"nullable":true,"type":"array","items":{"type":"string","enum":["0x","1inch","openocean","kyberswap","native","paraswap","bebop","barter","sushiswap-router","ooga-booga","renegade","uniswap","rooster","wowmax","grapher","hyperbloom","hyperswap","hyperflow","fly","eisen","nordstern","everlong","bitget","akka"]}}},{"name":"ignoreStandards","required":false,"in":"query","description":"A list of standards to be ignored from consideration","schema":{"nullable":true,"type":"array","items":{"type":"string"}}},{"name":"ignoreBridges","required":false,"in":"query","description":"A list of bridges to be ignored from consideration","schema":{"default":[],"type":"array","items":{"type":"string","enum":["cctp","stargate","ccip","relay","layerzero-teller","arbitrum-native","mayan"]}}},{"name":"crosschainRouteMode","required":false,"in":"query","description":"Controls cross-chain route complexity. direct uses only a bridge, source allows routing before the bridge, destination allows routing after the bridge, sourceOrDestination allows routing on either chain but not both, and full allows routing on both chains","schema":{"default":"full","enum":["direct","source","destination","sourceOrDestination","full"],"type":"string"}},{"name":"effort","required":false,"in":"query","description":"Latency/quality trade-off for pathfinding and aggregator querying. light returns fastest over a reduced search space (short aggregator wait with early return once two usable quotes arrive, fewer candidate paths, no destination-side bridge routing), medium waits the full short window over the full search space, high is the default balanced behavior, and max queries all aggregators in parallel with an extended wait for best execution (higher CU cost)","schema":{"enum":["light","medium","high","max"],"type":"string"}},{"name":"referralCode","required":false,"in":"query","description":"Referral code that will be included in an on-chain event.","schema":{"maxLength":16,"example":"0123456789ABCDEF","type":"string"}},{"name":"tokenIn","required":true,"in":"query","description":"Ethereum address of the token to swap from. For ETH, use 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","schema":{"example":["0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"],"type":"array","items":{"type":"string"}}},{"name":"tokenOut","required":true,"in":"query","description":"Destination token addresses. Solana mints are case-sensitive; native SOL uses 11111111111111111111111111111111.","schema":{"type":"array","items":{"type":"string"}}},{"name":"receiver","required":false,"in":"query","description":"Destination recipient. Required for cross-chain routes; Solana uses a case-sensitive Base58 address.","schema":{"type":"string"}},{"name":"destinationChainId","required":false,"in":"query","description":"Chain ID of the network to bridge to and receive tokenOut","schema":{"type":"number"}},{"name":"allowAsync","required":false,"in":"query","description":"Allow async redeems, where tokenOut is paid after the transaction. An async route returns amountOut, minAmountOut and priceImpact as null and describes the payout in `async`. Cannot be combined with minAmountOut or useIntentAddress, intents do not support async redeems.","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteShortcutTransaction"}}}},"400":{"description":""}},"tags":["shortcuts"]},"post":{"operationId":"RouterController_postRouteShortcutTransaction","summary":"Find optimal route between tokens (direct routes, zaps)","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteShortcutVariableInputs"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteShortcutTransaction"}}}},"400":{"description":""}},"tags":["shortcuts"]}},"/api/v1/shortcuts/route/nontokenized":{"get":{"operationId":"NontokenizedController_routeNontokenizedShorcutTransaction","summary":"Find optimal route between token and nontokenized position","parameters":[{"name":"chainId","required":false,"in":"query","description":"Chain ID of the network to execute the transaction on","schema":{"default":1,"example":80094,"type":"number"}},{"name":"fromAddress","required":true,"in":"query","description":"Ethereum address of the wallet to send the transaction from","schema":{"default":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","type":"string"}},{"name":"routingStrategy","required":false,"in":"query","description":"Routing strategy to use","schema":{"nullable":true,"default":"router","enum":["router","delegate","delegate-legacy","checkout"],"type":"string"}},{"name":"referralCode","required":false,"in":"query","description":"Referral code that will be included in an on-chain event.","schema":{"maxLength":16,"example":"0123456789ABCDEF","type":"string"}},{"name":"destinationChainId","required":false,"in":"query","description":"Chain ID of the network to bridge to and receive nontokenized position","schema":{"type":"number"}},{"name":"tokenIn","required":true,"in":"query","description":"Ethereum address of the token to swap from. For ETH, use 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","schema":{"example":["0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"],"type":"array","items":{"type":"string"}}},{"name":"positionOut","required":true,"in":"query","description":"ID of a non-tokenized position","schema":{"type":"string"}},{"name":"slippage","required":false,"in":"query","description":"Slippage in basis points (1/10000). If specified, minAmountOut should not be specified","schema":{"default":"50","example":"300","type":"string"}},{"name":"ignoreAggregators","required":false,"in":"query","description":"A list of swap aggregators to be ignored from consideration","schema":{"nullable":true,"type":"array","items":{"type":"string","enum":["0x","1inch","openocean","kyberswap","native","paraswap","bebop","barter","sushiswap-router","ooga-booga","renegade","uniswap","rooster","wowmax","grapher","hyperbloom","hyperswap","hyperflow","fly","eisen","nordstern","everlong","bitget","akka"]}}},{"name":"ignoreBridges","required":false,"in":"query","description":"A list of bridge protocols to be ignored from consideration","schema":{"nullable":true,"type":"array","items":{"type":"string","enum":["cctp","stargate","ccip","relay","layerzero-teller","arbitrum-native","mayan"]}}},{"name":"ignoreStandards","required":false,"in":"query","description":"A list of standards to be ignored from consideration","schema":{"nullable":true,"type":"array","items":{"type":"string"}}},{"name":"amountIn","required":true,"in":"query","description":"Amount of tokenIn to swap in wei","schema":{"example":["1000000000000000000"],"type":"array","items":{"type":"string"}}},{"name":"receiver","required":true,"in":"query","description":"Ethereum address of the receiver of the positionOut","schema":{"example":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","type":"string"}},{"name":"spender","required":false,"in":"query","description":"Ethereum address of the spender of the tokenIn","schema":{"example":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","type":"string"}},{"name":"refundReceiver","required":false,"in":"query","description":"Ethereum address of the receiver of any dust tokens that might be produced during the execution of actions","schema":{"example":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NontokenizedRouteShortcutTransaction"}}}},"400":{"description":""}},"tags":["shortcuts"]}},"/api/v1/wallet":{"get":{"operationId":"WalletController_wallet","summary":"Returns EnsoWallet-v2 address details","description":"Deterministic (CREATE2) EnsoWallet-v2 address for `fromAddress` on `chainId`, and whether it is deployed. The wallet is deployed by the factory inside the first transaction routed through it, so the address can be used as an approval target beforehand.","parameters":[{"name":"chainId","required":true,"in":"query","description":"Chain ID of the network to execute the transaction on","schema":{"default":1,"type":"number"}},{"name":"fromAddress","required":true,"in":"query","description":"Ethereum address of the wallet to send the transaction from","schema":{"default":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","type":"string"}},{"name":"routingStrategy","required":false,"in":"query","description":"Routing strategy to use","schema":{"nullable":true,"enum":["ensowallet-v2","router","delegate","router-legacy","delegate-legacy"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Wallet"}}}}},"tags":["wallet"]}},"/api/v1/wallet/approve":{"get":{"operationId":"WalletController_createApproveTransaction","summary":"Returns transaction that approves your EnsoWallet-v2 to spend tokens","parameters":[{"name":"chainId","required":true,"in":"query","description":"Chain ID of the network to execute the transaction on","schema":{"default":1,"type":"number"}},{"name":"fromAddress","required":true,"in":"query","description":"Ethereum address of the wallet to send the transaction from","schema":{"default":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","type":"string"}},{"name":"routingStrategy","required":false,"in":"query","description":"Routing strategy to use","schema":{"nullable":true,"enum":["ensowallet-v2","router","delegate","router-legacy","delegate-legacy"],"type":"string"}},{"name":"tokenAddress","required":true,"in":"query","description":"ERC20 token address of the token to approve","schema":{"default":"0x6b175474e89094c44da98b954eedeac495271d0f","type":"string"}},{"name":"amount","required":true,"in":"query","description":"Amount of tokens to approve in wei","schema":{"default":"1000000000000000000000000000","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletApproveTransaction"}}}}},"tags":["wallet"]}},"/api/v1/wallet/balances":{"get":{"operationId":"WalletController_walletBalances","summary":"Returns all balances for a given wallet","parameters":[{"name":"eoaAddress","required":true,"in":"query","description":"Address of the eoa with which to associate the ensoWallet-v2 for balances","schema":{"default":"0x93621DCA56fE26Cdee86e4F6B18E116e9758Ff11","type":"string"}},{"name":"useEoa","required":true,"in":"query","description":"If true returns balances for the provided address, instead of the associated ensoWallet-v2","schema":{"type":"boolean"}},{"name":"chainId","required":true,"in":"query","schema":{"oneOf":[{"type":"integer"},{"type":"string","enum":["all"]}],"example":"all"},"description":"Chain ID (or 'all') to fetch balances for specified network"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WalletBalance"}}}}}},"tags":["wallet"]}},"/api/v1/tokens":{"get":{"operationId":"TokensController_tokens","summary":"Returns tokens and their details","parameters":[{"name":"project","required":false,"in":"query","description":"The overarching project or platform associated with the DeFi token","schema":{"example":"aave","type":"string"}},{"name":"protocolSlug","required":false,"in":"query","description":"The specific standard integration or version of the DeFi project","schema":{"example":"aave-v2","type":"string"}},{"name":"underlyingTokens","required":false,"in":"query","description":"Underlying tokens of defi token","schema":{"example":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"],"type":"array","items":{"type":"string"}}},{"name":"underlyingTokensExact","required":false,"in":"query","description":"Exact composition of underlying tokens of defi token","schema":{"example":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"],"type":"array","items":{"type":"string"}}},{"name":"primaryAddress","required":false,"in":"query","description":"Ethereum addresses for contract interaction of defi tokens","schema":{"example":["0x7d2768dE32b0b80b7a3454c06BdAc94A69DDc7A9"],"type":"array","items":{"type":"string"}}},{"name":"address","required":false,"in":"query","description":"Token addresses. Without chainId, searches across chains. Solana addresses are case-sensitive.","schema":{"example":["0x030bA81f1c18d280636F32af80b9AAd02Cf0854e"],"type":"array","items":{"type":"string"}}},{"name":"name","required":false,"in":"query","description":"Names of the tokens","schema":{"example":["Bridged USDT"],"type":"array","items":{"type":"string"}}},{"name":"symbol","required":false,"in":"query","description":"Symbols of the tokens","schema":{"example":["USDC"],"type":"array","items":{"type":"string"}}},{"name":"chainId","required":false,"in":"query","description":"Chain ID of the network of the token","schema":{"example":1,"type":"number"}},{"name":"type","required":false,"in":"query","description":"Type of token.\n      If not provided, both types will be taken into account","schema":{"example":"defi","enum":["defi","base"],"type":"string"}},{"name":"liquidityType","required":false,"in":"query","description":"Type of liquidity.\n      If not provided, both types will be taken into account","schema":{"example":"SingleToken","enum":["SingleToken","MultiToken"],"type":"string"}},{"name":"page","required":false,"in":"query","description":"Pagination page number. Pages are of length 1000","schema":{"example":"1","type":"number"}},{"name":"pageSize","required":false,"in":"query","description":"Number of items per page (max 1000)","schema":{"default":1000,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Cursor for pagination. Pages are of length 1000","schema":{"example":"1233456","type":"number"}},{"name":"includeMetadata","required":false,"in":"query","description":"Whether to include token metadata (symbol, name and logos)","schema":{"default":false,"example":false,"type":"boolean"}},{"name":"includeUnderlying","required":false,"in":"query","description":"Whether to include underlying tokes","schema":{"default":true,"example":false,"type":"boolean"}},{"name":"apyFrom","required":false,"in":"query","description":"Only include tokens with APY over this value","schema":{"example":1,"type":"number"}},{"name":"apyTo","required":false,"in":"query","description":"Only include tokens with APY below this value","schema":{"example":10,"type":"number"}},{"name":"tvlFrom","required":false,"in":"query","description":"Only include tokens with TVL over this value","schema":{"example":0,"type":"number"}},{"name":"tvlTo","required":false,"in":"query","description":"Only include tokens with TVL below this value","schema":{"example":10000000,"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResult"},{"properties":{"data":{"type":"array","description":"Returned data for current page","items":{"$ref":"#/components/schemas/PositionModel"}}}}]}}}}},"tags":["metadata"]}},"/api/v1/aggregators":{"get":{"operationId":"AggregatorsController_aggregators","summary":"Returns aggregators supported by the API (can be controled via disableAggregators param)","parameters":[],"responses":{"200":{"description":"Returns a list of aggregators","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}}},"tags":["metadata"]}},"/api/v1/actions":{"get":{"operationId":"ActionsController_findAll","summary":"Returns actions available to use in bundle shortcuts","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Action"}}}}}},"tags":["standards"]}},"/api/v1/actions/{slug}":{"get":{"operationId":"ActionsController_getActionsBySlug","summary":"Returns actions available to use in bundle shortcuts for a given protocol","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Action"}}}}}},"tags":["standards"]}},"/api/v1/layerzero/pool":{"get":{"operationId":"LayerZeroController_getPoolAddress","summary":"Get LayerZero pool address for a token on a specific chain","description":"Returns the LayerZero Stargate pool address for a given token address and chain ID. Returns null if no pool exists for the token on that chain.","parameters":[{"name":"chainId","required":true,"in":"query","description":"Chain ID","schema":{"type":"number"}},{"name":"token","required":true,"in":"query","description":"Token address on source chain","schema":{"type":"string"}},{"name":"destinationChainId","required":false,"in":"query","description":"Chain ID of destination chain","schema":{"type":"number"}},{"name":"destinationToken","required":false,"in":"query","description":"Token address on destination chain","schema":{"type":"string"}}],"responses":{"200":{"description":"Pool address lookup result","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LZPoolLookupResponse"}}}}}},"tags":["layerzero"]}},"/api/v1/stargate/pool":{"get":{"operationId":"LayerZeroController_getPoolAddress","summary":"Get LayerZero pool address for a token on a specific chain","description":"Returns the LayerZero Stargate pool address for a given token address and chain ID. Returns null if no pool exists for the token on that chain.","parameters":[{"name":"chainId","required":true,"in":"query","description":"Chain ID","schema":{"type":"number"}},{"name":"token","required":true,"in":"query","description":"Token address on source chain","schema":{"type":"string"}},{"name":"destinationChainId","required":false,"in":"query","description":"Chain ID of destination chain","schema":{"type":"number"}},{"name":"destinationToken","required":false,"in":"query","description":"Token address on destination chain","schema":{"type":"string"}}],"responses":{"200":{"description":"Pool address lookup result","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LZPoolLookupResponse"}}}}}},"tags":["layerzero"]}},"/api/v1/layerzero/bridge/check":{"get":{"operationId":"LayerZeroController_checkBridgeTransaction","summary":"Check bridge transaction status","description":"Returns comprehensive information about a cross-chain bridge transaction, including LayerZero message status, on-chain events, and transaction data from Enso.","parameters":[{"name":"chainId","required":true,"in":"query","description":"Chain ID of the source transaction","schema":{"type":"number"}},{"name":"txHash","required":true,"in":"query","description":"Transaction hash","schema":{"example":"0x1234567890abcdef...","type":"string"}}],"responses":{"200":{"description":"Bridge transaction status and details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeTransactionResponse"}}}},"429":{"description":"Rate limit exceeded"}},"tags":["layerzero"]}},"/api/v1/stargate/bridge/check":{"get":{"operationId":"LayerZeroController_checkBridgeTransaction","summary":"Check bridge transaction status","description":"Returns comprehensive information about a cross-chain bridge transaction, including LayerZero message status, on-chain events, and transaction data from Enso.","parameters":[{"name":"chainId","required":true,"in":"query","description":"Chain ID of the source transaction","schema":{"type":"number"}},{"name":"txHash","required":true,"in":"query","description":"Transaction hash","schema":{"example":"0x1234567890abcdef...","type":"string"}}],"responses":{"200":{"description":"Bridge transaction status and details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeTransactionResponse"}}}},"429":{"description":"Rate limit exceeded"}},"tags":["layerzero"]}},"/api/v1/standards":{"get":{"operationId":"StandardsController_standards","summary":"Returns standards and methods available to use in bundle shortcuts","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Standard"}}}}}},"tags":["standards"]}},"/api/v1/standards/{slug}":{"get":{"operationId":"StandardsController_getProtocolBySlug","summary":"Returns a standard by slug","parameters":[{"name":"slug","required":true,"in":"path","description":"The protocol slug","schema":{"example":"aave-v2","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProtocolModel"}}}}},"tags":["standards"]}},"/api/v1/shortcuts/bundle":{"post":{"operationId":"BundleController_bundleShortcutTransaction","summary":"Bundle a list of actions into a single transaction","externalDocs":{"url":"https://docs.enso.build/pages/build/get-started/bundling-actions","description":"More end-to-end bundle examples"},"parameters":[{"name":"chainId","required":true,"in":"query","description":"Chain ID of the network to execute the transaction on","schema":{"default":1,"type":"number"}},{"name":"fromAddress","required":true,"in":"query","description":"Ethereum address of the wallet to send the transaction from","schema":{"default":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","type":"string"}},{"name":"referralCode","required":false,"in":"query","description":"Referral code that will be included in an on-chain event.","schema":{"maxLength":16,"example":"0123456789ABCDEF","type":"string"}},{"name":"routingStrategy","required":false,"in":"query","description":"Routing strategy to use","schema":{"nullable":true,"enum":["ensowallet-v2","router","delegate","router-legacy","delegate-legacy"],"type":"string"}},{"name":"executionMode","required":false,"in":"query","description":"Controls how quote is built based on execution mode","schema":{"default":"user","enum":["user","backend"],"type":"string"}},{"name":"receiver","required":false,"in":"query","description":"Ethereum address of the receiver of the tokenOut","schema":{"example":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","type":"string"}},{"name":"spender","required":false,"in":"query","description":"Ethereum address of the spender of the tokenIn","schema":{"example":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","type":"string"}},{"name":"refundReceiver","required":false,"in":"query","description":"Ethereum address of the receiver of any dust tokens that might be produced during the execution of actions","schema":{"example":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","type":"string"}},{"name":"ignoreAggregators","required":false,"in":"query","description":"A list of swap aggregators to be ignored from consideration","schema":{"nullable":true,"type":"array","items":{"type":"string","enum":["0x","1inch","openocean","kyberswap","native","paraswap","bebop","barter","sushiswap-router","ooga-booga","renegade","uniswap","rooster","wowmax","grapher","hyperbloom","hyperswap","hyperflow","fly","eisen","nordstern","everlong","bitget","akka"]}}},{"name":"skipQuote","required":false,"in":"query","description":"Flag to skip quoting (if true, amountOut and gas will not be returned)","schema":{"type":"boolean"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/RouteActionDto"},{"$ref":"#/components/schemas/SwapActionDto"},{"$ref":"#/components/schemas/BridgeActionDto"},{"$ref":"#/components/schemas/BalanceActionDto"},{"$ref":"#/components/schemas/ApproveActionDto"},{"$ref":"#/components/schemas/TransferActionDto"},{"$ref":"#/components/schemas/TransferFromActionDto"},{"$ref":"#/components/schemas/PermitTransferFromActionDto"},{"$ref":"#/components/schemas/DepositActionDto"},{"$ref":"#/components/schemas/RedeemActionDto"},{"$ref":"#/components/schemas/DepositCLMMActionDto"},{"$ref":"#/components/schemas/RedeemCLMMActionDto"},{"$ref":"#/components/schemas/TokenizedSingleDepositActionDto"},{"$ref":"#/components/schemas/TokenizedMultiDepositActionDto"},{"$ref":"#/components/schemas/TokenizedSingleRedeemActionDto"},{"$ref":"#/components/schemas/TokenizedMultiRedeemActionDto"},{"$ref":"#/components/schemas/MultiOutSingleDepositActionDto"},{"$ref":"#/components/schemas/CallActionDto"},{"$ref":"#/components/schemas/FlashloanActionDto"},{"$ref":"#/components/schemas/WithdrawActionDto"},{"$ref":"#/components/schemas/SplitActionDto"},{"$ref":"#/components/schemas/MergeActionDto"},{"$ref":"#/components/schemas/MinAmountOutActionDto"},{"$ref":"#/components/schemas/SlippageActionDto"},{"$ref":"#/components/schemas/FeeActionDto"},{"$ref":"#/components/schemas/EnsoFeeActionDto"},{"$ref":"#/components/schemas/PaymasterFeeActionDto"},{"$ref":"#/components/schemas/RepayActionDto"},{"$ref":"#/components/schemas/BorrowActionDto"},{"$ref":"#/components/schemas/HarvestActionDto"},{"$ref":"#/components/schemas/SingleDepositActionDto"},{"$ref":"#/components/schemas/MultiDepositActionDto"},{"$ref":"#/components/schemas/SingleRedeemActionDto"},{"$ref":"#/components/schemas/MultiRedeemActionDto"},{"$ref":"#/components/schemas/MathActionDto"},{"$ref":"#/components/schemas/ComparisonActionDto"},{"$ref":"#/components/schemas/ConditionActionDto"},{"$ref":"#/components/schemas/ToggleActionDto"}],"discriminator":{"propertyName":"action","mapping":{"route":"#/components/schemas/RouteActionDto","swap":"#/components/schemas/SwapActionDto","bridge":"#/components/schemas/BridgeActionDto","balance":"#/components/schemas/BalanceActionDto","approve":"#/components/schemas/ApproveActionDto","transfer":"#/components/schemas/TransferActionDto","transferfrom":"#/components/schemas/TransferFromActionDto","permittransferfrom":"#/components/schemas/PermitTransferFromActionDto","deposit":"#/components/schemas/DepositActionDto","redeem":"#/components/schemas/RedeemActionDto","depositclmm":"#/components/schemas/DepositCLMMActionDto","redeemclmm":"#/components/schemas/RedeemCLMMActionDto","tokenizedsingledeposit":"#/components/schemas/TokenizedSingleDepositActionDto","tokenizedmultideposit":"#/components/schemas/TokenizedMultiDepositActionDto","tokenizedsingleredeem":"#/components/schemas/TokenizedSingleRedeemActionDto","tokenizedmultiredeem":"#/components/schemas/TokenizedMultiRedeemActionDto","multioutsingledeposit":"#/components/schemas/MultiOutSingleDepositActionDto","call":"#/components/schemas/CallActionDto","flashloan":"#/components/schemas/FlashloanActionDto","withdraw":"#/components/schemas/WithdrawActionDto","singlewithdraw":"#/components/schemas/WithdrawActionDto","singlewithdrawwithpositionid":"#/components/schemas/WithdrawActionDto","multiwithdraw":"#/components/schemas/WithdrawActionDto","split":"#/components/schemas/SplitActionDto","merge":"#/components/schemas/MergeActionDto","minamountout":"#/components/schemas/MinAmountOutActionDto","slippage":"#/components/schemas/SlippageActionDto","fee":"#/components/schemas/FeeActionDto","ensofee":"#/components/schemas/EnsoFeeActionDto","paymasterfee":"#/components/schemas/PaymasterFeeActionDto","repay":"#/components/schemas/RepayActionDto","borrow":"#/components/schemas/BorrowActionDto","harvest":"#/components/schemas/HarvestActionDto","singledeposit":"#/components/schemas/SingleDepositActionDto","multideposit":"#/components/schemas/MultiDepositActionDto","singleredeem":"#/components/schemas/SingleRedeemActionDto","multiredeem":"#/components/schemas/MultiRedeemActionDto","add":"#/components/schemas/MathActionDto","sub":"#/components/schemas/MathActionDto","mul":"#/components/schemas/MathActionDto","div":"#/components/schemas/MathActionDto","min":"#/components/schemas/MathActionDto","max":"#/components/schemas/MathActionDto","isequal":"#/components/schemas/ComparisonActionDto","islessthan":"#/components/schemas/ComparisonActionDto","isequalorlessthan":"#/components/schemas/ComparisonActionDto","isgreaterthan":"#/components/schemas/ComparisonActionDto","isequalorgreaterthan":"#/components/schemas/ComparisonActionDto","not":"#/components/schemas/ConditionActionDto","check":"#/components/schemas/ConditionActionDto","toggle":"#/components/schemas/ToggleActionDto"}},"description":"Each item is a protocol action; items are executed sequentially"},"description":"List of actions to bundle"},"examples":{"route":{"summary":"Route 0.0000001 ETH -> stETH with 3% slippage (Mainnet)","value":[{"protocol":"enso","action":"route","args":{"tokenIn":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","tokenOut":"0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84","amountIn":"100000000000","slippage":"300"}}]},"bridge":{"summary":"Bridge native (Optimism -> Unichain) with callback route","value":[{"protocol":"stargate","action":"bridge","args":{"primaryAddress":"0xe8cdf27acd73a434d661c84887215f7598e7d0d3","destinationChainId":130,"tokenIn":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","amountIn":"5000000000000000000","receiver":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","callback":[{"protocol":"enso","action":"balance","args":{"token":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"}},{"protocol":"enso","action":"route","args":{"slippage":"100","tokenIn":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","tokenOut":"0x078d782b760474a361dda0af3839290b0ef57ad6","amountIn":{"useOutputOfCallAt":0}}}]}}]},"approve":{"summary":"Approve token spending","value":[{"protocol":"erc20","action":"approve","args":{"token":"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2","spender":"0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D","amount":"115792089237316195423570985008687907853269984665640564039457","routingStrategy":"router"}}]},"deposit":{"summary":"Deposit into a vault","value":[{"protocol":"yearn-v2","action":"deposit","args":{"tokenIn":"0x6B175474E89094C44Da98b954EedeAC495271d0F","tokenOut":"0xdA816459F1AB5631232FE5e97a05BBBb94970c95","amountIn":"10000000000000000000","primaryAddress":"0xdA816459F1AB5631232FE5e97a05BBBb94970c95","receiver":"0x742d35Cc6634C0532925a3b844Bc454e4438f44e"}}]},"redeem":{"summary":"Redeem from a vault","value":[{"protocol":"yearn-v2","action":"redeem","args":{"tokenIn":"0xdA816459F1AB5631232FE5e97a05BBBb94970c95","tokenOut":"0x6B175474E89094C44Da98b954EedeAC495271d0F","amountIn":"10000000000000000000","primaryAddress":"0xdA816459F1AB5631232FE5e97a05BBBb94970c95","receiver":"0x742d35Cc6634C0532925a3b844Bc454e4438f44e"}}]},"call":{"summary":"Reference previous output as msg.value and call deposit on WETH","value":[{"protocol":"enso","action":"route","args":{"tokenIn":"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","tokenOut":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","amountIn":"1000000000"}},{"protocol":"enso","action":"call","args":{"address":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2","method":"deposit","abi":"function deposit() external payable","args":[],"value":{"useOutputOfCallAt":0}}}]},"split_merge":{"summary":"Split USDT then deposit CLMM on Sushiswap V3 (Arbitrum One)","value":[{"protocol":"enso","action":"split","args":{"tokenIn":"0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9","tokenOut":["0xaf88d065e77c8cc2239327c5edb3a432268e5831","0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9"],"amountIn":"100000000"}},{"protocol":"sushiswap-v3","action":"depositclmm","args":{"tokenOut":"0xf0cbce1942a68beb3d1b73f0dd86c8dcc363ef49","ticks":[-887271,887271],"tokenIn":["0xaf88d065e77c8cc2239327c5edb3a432268e5831","0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9"],"poolFee":"100","amountIn":[{"useOutputOfCallAt":0,"index":0},{"useOutputOfCallAt":0,"index":1}]}}]},"fees":{"summary":"Apply fee and ensofee","value":[{"protocol":"enso","action":"fee","args":{"receiver":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","token":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","amount":"1000000","bps":"50"}},{"protocol":"enso","action":"ensofee","args":{"token":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","amount":{"useOutputOfCallAt":0},"bps":"25"}}]},"zap_multiple_lps":{"summary":"Multiple dependent routes (Mainnet)","value":[{"protocol":"enso","action":"route","args":{"tokenIn":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","tokenOut":"0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84","amountIn":"1000000000000000000","slippage":"300"}},{"protocol":"enso","action":"route","args":{"tokenIn":"0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84","tokenOut":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","amountIn":{"useOutputOfCallAt":0},"slippage":"1000","ignoreAggregators":["openocean"]}},{"protocol":"enso","action":"route","args":{"tokenIn":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","tokenOut":"0x6b175474e89094c44da98b954eedeac495271d0f","amountIn":{"useOutputOfCallAt":1},"slippage":"300"}}]},"yield_compounding":{"summary":"Complex bundle: route -> aave deposit -> token transfer","value":[{"protocol":"enso","action":"route","args":{"tokenIn":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","tokenOut":"0xae78736Cd615f374D3085123A210448E74Fc6393","amountIn":"10000000000000000","slippage":"300"}},{"protocol":"aave-v3","action":"deposit","args":{"primaryAddress":"0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2","tokenIn":"0xae78736Cd615f374D3085123A210448E74Fc6393","tokenOut":"0xCc9EE9483f662091a1de4795249E24aC0aC2630f","amountIn":{"useOutputOfCallAt":0}}},{"protocol":"enso","action":"call","args":{"address":"0xCc9EE9483f662091a1de4795249E24aC0aC2630f","method":"transfer","abi":"function transfer(address,uint256) external","args":["0x93621DCA56fE26Cdee86e4F6B18E116e9758Ff11",{"useOutputOfCallAt":1}]}}]},"math_split_transfer":{"summary":"Route ETH -> USDC, divide by 2, transfer halves to two addresses","value":[{"protocol":"enso","action":"route","args":{"tokenIn":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","tokenOut":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","amountIn":"1000000000000000000","slippage":"300"}},{"protocol":"math","action":"div","args":{"amountA":{"useOutputOfCallAt":0},"amountB":"2"}},{"protocol":"erc20","action":"transfer","args":{"token":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","amount":{"useOutputOfCallAt":1},"receiver":"0xE02F274E67871a4eb8e1463651173b13338f89c2"}},{"protocol":"erc20","action":"transfer","args":{"token":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","amount":{"useOutputOfCallAt":1},"receiver":"0x70f87ac4d8441626a53DF0E65361190E190C1b4e"}}]},"alchemix_base_deposit_borrow":{"summary":"Base: deposit one micro-USDC into Alchemix and borrow alUSDb","isSkipped":true,"value":[{"protocol":"alchemix-myts","action":"deposit","args":{"primaryAddress":"0xb8BeFE5a6941ca4022a52042075ff269C3C67467","tokenIn":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","tokenOut":"0xb8BeFE5a6941ca4022a52042075ff269C3C67467","amountIn":"1"}},{"protocol":"alchemix-vaults-v3","action":"deposit","args":{"primaryAddress":"0xEb380d86EeD275C9F2eD77745aB1B2ccf364BF7A","tokenIn":"0xb8BeFE5a6941ca4022a52042075ff269C3C67467","amountIn":{"useOutputOfCallAt":0},"receiver":"0x0000000000000000000000000000000000000000","tokenId":"0"}},{"protocol":"alchemix-vaults-v3","action":"borrow","args":{"primaryAddress":"0xEb380d86EeD275C9F2eD77745aB1B2ccf364BF7A","tokenOut":"0x877014E21c32feA108B6A1f45f367efc9a2d9B9F","amountOut":"500000000000","tokenId":{"useOutputOfCallAt":1,"index":0}}}]},"alchemix_loop_1":{"summary":"Alchemix self-repaying loop with extra borrow (regression: per-action receiver routing)","value":[{"protocol":"alchemix-vaults-v3","action":"deposit","args":{"primaryAddress":"0xeB83112d925268BeDe86654C13D423a987587e3E","tokenIn":"0x9B44efCa3e2a707B63Dc00CE79d646E5E5D24bA5","tokenOut":"0xeB83112d925268BeDe86654C13D423a987587e3E","amountIn":"10000000000000000000","receiver":"0x0000000000000000000000000000000000000000","tokenId":"0"}},{"protocol":"alchemix-vaults-v3","action":"borrow","args":{"primaryAddress":"0xeB83112d925268BeDe86654C13D423a987587e3E","collateral":"0xbc6da0fe9ad5f3b0d58160288917aa56653660e9","tokenOut":"0xbc6da0fe9ad5f3b0d58160288917aa56653660e9","amountOut":"7500000000000000000","tokenId":{"useOutputOfCallAt":0,"index":0}}},{"protocol":"enso","action":"route","args":{"tokenIn":["0xbc6da0fe9ad5f3b0d58160288917aa56653660e9"],"amountIn":{"useOutputOfCallAt":1},"tokenOut":["0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"],"slippage":"100"}},{"protocol":"alchemix-myts","action":"deposit","args":{"primaryAddress":"0x9B44efCa3e2a707B63Dc00CE79d646E5E5D24bA5","tokenIn":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","tokenOut":"0x9B44efCa3e2a707B63Dc00CE79d646E5E5D24bA5","amountIn":{"useOutputOfCallAt":2}}},{"protocol":"alchemix-vaults-v3","action":"deposit","args":{"primaryAddress":"0xeB83112d925268BeDe86654C13D423a987587e3E","tokenIn":"0x9B44efCa3e2a707B63Dc00CE79d646E5E5D24bA5","tokenOut":"0xeB83112d925268BeDe86654C13D423a987587e3E","amountIn":{"useOutputOfCallAt":3},"receiver":"0x0000000000000000000000000000000000000000","tokenId":{"useOutputOfCallAt":0,"index":0}}},{"protocol":"alchemix-vaults-v3","action":"borrow","args":{"primaryAddress":"0xeB83112d925268BeDe86654C13D423a987587e3E","collateral":"0xbc6da0fe9ad5f3b0d58160288917aa56653660e9","tokenOut":"0xbc6da0fe9ad5f3b0d58160288917aa56653660e9","amountOut":"7000000000000000000","receiver":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","tokenId":{"useOutputOfCallAt":0,"index":0}}}]},"alchemix_loop_1_erc721":{"summary":"Alchemix self-repaying loop + erc721:transferfrom of position NFT","value":[{"protocol":"alchemix-vaults-v3","action":"deposit","args":{"primaryAddress":"0xeB83112d925268BeDe86654C13D423a987587e3E","tokenIn":"0x9B44efCa3e2a707B63Dc00CE79d646E5E5D24bA5","tokenOut":"0xeB83112d925268BeDe86654C13D423a987587e3E","amountIn":"10000000000000000000","receiver":"0x0000000000000000000000000000000000000000","tokenId":"0"}},{"protocol":"alchemix-vaults-v3","action":"borrow","args":{"primaryAddress":"0xeB83112d925268BeDe86654C13D423a987587e3E","collateral":"0xbc6da0fe9ad5f3b0d58160288917aa56653660e9","tokenOut":"0xbc6da0fe9ad5f3b0d58160288917aa56653660e9","amountOut":"7500000000000000000","tokenId":{"useOutputOfCallAt":0,"index":0}}},{"protocol":"enso","action":"route","args":{"tokenIn":["0xbc6da0fe9ad5f3b0d58160288917aa56653660e9"],"amountIn":{"useOutputOfCallAt":1},"tokenOut":["0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"],"slippage":"100"}},{"protocol":"alchemix-myts","action":"deposit","args":{"primaryAddress":"0x9B44efCa3e2a707B63Dc00CE79d646E5E5D24bA5","tokenIn":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","tokenOut":"0x9B44efCa3e2a707B63Dc00CE79d646E5E5D24bA5","amountIn":{"useOutputOfCallAt":2}}},{"protocol":"alchemix-vaults-v3","action":"deposit","args":{"primaryAddress":"0xeB83112d925268BeDe86654C13D423a987587e3E","tokenIn":"0x9B44efCa3e2a707B63Dc00CE79d646E5E5D24bA5","tokenOut":"0xeB83112d925268BeDe86654C13D423a987587e3E","amountIn":{"useOutputOfCallAt":3},"receiver":"0x0000000000000000000000000000000000000000","tokenId":{"useOutputOfCallAt":0,"index":0}}},{"protocol":"erc721","action":"transferfrom","args":{"token":"0xeB83112d925268BeDe86654C13D423a987587e3E","receiver":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","tokenId":{"useOutputOfCallAt":0,"index":0}}}]},"alchemix_loop_1_erc721_transfer":{"summary":"Alchemix self-repaying loop + erc721:transfer of position NFT","value":[{"protocol":"alchemix-vaults-v3","action":"deposit","args":{"primaryAddress":"0xeB83112d925268BeDe86654C13D423a987587e3E","tokenIn":"0x9B44efCa3e2a707B63Dc00CE79d646E5E5D24bA5","tokenOut":"0xeB83112d925268BeDe86654C13D423a987587e3E","amountIn":"10000000000000000000","receiver":"0x0000000000000000000000000000000000000000","tokenId":"0"}},{"protocol":"alchemix-vaults-v3","action":"borrow","args":{"primaryAddress":"0xeB83112d925268BeDe86654C13D423a987587e3E","collateral":"0xbc6da0fe9ad5f3b0d58160288917aa56653660e9","tokenOut":"0xbc6da0fe9ad5f3b0d58160288917aa56653660e9","amountOut":"7500000000000000000","tokenId":{"useOutputOfCallAt":0,"index":0}}},{"protocol":"enso","action":"route","args":{"tokenIn":["0xbc6da0fe9ad5f3b0d58160288917aa56653660e9"],"amountIn":{"useOutputOfCallAt":1},"tokenOut":["0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"],"slippage":"100"}},{"protocol":"alchemix-myts","action":"deposit","args":{"primaryAddress":"0x9B44efCa3e2a707B63Dc00CE79d646E5E5D24bA5","tokenIn":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","tokenOut":"0x9B44efCa3e2a707B63Dc00CE79d646E5E5D24bA5","amountIn":{"useOutputOfCallAt":2}}},{"protocol":"alchemix-vaults-v3","action":"deposit","args":{"primaryAddress":"0xeB83112d925268BeDe86654C13D423a987587e3E","tokenIn":"0x9B44efCa3e2a707B63Dc00CE79d646E5E5D24bA5","tokenOut":"0xeB83112d925268BeDe86654C13D423a987587e3E","amountIn":{"useOutputOfCallAt":3},"receiver":"0x0000000000000000000000000000000000000000","tokenId":{"useOutputOfCallAt":0,"index":0}}},{"protocol":"erc721","action":"transfer","args":{"token":"0xeB83112d925268BeDe86654C13D423a987587e3E","receiver":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","tokenId":{"useOutputOfCallAt":0,"index":0}}}]}}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BundleShortcutTransaction"},"examples":{"success":{"summary":"Successful bundle build","value":{"metadata":{"bridgeRefundAssets":[],"bridgeFees":[]},"createdAt":20483231,"tx":{"to":"0x0000000000000000000000000000000000000000","from":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","data":"0x","value":"0"},"gas":"450000","amountsOut":{"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48":"999000"},"route":[],"bundle":[{"protocol":"uniswap-v2","action":"swap","args":{"tokenIn":"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2","tokenOut":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","amountIn":"1000000000000000000","receiver":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045"}},{"protocol":"enso","action":"slippage","args":{"bps":"100","amountOut":{"useOutputOfCallAt":0}}}]}}}}},"description":""}},"tags":["shortcuts"]}},"/api/v1/shortcuts/quote":{"get":{"operationId":"QuoteController_quote","summary":"Quote from a token to another","parameters":[{"name":"chainId","required":true,"in":"query","description":"Chain ID of the network to execute the transaction on","schema":{"default":1,"type":"number"}},{"name":"fromAddress","required":false,"in":"query","description":"Ethereum address of the wallet to send the transaction from","schema":{"example":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","type":"string"}},{"name":"routingStrategy","required":false,"in":"query","description":"Routing strategy to use","schema":{"nullable":true,"enum":["ensowallet-v2","router","delegate","router-legacy","delegate-legacy"],"type":"string"}},{"name":"tokenIn","required":true,"in":"query","description":"Ethereum address of the token to swap from. For ETH, use 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","schema":{"example":["0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"],"type":"array","items":{"type":"string"}}},{"name":"tokenOut","required":true,"in":"query","description":"Ethereum address of the token to swap from. For ETH, use 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","schema":{"example":["0x6b175474e89094c44da98b954eedeac495271d0f"],"type":"array","items":{"type":"string"}}},{"name":"amountIn","required":true,"in":"query","description":"Amount of tokenIn to swap in wei","schema":{"example":["1000000000000000000"],"type":"array","items":{"type":"string"}}},{"name":"ignoreAggregators","required":false,"in":"query","description":"A list of swap aggregators to be ignored from consideration","schema":{"nullable":true,"type":"array","items":{"type":"string","enum":["0x","1inch","openocean","kyberswap","native","paraswap","bebop","barter","sushiswap-router","ooga-booga","renegade","uniswap","rooster","wowmax","grapher","hyperbloom","hyperswap","hyperflow","fly","eisen","nordstern","everlong","bitget","akka"]}}},{"name":"ignoreStandards","required":false,"in":"query","description":"A list of standards to be ignored from consideration","schema":{"nullable":true,"type":"array","items":{"type":"string"}}},{"name":"effort","required":false,"in":"query","description":"Latency/quality trade-off for aggregator querying. light returns fastest (short aggregator wait with early return once two usable quotes arrive), medium waits the full short window, high is the default balanced behavior, and max queries all aggregators in parallel with an extended wait for best execution (higher CU cost)","schema":{"enum":["light","medium","high","max"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteEndpointResponse"}}}},"400":{"description":""}},"tags":["shortcuts"]}},"/api/v1/nontokenized":{"get":{"operationId":"NonTokenizedController_nontokenizedPositions","summary":"Returns nontokenized positions and their details","parameters":[{"name":"project","required":false,"in":"query","description":"The overarching project or platform associated with the DeFi token","schema":{"example":"orderly","type":"string"}},{"name":"protocolSlug","required":false,"in":"query","description":"The specific standard integration or version of the DeFi project","schema":{"example":"orderly-one-kodiak","type":"string"}},{"name":"chainId","required":false,"in":"query","description":"Chain ID of the network of the nontokenized position","schema":{"example":80094,"type":"number"}},{"name":"positionId","required":false,"in":"query","description":"Position ID of the nontokenized position.","schema":{"type":"array","items":{"type":"string"}}},{"name":"address","required":false,"in":"query","description":"Address representing nontokenized position.","schema":{"type":"array","items":{"type":"string"}}},{"name":"primaryAddress","required":false,"in":"query","description":"Ethereum addresses for contract interaction of nontokenized position","schema":{"type":"array","items":{"type":"string"}}},{"name":"underlyingTokens","required":false,"in":"query","description":"Underlying tokens of nontokenized position","schema":{"example":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"],"type":"array","items":{"type":"string"}}},{"name":"underlyingTokensExact","required":false,"in":"query","description":"Exact composition of underlying tokens of nontokenized position","schema":{"example":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"],"type":"array","items":{"type":"string"}}},{"name":"page","required":false,"in":"query","description":"Pagination page number","schema":{"type":"number"}},{"name":"pageSize","required":false,"in":"query","description":"Number of items per page (max 1000)","schema":{"default":1000,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Cursor for pagination","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResult"},{"properties":{"data":{"type":"array","description":"Returned data for current page","items":{"$ref":"#/components/schemas/NonTokenizedModel"}}}}]}}}}},"tags":["metadata"]}},"/api/v1/projects":{"get":{"operationId":"ProjectsController_standards","summary":"Returns the overarching projects or platforms associated with the available projects","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Project"}}}}}},"tags":["projects"]}},"/api/v1/projects/{project}/protocols":{"get":{"operationId":"ProjectsController_getStandardsByProject","summary":"Returns protocols available by project","parameters":[{"name":"project","required":true,"in":"path","description":"The overarching project or platform","schema":{"example":"aave","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProtocolModel"}}}}}},"tags":["projects"]}},"/api/v1/protocols":{"get":{"operationId":"ProtocolsController_findAll","summary":"Returns projects and relevant protocols available to use","parameters":[{"name":"chainId","required":false,"in":"query","description":"Chain ID of the network to search for","schema":{"example":"1"}},{"name":"slug","required":false,"in":"query","description":"slug of the project to search for","schema":{"example":"uniswap-v2"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProtocolModel"}}}}}},"tags":["metadata"]}},"/api/v1/ccip/router":{"get":{"operationId":"CcipController_getRouter","summary":"Get CCIP router address for a chain","description":"Returns the CCIP router contract address for the specified chain.","parameters":[{"name":"chainId","required":true,"in":"query","description":"Chain ID to get the CCIP router address for","schema":{"example":42161,"type":"number"}}],"responses":{"200":{"description":"CCIP router address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CcipRouterResponse"}}}},"400":{"description":"Chain not supported by CCIP"}},"tags":["ccip"]}},"/api/v1/ccip/bridge/check":{"get":{"operationId":"CcipController_checkBridgeTransaction","summary":"Check CCIP bridge transaction status","description":"Returns comprehensive information about a cross-chain CCIP bridge transaction, including CCIP message parameters, on-chain events, and transaction data from Enso.","parameters":[{"name":"chainId","required":true,"in":"query","description":"Chain ID of the source transaction","schema":{"example":56,"type":"number"}},{"name":"txHash","required":true,"in":"query","description":"Transaction hash of the CCIP bridge transaction on source chain","schema":{"example":"0x80f1faf0652a5618ea1de0fc5142418e380676b3c6c74d482cfac1237638d6d4","type":"string"}}],"responses":{"200":{"description":"Bridge transaction status and details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CcipBridgeTransactionResponse"}}}},"429":{"description":"Rate limit exceeded"}},"tags":["ccip"]}},"/api/v1/relay/bridge/check":{"get":{"operationId":"RelayController_checkBridgeTransaction","summary":"Check Relay bridge transaction status","description":"Returns comprehensive information about a cross-chain Relay bridge transaction, including Relay message parameters, on-chain events, and transaction data from Enso.","parameters":[{"name":"chainId","required":true,"in":"query","description":"Chain ID of the source transaction","schema":{"example":1,"type":"number"}},{"name":"txHash","required":true,"in":"query","description":"Transaction hash of the Relay bridge transaction on source chain","schema":{"example":"0x94e5ea92d395fc8969b3253395ce58d51b27781c7305376d494f0804b109a8b5","type":"string"}}],"responses":{"200":{"description":"Bridge transaction status and details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayBridgeTransactionResponse"}}}},"429":{"description":"Rate limit exceeded"}},"tags":["relay"]}},"/api/v1/arbitrum-native/bridge/check":{"get":{"operationId":"ArbitrumNativeController_checkBridgeTransaction","summary":"Check Arbitrum native bridge deposit status","description":"Returns the retryable ticket and delivery status of an Arbitrum native bridge deposit, looked up from the parent chain deposit transaction.","parameters":[{"name":"chainId","required":true,"in":"query","description":"Chain ID of the parent chain deposit transaction","schema":{"example":1,"type":"number"}},{"name":"txHash","required":true,"in":"query","description":"Parent chain deposit transaction hash","schema":{"example":"0x2825fed33798922dbb5a3f6bf513e0def70dcde0b79b7b5e0c1b356df335f404","type":"string"}}],"responses":{"200":{"description":"Bridge transaction status and details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArbitrumNativeBridgeTransactionResponse"}}}},"429":{"description":"Rate limit exceeded"}},"tags":["arbitrum-native"]}},"/api/v1/mayan/bridge/check":{"get":{"operationId":"MayanController_checkBridgeTransaction","summary":"Check Mayan bridge order status","description":"Returns the delivery or refund status of a Mayan Swift order, looked up from the source transaction.","parameters":[{"name":"chainId","required":true,"in":"query","description":"Chain ID of the source transaction","schema":{"example":8453,"type":"number"}},{"name":"txHash","required":true,"in":"query","description":"Source transaction hash that created the Swift order","schema":{"example":"0x0bf1b6817c4c085c40cafe329fa451a0d0875258f3715b0ee8e4b5a7f005fbe7","type":"string"}}],"responses":{"200":{"description":"Bridge transaction status and details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MayanBridgeTransactionResponse"}}}},"429":{"description":"Rate limit exceeded"}},"tags":["mayan"]}},"/api/v1/cctp/bridge/check":{"get":{"operationId":"CctpController_checkBridgeTransaction","summary":"Check CCTP bridge transaction status","description":"Returns information about a cross-chain CCTP bridge transaction, including attestation status, amount, fee, and destination transaction. Rate limited to 1 request per 10 seconds.","parameters":[{"name":"chainId","required":true,"in":"query","description":"Chain ID of the source transaction","schema":{"example":143,"type":"number"}},{"name":"txHash","required":true,"in":"query","description":"Transaction hash of the CCTP bridge transaction on source chain","schema":{"example":"0x4ac72089eef92b827702281bb2668b416ee6d3e9d953600dc363842e473a157c","type":"string"}}],"responses":{"200":{"description":"Bridge transaction status and details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CctpBridgeTransactionResponse"}}}},"429":{"description":"Rate limit exceeded (max 1 request per 10 seconds)"}},"tags":["cctp"]}},"/api/v1/cctp/bridge/tokenmessengerv2":{"get":{"operationId":"CctpController_getTokenMessenger","summary":"Get TokenMessengerV2 address for a chain","description":"Returns the CCTP TokenMessengerV2 contract address for the specified chain.","parameters":[{"name":"chainId","required":true,"in":"query","description":"Chain ID","schema":{"example":1,"type":"number"}}],"responses":{"200":{"description":"TokenMessengerV2 address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CctpTokenMessengerResponse"}}}},"400":{"description":"Chain not supported by CCTP"}},"tags":["cctp"]}},"/api/v1/cctp/bridge/claim":{"get":{"operationId":"CctpController_getClaimTx","summary":"Generate claim transaction for a CCTP bridge transfer","description":"Returns a ready-to-submit receiveMessage transaction for the destination chain if the attestation is complete and the transfer has not been claimed yet. Rate limited to 1 request per 10 seconds.","parameters":[{"name":"chainId","required":true,"in":"query","description":"Chain ID of the source transaction","schema":{"example":143,"type":"number"}},{"name":"txHash","required":true,"in":"query","description":"Transaction hash of the CCTP bridge transaction on source chain","schema":{"example":"0x4ac72089eef92b827702281bb2668b416ee6d3e9d953600dc363842e473a157c","type":"string"}}],"responses":{"200":{"description":"Claim transaction or reason why not claimable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CctpClaimResponse"}}}},"429":{"description":"Rate limit exceeded (max 1 request per 10 seconds)"}},"tags":["cctp"]}}},"info":{"title":"","description":"#### Enso API\n- Find detailed documentation on [docs.enso.finance](https://docs.enso.finance).\n- To use the API, **you must include your API Key in the Authorization header** (Bearer format).\n- For testing, Swagger pre-authorizes you using the key: `1e02632d-6feb-4a75-a157-documentation` (1rps).\n- Get your own API Key at [enso.finance/developers](https://developers.enso.build/).\n- Responses carry an `x-enso-credits-request` header with the API credits (CU) that request used, plus `x-enso-credits-*` headers with your monthly usage.","version":"1.0","contact":{}},"tags":[{"name":"shortcuts","description":""}],"servers":[{"url":"https://api.enso.finance"}],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"apiKey","type":"http"}},"schemas":{"ConnectedNetwork":{"type":"object","properties":{"id":{"type":"number","example":1},"name":{"type":"string","example":"Ethereum"},"isConnected":{"type":"boolean","example":true}},"required":["id","name","isConnected"]},"Price":{"type":"object","properties":{"decimals":{"type":"number","example":8},"price":{"type":"number","example":27052},"address":{"type":"string","example":"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599"},"symbol":{"type":"string","example":"WBTC"},"name":{"type":"string","example":"Wrapped Bitcoin"},"timestamp":{"type":"number","example":1695197412},"chainId":{"type":"number","example":1}},"required":["decimals","price","address","chainId"]},"BridgeRefundAsset":{"type":"object","properties":{"protocol":{"type":"string","enum":["cctp","stargate","ccip","relay","layerzero-teller","arbitrum-native","mayan"]},"chainId":{"type":"number"},"token":{"type":"string","description":"Address of the bridge principal token that may be refunded","example":"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"},"recipient":{"type":"string","description":"Address that would receive the bridge principal refund","example":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045"},"symbol":{"type":"string","description":"Token symbol when metadata is available","example":"USDC"}},"required":["protocol","chainId","token","recipient"]},"BridgeFee":{"type":"object","properties":{"protocol":{"type":"string","description":"Bridge protocol associated with the fee"},"component":{"type":"string","enum":["bridge","intentExecution"]},"chainId":{"type":"number","description":"Chain on which the fee is paid"},"destinationChainId":{"type":"number","description":"Destination chain of the bridge action"},"token":{"type":"string","description":"Token used to pay the bridge fee"},"type":{"type":"string","enum":["maximum","quoted"],"description":"Whether amount is a maximum reserved for execution or a quote-time fee breakdown"},"deductedFromAmountOut":{"type":"boolean","description":"Whether the fee has already reduced the candidate amountOut and must not be subtracted again when scoring."},"amount":{"type":"string","description":"Bridge fee in the token base unit."},"amountUsd":{"type":"string","description":"Bridge fee in USD when includeTransactionCost=true and pricing is available","nullable":true}},"required":["protocol","component","chainId","destinationChainId","token","type","deductedFromAmountOut","amount"]},"ShortcutResponseMetadata":{"type":"object","properties":{"bridgeRefundAssets":{"description":"Protocol-specific refund destinations for bridge principal in the returned transaction. An entry does not guarantee that every bridge failure is refundable.","type":"array","items":{"$ref":"#/components/schemas/BridgeRefundAsset"}},"bridgeFees":{"description":"Bridge protocol and intent execution fees","type":"array","items":{"$ref":"#/components/schemas/BridgeFee"}},"bridgeFeeUsd":{"type":"string","description":"USD sum of the reported bridge protocol and intent execution fee amounts when includeTransactionCost=true. May include maximum fee reserves. Null when any non-zero fee cannot be priced.","nullable":true}},"required":["bridgeRefundAssets"]},"AsyncRedeemClaimId":{"type":"object","properties":{"event":{"type":"string","description":"Human-readable ABI fragment of the event that carries the claim id. `claim.contract` emits it in the transaction that files the request on `chainId`. Cross-chain, that is the destination transaction, not the one the user signs"},"arg":{"type":"string","description":"Event argument holding the claim id"}},"required":["event","arg"]},"AsyncRedeemClaim":{"type":"object","properties":{"type":{"type":"string","enum":["erc721","erc1155","request","erc7540","account"],"description":"What the beneficiary holds after the transaction: an ERC-721 or ERC-1155 receipt, a request id recorded for the beneficiary, an ERC-7540 request under the beneficiary as controller, or per-account state"},"contract":{"type":"string","description":"Contract holding the claim"},"transferable":{"type":"boolean","description":"Whether the claim can be transferred"},"idFrom":{"description":"Where to read the claim id from once the transaction is mined. Absent when the claim has no id","allOf":[{"$ref":"#/components/schemas/AsyncRedeemClaimId"}]}},"required":["type","contract","transferable"]},"AsyncRedeemCall":{"type":"object","properties":{"contract":{"type":"string","description":"Contract to call"},"signature":{"type":"string","description":"Human-readable ABI fragment, e.g. `function claimWithdrawal(uint256 requestId)`"}},"required":["contract","signature"]},"AsyncRedeemSettlement":{"type":"object","properties":{"type":{"type":"string","enum":["push","claim"],"description":"`push`: the protocol sends tokenOut to the beneficiary (or current receipt holder) without further action. `claim`: a transaction must be sent to `call` once the redeem is claimable"},"by":{"type":"string","enum":["holder","controller","anyone"],"description":"Who may send the claim transaction. Present for `claim`"},"call":{"description":"Claim call. Present for `claim`","allOf":[{"$ref":"#/components/schemas/AsyncRedeemCall"}]}},"required":["type"]},"AsyncRedeemTiming":{"type":"object","properties":{"kind":{"type":"string","enum":["delay","queue","epoch","operator"],"description":"What the wait depends on: a fixed delay, a queue, an epoch, or an operator"},"minSeconds":{"type":"number"},"estimatedSeconds":{"type":"number"},"claimWindowSeconds":{"type":"number","description":"Seconds the claim stays claimable before it expires"}},"required":["kind"]},"AsyncRedeemCancel":{"type":"object","properties":{"contract":{"type":"string","description":"Contract to call"},"signature":{"type":"string","description":"Human-readable ABI fragment, e.g. `function claimWithdrawal(uint256 requestId)`"},"by":{"type":"string","enum":["holder","controller","beneficiary"],"description":"Who may cancel"}},"required":["contract","signature","by"]},"AsyncRedeemRefundSettlement":{"type":"object","properties":{"type":{"type":"string","enum":["push","claim","manual"],"description":"`push`: tokenIn is sent back to `beneficiary`, the account set at request, even if the claim was transferred. `claim`: a transaction must be sent to `call` to get tokenIn back. `manual`: nothing returns tokenIn on-chain, the protocol settles it off-chain"},"by":{"type":"string","enum":["holder","controller","anyone"],"description":"Who may send the refund claim. Present for `claim`"},"call":{"description":"Refund claim call. Present for `claim`","allOf":[{"$ref":"#/components/schemas/AsyncRedeemCall"}]}},"required":["type"]},"AsyncRedeemRefund":{"type":"object","properties":{"by":{"type":"array","description":"Who can unwind the request: the user through `cancel`, a protocol `operator`, or the protocol itself (`automatic`), for example when the payout fails","items":{"type":"string","enum":["holder","controller","beneficiary","operator","automatic"]}},"settlement":{"$ref":"#/components/schemas/AsyncRedeemRefundSettlement"}},"required":["by","settlement"]},"AsyncRedeem":{"type":"object","properties":{"chainId":{"type":"number","description":"Chain the redeem request is filed on, where `claim`, `status` and `cancel` live. Cross-chain, this is the destination chain"},"tokenIn":{"type":"string","description":"Token the redeem request was filed for"},"amountIn":{"type":"string","description":"Amount of tokenIn in the request, after fees. When other steps come before the redeem, this is their estimated output"},"tokenOut":{"type":"string","description":"Token paid out when the redeem settles"},"estimatedAmountOut":{"type":"string","description":"Expected tokenOut payout at current rates. See `pricing` for how binding it is"},"estimatedMinAmountOut":{"type":"string","description":"Expected tokenOut payout at current rates for the smallest amountIn the transaction allows after slippage. Equal to estimatedAmountOut when nothing before the request can slip. Not enforced on-chain, see `pricing`"},"priceImpact":{"type":"number","description":"Price impact in basis points between the input and estimatedAmountOut, null if USD price not found","nullable":true},"pricing":{"type":"string","enum":["fixed","capped","atSettlement"],"description":"`fixed`: the payout is locked at request. `capped`: the lower of the request and settlement rates. `atSettlement`: determined when the redeem settles"},"beneficiary":{"type":"string","description":"Account entitled to the payout"},"claim":{"$ref":"#/components/schemas/AsyncRedeemClaim"},"settlement":{"$ref":"#/components/schemas/AsyncRedeemSettlement"},"timing":{"$ref":"#/components/schemas/AsyncRedeemTiming"},"cancel":{"description":"Absent when the request cannot be cancelled by the user","allOf":[{"$ref":"#/components/schemas/AsyncRedeemCancel"}]},"refund":{"description":"How tokenIn can come back instead of tokenOut. Absent when the request can never be unwound","allOf":[{"$ref":"#/components/schemas/AsyncRedeemRefund"}]},"status":{"description":"View call returning the status of the claim","allOf":[{"$ref":"#/components/schemas/AsyncRedeemCall"}]}},"required":["chainId","tokenIn","amountIn","tokenOut","estimatedAmountOut","estimatedMinAmountOut","pricing","beneficiary","claim","settlement"]},"IntentResponse":{"type":"object","properties":{"address":{"type":"string"},"data":{"type":"object"}},"required":["address","data"]},"Transaction":{"type":"object","properties":{"data":{"type":"string"},"to":{"type":"string"},"from":{"type":"string"},"value":{"type":"string"}},"required":["data","to","from","value"]},"Hop":{"type":"object","properties":{"tokenIn":{"type":"array","items":{"type":"string"}},"tokenOut":{"type":"array","items":{"type":"string"}},"protocol":{"type":"string"},"action":{"type":"string","enum":["approve","borrow","borrowwithpositionid","deposit","singledeposit","singledepositwithpositionid","multideposit","multidepositwithpositionid","tokenizedsingledeposit","tokenizedmultideposit","multioutsingledeposit","depositclmm","depositwithestimate","encodedswap","flashloan","singletokenflashloan","multitokenflashloan","harvest","nftborrow","nftdeposit","nftmultideposit","nftmultiredeem","nftredeem","nftrepay","permittransferfrom","redeem","singleredeem","singleredeemwithpositionid","multiredeem","tokenizedsingleredeem","tokenizedmultiredeem","redeemclmm","redeemwithestimate","repay","repaywithpositionid","requestredeem","swap","transfer","transferfrom","withdraw","singlewithdraw","singlewithdrawwithpositionid","multiwithdraw","bridge","route","call","split","merge","ondosplit","ondomerge","balance","minamountout","slippage","fee","ensofee","paymasterfee","depositposition","add","sub","mul","div","min","max","isequal","islessthan","isequalorlessthan","isgreaterthan","isequalorgreaterthan","not","check","toggle"]},"primaryAddress":{"type":"string"},"internalRoutes":{"type":"array","items":{"type":"string"}},"args":{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"sources":{"type":"array","items":{"type":"string"}},"poolAddresses":{"type":"array","items":{"type":"string"}},"estimatedAmountOut":{"description":"Only available for split actions returned by the pathfinder routing engine. Display estimates use the planned split input, are ordered to match tokenOut, and are not execution guarantees","type":"array","items":{"type":"string"}},"chainId":{"type":"number"},"sourceChainId":{"type":"number"},"destinationChainId":{"type":"number"},"positionOut":{"description":"Non-tokenized position ID for deposit actions","type":"array","items":{"type":"string"}},"via":{"type":"string","description":"Off-chain settler for this hop. Set when the hop is descriptive metadata rather than a weiroll call in `tx.data` — execution happens asynchronously via the named external system (e.g. Circle's CctpForwarder credits HyperCore on CCTP message receipt). Absent on hops that are actual on-chain weiroll calls.","enum":["cctp-forwarder"],"example":"cctp-forwarder"}},"required":["tokenIn","tokenOut","protocol","action"]},"UserOperation":{"type":"object","properties":{"callData":{"type":"string"},"callGasLimit":{"type":"string"},"factory":{"type":"string"},"factoryData":{"type":"string"},"maxFeePerGas":{"type":"string"},"maxPriorityFeePerGas":{"type":"string"},"nonce":{"type":"string"},"paymaster":{"type":"string"},"paymasterData":{"type":"string"},"paymasterPostOpGasLimit":{"type":"string"},"paymasterVerificationGasLimit":{"type":"string"},"preVerificationGas":{"type":"string"},"sender":{"type":"string"},"signature":{"type":"string"},"verificationGasLimit":{"type":"string"}},"required":["callData","callGasLimit","maxFeePerGas","maxPriorityFeePerGas","nonce","preVerificationGas","sender","signature","verificationGasLimit"]},"PreTransaction":{"type":"object","properties":{"type":{"type":"string","enum":["tokenApproval","requiredApproval"]},"tx":{"description":"Transaction to execute before the main shortcut transaction","allOf":[{"$ref":"#/components/schemas/Transaction"}]},"token":{"type":"string","description":"Token whose allowance is being set"},"spender":{"type":"string","description":"Account receiving the token allowance"},"amount":{"type":"string","description":"Total allowance required by the shortcut"},"description":{"type":"string","description":"Human-readable explanation for a required approval"}},"required":["type","tx"]},"BridgeLatencyEstimate":{"type":"object","properties":{"fromChainId":{"type":"number"},"toChainId":{"type":"number"},"token":{"type":"string","description":"Token bridged to the destination chain"},"estimatedSeconds":{"type":"number","description":"Estimated bridge latency in seconds"},"sendConfirmations":{"type":"number","description":"Send confirmations used for the estimation"},"receiveConfirmations":{"type":"number","description":"Receive confirmations"},"sendBlockTimeSeconds":{"type":"number","description":"Average block time assumed for the source chain (seconds)"},"receiveBlockTimeSeconds":{"type":"number","description":"Average block time assumed for the destination chain (seconds)"},"bridge":{"type":"string","description":"Bridge implementation or provider that produced the estimate"},"source":{"type":"string","description":"Source of the data (protocol, measured, model, defaults, override, fallback)","enum":["protocol","measured","model","defaults","override","fallback"]},"note":{"type":"string","description":"Optional note describing overrides or fallbacks applied"}},"required":["fromChainId","toChainId","token","estimatedSeconds"]},"RouteShortcutTransaction":{"type":"object","properties":{"gas":{"type":"string"},"amountOut":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Null for async routes, see `async.estimatedAmountOut`","nullable":true},"blockNumber":{"type":"number","description":"Block number the quote was simulated against"},"priceImpact":{"type":"number","description":"Price impact in basis points, null if USD price not found","nullable":true},"feeAmount":{"description":"An array of the fee amount collected for each tokenIn","type":"array","items":{"type":"string"}},"ensoFeeAmount":{"description":"An array of the enso fee amount collected for each tokenIn, when applicable","type":"array","items":{"type":"string"}},"metadata":{"$ref":"#/components/schemas/ShortcutResponseMetadata"},"async":{"description":"Present when the route is an async redeem (`allowAsync=true`). amountOut, minAmountOut and priceImpact are null because nothing is delivered in the transaction, the estimates are in `async`","allOf":[{"$ref":"#/components/schemas/AsyncRedeem"}]},"minAmountOut":{"description":"The minimum allowable amount out after slippage. Null for async routes, see `async.estimatedMinAmountOut`","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"nullable":true},"intent":{"$ref":"#/components/schemas/IntentResponse"},"createdAt":{"type":"number","description":"Block number the transaction was created on"},"tx":{"description":"The tx object to use in `ethers`","allOf":[{"$ref":"#/components/schemas/Transaction"}]},"route":{"description":"Simple description of meta actions the route takes","type":"array","items":{"$ref":"#/components/schemas/Hop"}},"detailedRoute":{"description":"Detailed description of the route","type":"array","items":{"type":"string"}},"userOp":{"description":"The ERC-4337 user operation object","allOf":[{"$ref":"#/components/schemas/UserOperation"}]},"preTransactions":{"description":"Transactions that may need to be executed before the main shortcut transaction. Token approvals should be skipped when the current allowance is already sufficient.","type":"array","items":{"$ref":"#/components/schemas/PreTransaction"}},"bridgingEstimates":{"description":"Estimated bridging durations when applicable","type":"array","items":{"$ref":"#/components/schemas/BridgeLatencyEstimate"}},"validUntil":{"type":"number","description":"Unix timestamp (seconds) after which this quote expires. Transactions submitted after this time may revert. On an intent route a late transaction still bridges, but the bridged token is refunded on the destination chain instead of being swapped."},"transactionCost":{"type":"string","description":"Point-in-time lower-bound estimate of mandatory source-chain transaction fees in the native token smallest unit. Excludes priority fees, transaction value, bridge fees, and destination execution.","nullable":true},"transactionCostUsd":{"type":"string","description":"Decimal string USD value of transactionCost. Null when the native-token price or source-chain fee estimate is unavailable.","nullable":true}},"required":["gas","amountOut","metadata","createdAt","tx","route"]},"RouteShortcutVariableInputs":{"type":"object","properties":{"chainId":{"type":"number","description":"Chain ID of the network to execute the transaction on","default":1},"fromAddress":{"type":"string","description":"Ethereum address of the wallet to send the transaction from","default":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045"},"routingStrategy":{"type":"string","description":"Routing strategy to use","nullable":true,"enum":["ensowallet-v2","router","delegate","router-legacy","delegate-legacy"]},"executionMode":{"type":"string","description":"Controls how quote is built based on execution mode","enum":["user","backend"],"default":"user"},"toEoa":{"type":"boolean","description":"Flag that indicates if gained tokenOut should be sent to EOA","nullable":true,"deprecated":true},"includeTransactionCost":{"type":"boolean","description":"Include point-in-time source-chain transaction cost estimates in native units and USD, plus USD values for reported bridge fees","default":false},"useIntentAddress":{"type":"boolean","description":"Route a cross-chain request through an intent address on the destination chain. The bridge delivers to that address, then a keeper runs the destination route and sends tokenOut to the receiver. When omitted, intents are used if both chains support them. Set to false to use a bridge callback instead. Ignored for same-chain routes."},"spender":{"type":"string","description":"Ethereum address of the spender of the tokenIn","example":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045"},"refundReceiver":{"type":"string","description":"Ethereum address of the receiver of any dust tokens produced during execution. Required for routes to Solana.","example":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045"},"amountIn":{"description":"Amount of tokenIn to swap in wei","example":["1000000000000000000"],"type":"array","items":{"type":"string"}},"minAmountOut":{"description":"Minimum amount out in wei. If specified, slippage should not be specified","default":null,"type":"array","items":{"type":"string"}},"slippage":{"type":"string","description":"Slippage in basis points (1/10000). e.g. 50 = 0.50%. If specified, minAmountOut should not be specified","example":"300","default":"50"},"ignoreAggregators":{"type":"array","description":"A list of swap aggregators to be ignored from consideration","nullable":true,"items":{"type":"string","enum":["0x","1inch","openocean","kyberswap","native","paraswap","bebop","barter","sushiswap-router","ooga-booga","renegade","uniswap","rooster","wowmax","grapher","hyperbloom","hyperswap","hyperflow","fly","eisen","nordstern","everlong","bitget","akka"]}},"ignoreStandards":{"description":"A list of standards to be ignored from consideration","nullable":true,"type":"array","items":{"type":"string"}},"ignoreBridges":{"type":"array","description":"A list of bridges to be ignored from consideration","default":[],"items":{"type":"string","enum":["cctp","stargate","ccip","relay","layerzero-teller","arbitrum-native","mayan"]}},"crosschainRouteMode":{"type":"string","description":"Controls cross-chain route complexity. direct uses only a bridge, source allows routing before the bridge, destination allows routing after the bridge, sourceOrDestination allows routing on either chain but not both, and full allows routing on both chains","enum":["direct","source","destination","sourceOrDestination","full"],"default":"full"},"effort":{"type":"string","description":"Latency/quality trade-off for pathfinding and aggregator querying. light returns fastest over a reduced search space (short aggregator wait with early return once two usable quotes arrive, fewer candidate paths, no destination-side bridge routing), medium waits the full short window over the full search space, high is the default balanced behavior, and max queries all aggregators in parallel with an extended wait for best execution (higher CU cost)","enum":["light","medium","high","max"]},"referralCode":{"type":"string","description":"Referral code that will be included in an on-chain event.","example":"0123456789ABCDEF","maxLength":16},"tokenIn":{"description":"Ethereum address of the token to swap from. For ETH, use 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","example":["0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"],"type":"array","items":{"type":"string"}},"tokenOut":{"description":"Destination token addresses. Solana mints are case-sensitive; native SOL uses 11111111111111111111111111111111.","type":"array","items":{"type":"string"}},"receiver":{"type":"string","description":"Destination recipient. Required for cross-chain routes; Solana uses a case-sensitive Base58 address."},"destinationChainId":{"type":"number","description":"Chain ID of the network to bridge to and receive tokenOut"},"allowAsync":{"type":"boolean","description":"Allow async redeems, where tokenOut is paid after the transaction. An async route returns amountOut, minAmountOut and priceImpact as null and describes the payout in `async`. Cannot be combined with minAmountOut or useIntentAddress, intents do not support async redeems.","default":false}},"required":["chainId","fromAddress","amountIn","tokenIn","tokenOut"]},"NontokenizedRouteShortcutTransaction":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/ShortcutResponseMetadata"},"createdAt":{"type":"number","description":"Block number the transaction was created on"},"gas":{"type":"string"},"amountDeposited":{"description":"Amount deposited into the position. Balanced multi-token deposits return an array ordered to match the deposit tokens in the route.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"amountOut":{"type":"string","description":"Amount out in the destination protocol precision. Only available for hypercore-spot deposits, where it represents the amount in 8-decimal HyperCore precision."},"priceImpact":{"type":"number","description":"Price impact in basis points (1/10000) between the initial route value and the positionAmount. For example, 50 = 0.50%. Returns null if price impact calculation is not available.","nullable":true},"tx":{"description":"The tx object to use in `ethers`","allOf":[{"$ref":"#/components/schemas/Transaction"}]},"route":{"description":"The route the shortcut will use","type":"array","items":{"$ref":"#/components/schemas/Hop"}},"feeAmount":{"type":"array","items":{"type":"string"}},"ensoFeeAmount":{"type":"array","items":{"type":"string"}},"userOp":{"description":"The ERC-4337 user operation object","allOf":[{"$ref":"#/components/schemas/UserOperation"}]},"bridgingEstimates":{"description":"Estimated bridge durations when the flow contains bridges","type":"array","items":{"$ref":"#/components/schemas/BridgeLatencyEstimate"}},"validUntil":{"type":"number","description":"Unix timestamp (seconds) after which this quote expires. Transactions submitted after this time may revert."}},"required":["metadata","createdAt","gas","amountDeposited","tx","route"]},"Wallet":{"type":"object","properties":{"address":{"type":"string"},"isDeployed":{"type":"boolean"}},"required":["address","isDeployed"]},"WalletTransaction":{"type":"object","properties":{"data":{"type":"string","example":"0x"},"to":{"type":"string","example":"0x1111111111111111111111111111111111111111"},"from":{"type":"string","example":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045"},"value":{"type":"string","example":"0"}},"required":["data","to","from"]},"WalletApproveTransaction":{"type":"object","properties":{"tx":{"description":"The transaction object to use in `ethers`","allOf":[{"$ref":"#/components/schemas/WalletTransaction"}]},"gas":{"type":"string","description":"The gas estimate for the transaction"},"token":{"type":"string","description":"The token address to approve"},"amount":{"type":"string","description":"The amount of tokens to approve"},"spender":{"type":"string","description":"The spender address to approve"}},"required":["tx","gas","token","amount","spender"]},"WalletBalance":{"type":"object","properties":{"token":{"type":"string","description":"The address of the token"},"amount":{"type":"string","description":"The unformatted balance of the token","example":"0x0000000"},"chainId":{"type":"integer","description":"Chain ID of the network"},"decimals":{"type":"number","description":"The unformatted balance of the token","example":18},"price":{"type":"string","description":"Price of the token in usd","example":"0.0","nullable":true},"name":{"type":"string","description":"Name of the token","nullable":true},"symbol":{"type":"string","description":"Symbol of the token","nullable":true},"logoUri":{"type":"string","description":"Logo of the token","nullable":true}},"required":["token","amount","chainId","decimals","price","name","symbol","logoUri"]},"PaginationMeta":{"type":"object","properties":{"total":{"type":"number","description":"Total amount of pages"},"lastPage":{"type":"number","description":"Last page number","nullable":true},"currentPage":{"type":"number","description":"Current page number","nullable":true},"perPage":{"type":"number","description":"Amount of elements per page"},"prev":{"type":"number","description":"Previous page","nullable":true},"next":{"type":"number","description":"Next page","nullable":true},"cursor":{"type":"number","description":"Cursor for pagination","nullable":true}},"required":["total","perPage"]},"PaginatedResult":{"type":"object","properties":{"meta":{"description":"Metadata for pagination","allOf":[{"$ref":"#/components/schemas/PaginationMeta"}]}},"required":["meta"]},"TokenModel":{"type":"object","properties":{"address":{"type":"string","description":"Token address on its chain. Solana addresses are case-sensitive."},"chainId":{"type":"number","description":"Chain ID of the network of the token"},"type":{"type":"string","description":"Type of token"},"decimals":{"type":"number","description":"Token decimals"},"symbol":{"type":"string","description":"Token name","nullable":true},"name":{"type":"string","description":"Token symbol","nullable":true},"logosUri":{"description":"A list of logos for the token","nullable":true,"type":"array","items":{"type":"string"}}},"required":["address","chainId","type","decimals"]},"PositionModel":{"type":"object","properties":{"address":{"type":"string","description":"Token address on its chain. Solana addresses are case-sensitive."},"chainId":{"type":"number","description":"Chain ID of the network of the token"},"type":{"type":"string","description":"Type of token"},"decimals":{"type":"number","description":"Token decimals"},"symbol":{"type":"string","description":"Token name","nullable":true},"name":{"type":"string","description":"Token symbol","nullable":true},"logosUri":{"description":"A list of logos for the token","nullable":true,"type":"array","items":{"type":"string"}},"underlyingTokens":{"description":"Underlying tokens of defi token","nullable":true,"type":"array","items":{"$ref":"#/components/schemas/TokenModel"}},"project":{"type":"string","description":"The overarching project or platform associated with the DeFi token","example":"aave","nullable":true},"protocol":{"type":"string","description":"The specific standard integration or version of the DeFi project","nullable":true},"depositType":{"type":"number","description":"Type of liquidity for deposits"},"redeemType":{"type":"number","description":"Type of liquidity for redeems"},"apy":{"type":"number","description":"The defi position APY","nullable":true,"example":3.8},"apyBase":{"type":"number","description":"The defi position base APY","nullable":true,"example":2.6},"apyReward":{"type":"number","description":"The defi position reward APY","nullable":true,"example":1.2},"borrowApyBase":{"type":"number","description":"The defi position base borrow APY","nullable":true,"example":2.6},"borrowApyReward":{"type":"number","description":"The defi position reward borrow APY","nullable":true,"example":1.2},"tvl":{"type":"number","description":"The defi position TVL","nullable":true,"example":3001020.8},"primaryAddress":{"type":"string","description":"Ethereum address for contract interaction of defi token","nullable":true}},"required":["address","chainId","type","decimals"]},"ActionInputMetadata":{"type":"object","properties":{"type":{"type":"string"},"description":{"type":"string"},"optional":{"type":"boolean"}},"required":["type","description"]},"ActionVariant":{"type":"object","properties":{"action":{"type":"string"},"inputs":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ActionInputMetadata"}},"bundleName":{"type":"string"}},"required":["action","inputs"]},"Action":{"type":"object","properties":{"action":{"type":"string","enum":["approve","borrow","borrowwithpositionid","deposit","singledeposit","singledepositwithpositionid","multideposit","multidepositwithpositionid","tokenizedsingledeposit","tokenizedmultideposit","multioutsingledeposit","depositclmm","depositwithestimate","encodedswap","flashloan","singletokenflashloan","multitokenflashloan","harvest","nftborrow","nftdeposit","nftmultideposit","nftmultiredeem","nftredeem","nftrepay","permittransferfrom","redeem","singleredeem","singleredeemwithpositionid","multiredeem","tokenizedsingleredeem","tokenizedmultiredeem","redeemclmm","redeemwithestimate","repay","repaywithpositionid","requestredeem","swap","transfer","transferfrom","withdraw","singlewithdraw","singlewithdrawwithpositionid","multiwithdraw","bridge","route","call","split","merge","ondosplit","ondomerge","balance","minamountout","slippage","fee","ensofee","paymasterfee","depositposition","add","sub","mul","div","min","max","isequal","islessthan","isequalorlessthan","isgreaterthan","isequalorgreaterthan","not","check","toggle"]},"inputs":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ActionInputMetadata"}},"variants":{"type":"array","items":{"$ref":"#/components/schemas/ActionVariant"}}},"required":["action","inputs"]},"LZDestinationTokenData":{"type":"object","properties":{"pool":{"type":"string","description":"LayerZero pool address on the destination chain","example":"0xf03b4d9ac1d5d1e7c4cef54c2a313b9fe051a0ad"},"token":{"type":"string","description":"Token address on the destination chain","example":"0x01bff41798a0bcf287b996046ca68b395dbc1071"},"decimals":{"type":"number","description":"Decimals of the token on the destination chain","example":6}},"required":["pool","token","decimals"]},"LZPoolLookupResponse":{"type":"object","properties":{"pool":{"type":"string","description":"LayerZero pool address for the source token","example":"0x6c96de32cea08842dcc4058c14d3aaad7fa41dee"},"chainId":{"type":"number","description":"Source chain ID","example":1},"destinationChainId":{"type":"number","description":"Destination chain ID","example":10},"token":{"type":"string","description":"Source token address","example":"0xdac17f958d2ee523a2206206994597c13d831ec7"},"decimals":{"type":"number","description":"Decimals of the source token","example":6},"destinationData":{"description":"Details about the destination pool and token","allOf":[{"$ref":"#/components/schemas/LZDestinationTokenData"}]}},"required":["pool","chainId","destinationChainId","token","decimals","destinationData"]},"LayerZeroMessageStatus":{"type":"object","properties":{"srcEid":{"type":"number","description":"Source chain endpoint ID"},"dstEid":{"type":"number","description":"Destination chain endpoint ID"},"srcChainId":{"type":"number","description":"Source chain ID (EVM)"},"dstChainId":{"type":"number","description":"Destination chain ID (EVM)"},"status":{"type":"string","description":"Message status from LayerZero"},"srcTxHash":{"type":"string","description":"Source transaction hash"},"dstTxHash":{"type":"string","description":"Destination transaction hash (if delivered)"},"srcBlockNumber":{"type":"number","description":"Source block number"},"dstBlockNumber":{"type":"number","description":"Destination block number (if delivered)"},"srcTimestamp":{"type":"string","description":"Source timestamp"},"dstTimestamp":{"type":"string","description":"Destination timestamp (if delivered)"},"sender":{"type":"string","description":"Sender address"},"receiver":{"type":"string","description":"Receiver address"}},"required":["srcEid","dstEid","status"]},"RefundDetails":{"type":"object","properties":{"token":{"type":"string","description":"Token address (0xeee... for native token)"},"amount":{"type":"string","description":"Amount refunded"},"recipient":{"type":"string","description":"Recipient address"},"isNative":{"type":"boolean","description":"Whether the refund is in native token"}},"required":["token","amount","recipient","isNative"]},"EnsoEvent":{"type":"object","properties":{"accountId":{"type":"string","description":"Account ID from ShortcutExecuted event"},"requestId":{"type":"string","description":"Request ID from ShortcutExecuted event"},"blockNumber":{"type":"number","description":"Block number where the event was emitted"},"transactionHash":{"type":"string","description":"Transaction hash"},"chainId":{"type":"number","description":"Chain ID where the event was emitted"},"success":{"type":"boolean","description":"Whether the shortcut execution was successful"},"error":{"type":"string","description":"Error data if execution failed"},"refundDetails":{"description":"Refund details if execution failed and funds were returned","allOf":[{"$ref":"#/components/schemas/RefundDetails"}]}},"required":["blockNumber","transactionHash","chainId","success"]},"BridgeHop":{"type":"object","properties":{"sourceChainId":{"type":"number","description":"Source chain ID for this hop"},"sourceTxHash":{"type":"string","description":"Source transaction hash for this hop"},"destinationChainId":{"type":"number","description":"Destination chain ID (if known)"},"destinationTxHash":{"type":"string","description":"Destination transaction hash (if completed)"},"status":{"type":"string","description":"Status of this hop","enum":["pending","inflight","delivered","failed","ready_for_manual_execution","unknown"]},"layerZeroMessage":{"description":"LayerZero message information","allOf":[{"$ref":"#/components/schemas/LayerZeroMessageStatus"}]},"ensoSourceEvent":{"description":"Enso shortcut event from source chain (ShortcutExecuted + execution result). Null if not found.","nullable":true,"allOf":[{"$ref":"#/components/schemas/EnsoEvent"}]},"ensoDestinationEvent":{"description":"Enso shortcut event from destination chain (ShortcutExecuted + execution result). Null if not found. On an intent route this is read from the keeper's execution transaction (destinationExecutionTxHash), not from the bridge delivery.","nullable":true,"allOf":[{"$ref":"#/components/schemas/EnsoEvent"}]}},"required":["sourceChainId","sourceTxHash","status"]},"EnsoMetadata":{"type":"object","properties":{"tokenIn":{"type":"string","description":"Token in address"},"tokenOut":{"type":"string","description":"Token out address"},"amountIn":{"type":"string","description":"Amount in"},"chainId":{"type":"number","description":"Chain ID from the request"},"timestamp":{"type":"number","description":"Timestamp of the request"}}},"BridgeRouteIntent":{"type":"object","properties":{"requestId":{"type":"string","description":"Intent request id (bytes32) published by the source transaction"},"executor":{"type":"string","description":"Ephemeral executor address the bridge delivers to on the execution chain (lowercase)"},"executionChainId":{"type":"number","description":"Chain the intent executes (and refunds) on"},"phase":{"type":"string","description":"Coarse lifecycle phase of the destination stage","enum":["awaiting_funds","executing","executed","refunding","refunded","failed","unknown"]},"status":{"type":"string","description":"The keeper's own lifecycle status (pending | waiting_funds | inflight | executed | failed | failed_permanent | expired | refund_pending | refund_inflight | refunded | refund_skipped | refund_failed), or unknown"},"statusDescription":{"type":"string","description":"Human-readable status explanation"},"source":{"type":"string","description":"Where the stage was read from: the intent keeper, or only the chain itself","enum":["keeper","onchain"]},"deadline":{"type":"string","description":"Intent deadline (ISO 8601). Past it the executor can only refund."},"executionTxHash":{"type":"string","description":"The keeper's execution transaction"},"executionExplorerUrl":{"type":"string","description":"Block-explorer link for the execution transaction"},"executedAt":{"type":"string","description":"When the execution mined (ISO 8601)"},"refundTxHash":{"type":"string","description":"The repayment transaction, when funds were swept back"},"refundExplorerUrl":{"type":"string","description":"Block-explorer link for the repayment transaction"},"refundedAt":{"type":"string","description":"When the repayment mined (ISO 8601)"},"error":{"type":"string","description":"Last error the keeper recorded for this intent, if any"}},"required":["requestId","executor","phase","status","source"]},"BridgeTransactionResponse":{"type":"object","properties":{"sourceChainId":{"type":"number","description":"Source chain ID"},"sourceTxHash":{"type":"string","description":"Source transaction hash"},"destinationChainId":{"type":"number","description":"Destination chain ID (if known)"},"destinationTxHash":{"type":"string","description":"Destination transaction hash (if completed)"},"status":{"type":"string","description":"Overall bridge status","enum":["pending","inflight","delivered","failed","ready_for_manual_execution","unknown"]},"isMultiBridge":{"type":"boolean","description":"Whether this transaction involves multiple sequential bridges. Only present when true."},"hops":{"description":"Array of individual bridge hops. Only present for multi-bridge transactions.","type":"array","items":{"$ref":"#/components/schemas/BridgeHop"}},"layerZeroMessage":{"description":"LayerZero message information","allOf":[{"$ref":"#/components/schemas/LayerZeroMessageStatus"}]},"ensoSourceEvent":{"description":"Enso shortcut event from source chain (ShortcutExecuted + execution result). Null if not found.","nullable":true,"allOf":[{"$ref":"#/components/schemas/EnsoEvent"}]},"ensoDestinationEvent":{"description":"Enso shortcut event from destination chain (ShortcutExecuted + execution result). Null if not found. On an intent route this is read from the keeper's execution transaction (destinationExecutionTxHash), not from the bridge delivery.","nullable":true,"allOf":[{"$ref":"#/components/schemas/EnsoEvent"}]},"ensoMetadata":{"description":"Enso transaction metadata","allOf":[{"$ref":"#/components/schemas/EnsoMetadata"}]},"intent":{"description":"Present when the source transaction published a cross-chain intent: this bridge only delivers funds to the intent's ephemeral executor, and a keeper then executes the intent (or refunds it past its deadline) in a separate destination transaction. `status: delivered` means the bridge delivered the funds to the executor; the execution itself is reported here (phase, keeper status, execution / repayment transactions).","allOf":[{"$ref":"#/components/schemas/BridgeRouteIntent"}]},"destinationExecutionTxHash":{"type":"string","description":"The keeper's intent execution transaction on the destination chain, once executed - the transaction that performed the Enso swap. destinationTxHash is only the bridge delivery that funded the executor."},"error":{"type":"string","description":"Error message if something went wrong"}},"required":["sourceChainId","sourceTxHash","status"]},"Protocol":{"type":"object","properties":{"slug":{"type":"string"},"url":{"type":"string"}},"required":["slug","url"]},"Network":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"]},"StandardAction":{"type":"object","properties":{"action":{"type":"string","enum":["approve","borrow","borrowwithpositionid","deposit","singledeposit","singledepositwithpositionid","multideposit","multidepositwithpositionid","tokenizedsingledeposit","tokenizedmultideposit","multioutsingledeposit","depositclmm","depositwithestimate","encodedswap","flashloan","singletokenflashloan","multitokenflashloan","harvest","nftborrow","nftdeposit","nftmultideposit","nftmultiredeem","nftredeem","nftrepay","permittransferfrom","redeem","singleredeem","singleredeemwithpositionid","multiredeem","tokenizedsingleredeem","tokenizedmultiredeem","redeemclmm","redeemwithestimate","repay","repaywithpositionid","requestredeem","swap","transfer","transferfrom","withdraw","singlewithdraw","singlewithdrawwithpositionid","multiwithdraw","bridge","route","call","split","merge","ondosplit","ondomerge","balance","minamountout","slippage","fee","ensofee","paymasterfee","depositposition","add","sub","mul","div","min","max","isequal","islessthan","isequalorlessthan","isgreaterthan","isequalorgreaterthan","not","check","toggle"]},"name":{"type":"string"},"functionNames":{"type":"array","items":{"type":"string"}},"supportedChains":{"type":"array","items":{"$ref":"#/components/schemas/Network"}},"inputs":{"type":"array","items":{"type":"string"}}},"required":["action","name","functionNames","supportedChains","inputs"]},"Standard":{"type":"object","properties":{"protocol":{"$ref":"#/components/schemas/Protocol"},"forks":{"type":"array","items":{"$ref":"#/components/schemas/Protocol"}},"actions":{"type":"array","items":{"$ref":"#/components/schemas/StandardAction"}}},"required":["protocol","forks","actions"]},"ProtocolModel":{"type":"object","properties":{"project":{"type":"string","example":"uniswap"},"slug":{"type":"string","example":"uniswap-v2"},"name":{"type":"string","example":"Uniswap V2","nullable":true},"description":{"type":"string","nullable":true},"url":{"type":"string","example":"https://app.uniswap.org/swap","nullable":true},"logosUri":{"example":"https://icons.llama.fi/uniswap-v2.png","nullable":true,"type":"array","items":{"type":"string"}},"chains":{"nullable":true,"example":[{"id":1,"name":"mainnet"}],"type":"array","items":{"$ref":"#/components/schemas/Network"}}},"required":["project","slug","name","description","url","logosUri","chains"]},"CallOutput":{"type":"object","properties":{"useOutputOfCallAt":{"type":"number"},"index":{"type":"number"}},"required":["useOutputOfCallAt"]},"ActionToBundle":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol to interact with","example":"enso"},"action":{"type":"string","enum":["approve","borrow","borrowwithpositionid","deposit","singledeposit","singledepositwithpositionid","multideposit","multidepositwithpositionid","tokenizedsingledeposit","tokenizedmultideposit","multioutsingledeposit","depositclmm","depositwithestimate","encodedswap","flashloan","singletokenflashloan","multitokenflashloan","harvest","nftborrow","nftdeposit","nftmultideposit","nftmultiredeem","nftredeem","nftrepay","permittransferfrom","redeem","singleredeem","singleredeemwithpositionid","multiredeem","tokenizedsingleredeem","tokenizedmultiredeem","redeemclmm","redeemwithestimate","repay","repaywithpositionid","requestredeem","swap","transfer","transferfrom","withdraw","singlewithdraw","singlewithdrawwithpositionid","multiwithdraw","bridge","route","call","split","merge","ondosplit","ondomerge","balance","minamountout","slippage","fee","ensofee","paymasterfee","depositposition","add","sub","mul","div","min","max","isequal","islessthan","isequalorlessthan","isgreaterthan","isequalorgreaterthan","not","check","toggle"],"example":"route"},"args":{"type":"object","additionalProperties":true,"example":{"tokenIn":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","tokenOut":"0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84","amountIn":"100000000000","slippage":"300"}}},"required":["protocol","action","args"]},"BundleApprovalTransaction":{"type":"object","properties":{"to":{"type":"string"},"from":{"type":"string"},"data":{"type":"string"},"description":{"type":"string"}},"required":["to","from","data"]},"BundleShortcutTransaction":{"type":"object","properties":{"bundle":{"type":"array","items":{"$ref":"#/components/schemas/ActionToBundle"}},"gas":{"type":"string","description":"Gas estimate for the transaction"},"amountsOut":{"type":"object","description":"Expected output amounts by token address","additionalProperties":{"type":"string"}},"route":{"description":"The route the shortcut will use","type":"array","items":{"$ref":"#/components/schemas/Hop"}},"metadata":{"$ref":"#/components/schemas/ShortcutResponseMetadata"},"intent":{"$ref":"#/components/schemas/IntentResponse"},"createdAt":{"type":"number","description":"Block number the transaction was created on"},"tx":{"description":"The tx object to use in `ethers`","allOf":[{"$ref":"#/components/schemas/Transaction"}]},"minAmountsOut":{"type":"object","description":"Expected minimal output amounts by token address","additionalProperties":{"type":"string"}},"priceImpact":{"type":"number","description":"Price impact in basis points, null if USD price not found","nullable":true},"feeAmount":{"type":"object","description":"Fees by token address","additionalProperties":{"type":"string"}},"userOp":{"description":"The ERC-4337 user operation object","allOf":[{"$ref":"#/components/schemas/UserOperation"}]},"approvals":{"description":"Deprecated: use `preTransactions` instead. Legacy standards-required approvals that must be executed before the bundle.","deprecated":true,"example":[{"from":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","to":"0x1111111111111111111111111111111111111111","data":"0x"}],"type":"array","items":{"$ref":"#/components/schemas/BundleApprovalTransaction"}},"preTransactions":{"description":"Transactions that may need to be executed before the main shortcut transaction. Token approvals should be skipped when the current allowance is already sufficient.","type":"array","items":{"$ref":"#/components/schemas/PreTransaction"}},"bridgingEstimates":{"description":"Estimated bridging durations for any bridge hops","type":"array","items":{"$ref":"#/components/schemas/BridgeLatencyEstimate"}},"validUntil":{"type":"number","description":"Unix timestamp (seconds) after which this quote expires. Transactions submitted after this time may revert."}},"required":["bundle","metadata","createdAt","tx"]},"RouteArgsDto":{"type":"object","properties":{"tokenIn":{"type":"string","description":"Input token address","example":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"},"tokenOut":{"type":"string","description":"Output token address","example":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},"amountIn":{"description":"Amount to route in wei (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"1000000000000000000"},"slippage":{"type":"string","description":"Slippage tolerance in basis points (100 = 1%)","example":"100"},"receiver":{"type":"string","description":"Receiver address if not the caller","example":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045"},"destinationChainId":{"type":"integer","description":"Destination chain ID for a cross-chain route","example":42161},"refundReceiver":{"type":"string","description":"Address to receive refunded dust for a cross-chain route","example":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045"},"minAmountOut":{"description":"Minimum acceptable amount or amounts out","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"},{"type":"array","items":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/CallOutput"}]}}],"example":["995000000"]},"ignoreAggregators":{"type":"array","description":"Aggregators to ignore","example":["1inch","paraswap"],"items":{"type":"string","enum":["0x","1inch","openocean","kyberswap","native","paraswap","bebop","barter","sushiswap-router","ooga-booga","renegade","uniswap","rooster","wowmax","grapher","hyperbloom","hyperswap","hyperflow","fly","eisen","nordstern","everlong","bitget","akka"]}},"ignoreStandards":{"description":"Standards to ignore","example":["uniswap-v2"],"type":"array","items":{"type":"string"}},"ignoreBridges":{"type":"array","description":"Bridges to ignore. Only used for cross-chain route actions.","example":["ccip"],"default":[],"items":{"type":"string","enum":["cctp","stargate","ccip","relay","layerzero-teller","arbitrum-native","mayan"]}}},"required":["tokenIn","tokenOut","amountIn"]},"RouteActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol","example":"enso"},"action":{"type":"string","description":"Action","example":"route"},"args":{"description":"Route action arguments","allOf":[{"$ref":"#/components/schemas/RouteArgsDto"}]}},"required":["protocol","action","args"]},"BalanceArgsDto":{"type":"object","properties":{"token":{"type":"string","description":"Token address to check balance","example":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},"estimate":{"type":"string","description":"Estimated balance amount (wei). Used for route building when the account may not have a balance yet.","example":"1000000000000000000"},"account":{"type":"string","description":"Account address to check balance of. Defaults to the shortcut wallet address.","example":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045"}},"required":["token"]},"BalanceActionDto":{"type":"object","properties":{"protocol":{"type":"string","example":"enso"},"action":{"type":"string","example":"balance"},"args":{"$ref":"#/components/schemas/BalanceArgsDto"}},"required":["protocol","action","args"]},"ApproveArgsDto":{"type":"object","properties":{"token":{"type":"string","description":"Token to approve","example":"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"},"spender":{"type":"string","description":"Spender address","example":"0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D"},"amount":{"description":"Amount to approve in wei (or previous output reference). Required for erc20.","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"115792089237316195423570985008687907853269984665640564039457"},"tokenId":{"type":"string","description":"ERC721 token id to approve. Required for erc721.","example":"123"}},"required":["token","spender"]},"ApproveActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol","example":"erc20","enum":["erc20","erc721"]},"action":{"type":"string","example":"approve"},"args":{"$ref":"#/components/schemas/ApproveArgsDto"}},"required":["protocol","action","args"]},"BorrowArgsDto":{"type":"object","properties":{"collateral":{"description":"Collateral token address or addresses","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"example":"0x..."},"tokenOut":{"type":"string","description":"Token to borrow","example":"0xA0b8...eB48"},"amountOut":{"description":"Amount to borrow in wei (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"1000000"},"primaryAddress":{"type":"string","description":"Lending pool contract address","example":"0x..."},"receiver":{"type":"string","description":"Receiver address","example":"0x..."},"onBehalfOf":{"type":"string","description":"Address that will own the debt position","example":"0x..."},"positionId":{"type":"string","description":"Position identifier for position-based lending protocols","example":"0x01"},"tokenId":{"type":"string","description":"Token identifier for token-based lending positions","example":"123"},"args":{"type":"object","description":"Protocol-specific additional borrow arguments","additionalProperties":{"type":"string"}}},"required":["tokenOut","amountOut","primaryAddress"]},"BorrowActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol to borrow from","example":"aave-v3"},"action":{"type":"string","example":"borrow"},"args":{"$ref":"#/components/schemas/BorrowArgsDto"}},"required":["protocol","action","args"]},"HarvestArgsDto":{"type":"object","properties":{"token":{"type":"string","description":"Token to harvest","example":"0x..."},"primaryAddress":{"type":"string","description":"Primary contract address","example":"0x..."}},"required":["token","primaryAddress"]},"HarvestActionDto":{"type":"object","properties":{"action":{"type":"string","description":"Action","example":"harvest"},"protocol":{"type":"string","description":"Protocol","example":"convex"},"args":{"$ref":"#/components/schemas/HarvestArgsDto"}},"required":["action","protocol","args"]},"RepayArgsDto":{"type":"object","properties":{"tokenIn":{"type":"string","description":"Token to repay with","example":"0xC02a..."},"amountIn":{"description":"Amount to repay (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"1000000000000000000"},"primaryAddress":{"type":"string","description":"Lending pool contract address","example":"0x..."},"onBehalfOf":{"type":"string","description":"Address on whose behalf the debt is repaid","example":"0x..."},"positionId":{"type":"string","description":"Position identifier for position-based lending protocols","example":"0x01"},"tokenId":{"type":"string","description":"Token identifier for token-based lending positions","example":"123"},"args":{"type":"object","description":"Protocol-specific additional repay arguments","additionalProperties":{"type":"string"}}},"required":["tokenIn","amountIn","primaryAddress"]},"RepayActionDto":{"type":"object","properties":{"action":{"type":"string","example":"repay"},"protocol":{"type":"string","description":"Protocol","example":"aave-v3"},"args":{"$ref":"#/components/schemas/RepayArgsDto"}},"required":["action","protocol","args"]},"CallArgsDto":{"type":"object","properties":{"tokenIn":{"type":"string","description":"Optional input token address","example":"0x..."},"tokenOut":{"type":"string","description":"Optional output token address","example":"0x..."},"address":{"type":"string","description":"Contract address to call","example":"0x..."},"method":{"type":"string","description":"Method name to call","example":"collect"},"abi":{"type":"string","description":"Flattened function signature","example":"function collect((uint256 tokenId, address recipient, uint128 amount0Max, uint128 amount1Max) params) external returns (uint256 amount0, uint256 amount1)"},"args":{"type":"array","description":"Arguments for the method","items":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"$ref":"#/components/schemas/CallOutput"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"$ref":"#/components/schemas/CallOutput"}]}}]},"example":[123,true,{"useOutputOfCallAt":0},["1","2"]]},"value":{"description":"Native value to send (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"0"}},"required":["address","method","abi","args"]},"CallActionDto":{"type":"object","properties":{"action":{"type":"string","example":"call"},"protocol":{"type":"string","description":"Protocol to interact with","example":"uniswap-v3"},"args":{"$ref":"#/components/schemas/CallArgsDto"}},"required":["action","protocol","args"]},"FlashloanArgsDto":{"type":"object","properties":{"flashloanToken":{"description":"Token address or addresses to flashloan","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"example":"0xfcbd14dc51f0a4d49d5e53c2e0950e0bc26d0dce"},"flashloanAmount":{"description":"Flashloan amount or amounts in wei","oneOf":[{"type":"string"},{"$ref":"#/components/schemas/CallOutput"},{"type":"array","items":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/CallOutput"}]}}],"example":"1000000000000000000"},"tokenIn":{"description":"Additional user token address or addresses to combine with the flashloan","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"amountIn":{"description":"Amount or amounts for additional user tokens","oneOf":[{"type":"string"},{"$ref":"#/components/schemas/CallOutput"},{"type":"array","items":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/CallOutput"}]}}]},"tokenId":{"description":"Token id or ids when tokenIn is an ERC721 position. Mutually exclusive with amountIn.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"example":"876"},"tokenOut":{"description":"Token address or addresses expected after the callback","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"callback":{"type":"array","description":"Actions to execute within the flashloan callback","items":{"oneOf":[{"$ref":"#/components/schemas/RouteActionDto"},{"$ref":"#/components/schemas/SwapActionDto"},{"$ref":"#/components/schemas/BridgeActionDto"},{"$ref":"#/components/schemas/BalanceActionDto"},{"$ref":"#/components/schemas/ApproveActionDto"},{"$ref":"#/components/schemas/TransferActionDto"},{"$ref":"#/components/schemas/TransferFromActionDto"},{"$ref":"#/components/schemas/PermitTransferFromActionDto"},{"$ref":"#/components/schemas/DepositActionDto"},{"$ref":"#/components/schemas/RedeemActionDto"},{"$ref":"#/components/schemas/DepositCLMMActionDto"},{"$ref":"#/components/schemas/RedeemCLMMActionDto"},{"$ref":"#/components/schemas/TokenizedSingleDepositActionDto"},{"$ref":"#/components/schemas/TokenizedMultiDepositActionDto"},{"$ref":"#/components/schemas/TokenizedSingleRedeemActionDto"},{"$ref":"#/components/schemas/TokenizedMultiRedeemActionDto"},{"$ref":"#/components/schemas/MultiOutSingleDepositActionDto"},{"$ref":"#/components/schemas/CallActionDto"},{"$ref":"#/components/schemas/FlashloanActionDto"},{"$ref":"#/components/schemas/WithdrawActionDto"},{"$ref":"#/components/schemas/SplitActionDto"},{"$ref":"#/components/schemas/MergeActionDto"},{"$ref":"#/components/schemas/MinAmountOutActionDto"},{"$ref":"#/components/schemas/SlippageActionDto"},{"$ref":"#/components/schemas/FeeActionDto"},{"$ref":"#/components/schemas/EnsoFeeActionDto"},{"$ref":"#/components/schemas/PaymasterFeeActionDto"},{"$ref":"#/components/schemas/RepayActionDto"},{"$ref":"#/components/schemas/BorrowActionDto"},{"$ref":"#/components/schemas/HarvestActionDto"},{"$ref":"#/components/schemas/SingleDepositActionDto"},{"$ref":"#/components/schemas/MultiDepositActionDto"},{"$ref":"#/components/schemas/SingleRedeemActionDto"},{"$ref":"#/components/schemas/MultiRedeemActionDto"},{"$ref":"#/components/schemas/MathActionDto"},{"$ref":"#/components/schemas/ComparisonActionDto"},{"$ref":"#/components/schemas/ConditionActionDto"},{"$ref":"#/components/schemas/ToggleActionDto"}],"discriminator":{"propertyName":"action","mapping":{"route":"#/components/schemas/RouteActionDto","swap":"#/components/schemas/SwapActionDto","bridge":"#/components/schemas/BridgeActionDto","balance":"#/components/schemas/BalanceActionDto","approve":"#/components/schemas/ApproveActionDto","transfer":"#/components/schemas/TransferActionDto","transferfrom":"#/components/schemas/TransferFromActionDto","permittransferfrom":"#/components/schemas/PermitTransferFromActionDto","deposit":"#/components/schemas/DepositActionDto","redeem":"#/components/schemas/RedeemActionDto","depositclmm":"#/components/schemas/DepositCLMMActionDto","redeemclmm":"#/components/schemas/RedeemCLMMActionDto","tokenizedsingledeposit":"#/components/schemas/TokenizedSingleDepositActionDto","tokenizedmultideposit":"#/components/schemas/TokenizedMultiDepositActionDto","tokenizedsingleredeem":"#/components/schemas/TokenizedSingleRedeemActionDto","tokenizedmultiredeem":"#/components/schemas/TokenizedMultiRedeemActionDto","multioutsingledeposit":"#/components/schemas/MultiOutSingleDepositActionDto","call":"#/components/schemas/CallActionDto","flashloan":"#/components/schemas/FlashloanActionDto","withdraw":"#/components/schemas/WithdrawActionDto","singlewithdraw":"#/components/schemas/WithdrawActionDto","singlewithdrawwithpositionid":"#/components/schemas/WithdrawActionDto","multiwithdraw":"#/components/schemas/WithdrawActionDto","split":"#/components/schemas/SplitActionDto","merge":"#/components/schemas/MergeActionDto","minamountout":"#/components/schemas/MinAmountOutActionDto","slippage":"#/components/schemas/SlippageActionDto","fee":"#/components/schemas/FeeActionDto","ensofee":"#/components/schemas/EnsoFeeActionDto","paymasterfee":"#/components/schemas/PaymasterFeeActionDto","repay":"#/components/schemas/RepayActionDto","borrow":"#/components/schemas/BorrowActionDto","harvest":"#/components/schemas/HarvestActionDto","singledeposit":"#/components/schemas/SingleDepositActionDto","multideposit":"#/components/schemas/MultiDepositActionDto","singleredeem":"#/components/schemas/SingleRedeemActionDto","multiredeem":"#/components/schemas/MultiRedeemActionDto","add":"#/components/schemas/MathActionDto","sub":"#/components/schemas/MathActionDto","mul":"#/components/schemas/MathActionDto","div":"#/components/schemas/MathActionDto","min":"#/components/schemas/MathActionDto","max":"#/components/schemas/MathActionDto","isequal":"#/components/schemas/ComparisonActionDto","islessthan":"#/components/schemas/ComparisonActionDto","isequalorlessthan":"#/components/schemas/ComparisonActionDto","isgreaterthan":"#/components/schemas/ComparisonActionDto","isequalorgreaterthan":"#/components/schemas/ComparisonActionDto","not":"#/components/schemas/ConditionActionDto","check":"#/components/schemas/ConditionActionDto","toggle":"#/components/schemas/ToggleActionDto"}}}},"receiver":{"type":"string","description":"Receiver address","example":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045"},"primaryAddress":{"type":"string","description":"Flashloan pool or lender contract address","example":"0x24147243f9c08d835C218Cda1e135f8dFD0517D0"}},"required":["flashloanToken","flashloanAmount","tokenOut","callback"]},"FlashloanActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol","example":"bend"},"action":{"type":"string","enum":["flashloan"],"example":"flashloan"},"args":{"$ref":"#/components/schemas/FlashloanArgsDto"}},"required":["protocol","action","args"]},"WithdrawArgsDto":{"type":"object","properties":{"tokenOut":{"description":"Output token address or addresses","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"example":"0x..."},"amountOut":{"description":"Amount or amounts to withdraw in wei","oneOf":[{"type":"string"},{"$ref":"#/components/schemas/CallOutput"},{"type":"array","items":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/CallOutput"}]}}],"example":"1000000"},"primaryAddress":{"type":"string","description":"Protocol contract address","example":"0x..."},"receiver":{"type":"string","description":"Receiver address","example":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045"},"onBehalfOf":{"type":"string","description":"Address on whose behalf the withdrawal is made","example":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045"},"positionId":{"type":"string","description":"Position identifier for singlewithdrawwithpositionid","example":"0x01"},"args":{"type":"object","description":"Protocol-specific additional withdrawal arguments","additionalProperties":{"type":"string"}}},"required":["tokenOut","amountOut","primaryAddress"]},"WithdrawActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol","example":"morpho-markets-v1"},"action":{"type":"string","enum":["withdraw","singlewithdraw","singlewithdrawwithpositionid","multiwithdraw"],"example":"withdraw"},"args":{"$ref":"#/components/schemas/WithdrawArgsDto"}},"required":["protocol","action","args"]},"SplitArgsDto":{"type":"object","properties":{"tokenIn":{"type":"string","description":"Token to split","example":"0xC02a..."},"tokenOut":{"description":"Output token addresses","example":["0x...","0x..."],"type":"array","items":{"type":"string"}},"amountIn":{"description":"Amount to split (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"1000000000000000000"},"receiver":{"type":"string","description":"Receiver address","example":"0x..."}},"required":["tokenIn","tokenOut","amountIn"]},"SplitActionDto":{"type":"object","properties":{"protocol":{"type":"string","example":"enso"},"action":{"type":"string","example":"split"},"args":{"$ref":"#/components/schemas/SplitArgsDto"}},"required":["protocol","action","args"]},"MergeArgsDto":{"type":"object","properties":{"tokenIn":{"description":"Input token addresses","example":["0x...","0x..."],"type":"array","items":{"type":"string"}},"tokenOut":{"type":"string","description":"Output token address","example":"0x..."},"amountIn":{"description":"Amounts to merge (or previous output reference)","example":["1000",{"useOutputOfCallAt":0}],"type":"array","items":{"oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}]}},"receiver":{"type":"string","description":"Receiver address","example":"0x..."}},"required":["tokenIn","tokenOut","amountIn"]},"MergeActionDto":{"type":"object","properties":{"protocol":{"type":"string","example":"enso"},"action":{"type":"string","example":"merge"},"args":{"$ref":"#/components/schemas/MergeArgsDto"}},"required":["protocol","action","args"]},"MinAmountOutArgsDto":{"type":"object","properties":{"amountOut":{"description":"Expected output amount (previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":{"useOutputOfCallAt":0}},"minAmountOut":{"description":"Minimum acceptable amount","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"995000000"}},"required":["amountOut","minAmountOut"]},"MinAmountOutActionDto":{"type":"object","properties":{"protocol":{"type":"string","example":"enso"},"action":{"type":"string","example":"minamountout"},"args":{"$ref":"#/components/schemas/MinAmountOutArgsDto"}},"required":["protocol","action","args"]},"SlippageArgsDto":{"type":"object","properties":{"bps":{"type":"string","description":"Maximum slippage in basis points","example":"100"},"amountOut":{"description":"Expected output amount reference","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":{"useOutputOfCallAt":0}}},"required":["bps","amountOut"]},"SlippageActionDto":{"type":"object","properties":{"protocol":{"type":"string","example":"enso"},"action":{"type":"string","example":"slippage"},"args":{"$ref":"#/components/schemas/SlippageArgsDto"}},"required":["protocol","action","args"]},"FeeArgsDto":{"type":"object","properties":{"receiver":{"type":"string","description":"Receiver of the fee","example":"0x5fe5C43f1c4B2A1BA49cC6fE4A6a62f2f1619B82"},"token":{"type":"string","description":"Token to apply fee to","example":"0xA0b8...eB48"},"amount":{"description":"Amount (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"1000000"},"bps":{"type":"string","description":"Fee in basis points","example":"50"}},"required":["receiver","token","amount","bps"]},"FeeActionDto":{"type":"object","properties":{"protocol":{"type":"string","example":"enso"},"action":{"type":"string","example":"fee"},"args":{"$ref":"#/components/schemas/FeeArgsDto"}},"required":["protocol","action","args"]},"EnsoFeeArgsDto":{"type":"object","properties":{"token":{"type":"string","description":"Token to apply fee to","example":"0xA0b8...eB48"},"amount":{"description":"Amount (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"1000000"},"bps":{"type":"string","description":"Fee in basis points","example":"50"}},"required":["token","amount","bps"]},"EnsoFeeActionDto":{"type":"object","properties":{"protocol":{"type":"string","example":"enso"},"action":{"type":"string","example":"ensofee"},"args":{"$ref":"#/components/schemas/EnsoFeeArgsDto"}},"required":["protocol","action","args"]},"PaymasterFeeArgsDto":{"type":"object","properties":{"token":{"type":"string","description":"Token to apply fee to","example":"0xA0b8...eB48"},"amount":{"description":"Amount (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"1000000"}},"required":["token","amount"]},"PaymasterFeeActionDto":{"type":"object","properties":{"protocol":{"type":"string","example":"enso"},"action":{"type":"string","example":"paymasterfee"},"args":{"$ref":"#/components/schemas/PaymasterFeeArgsDto"}},"required":["protocol","action","args"]},"BinaryOperationArgsDto":{"type":"object","properties":{"amountA":{"description":"First operand (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"1000000"},"amountB":{"description":"Second operand (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"500000"}},"required":["amountA","amountB"]},"MathActionDto":{"type":"object","properties":{"protocol":{"type":"string","enum":["math"],"example":"math"},"action":{"type":"string","enum":["add","sub","mul","div","min","max"],"example":"add"},"args":{"$ref":"#/components/schemas/BinaryOperationArgsDto"}},"required":["protocol","action","args"]},"ComparisonActionDto":{"type":"object","properties":{"protocol":{"type":"string","enum":["helpers"],"example":"helpers"},"action":{"type":"string","enum":["isequal","islessthan","isequalorlessthan","isgreaterthan","isequalorgreaterthan"],"example":"isequal"},"args":{"$ref":"#/components/schemas/BinaryOperationArgsDto"}},"required":["protocol","action","args"]},"ConditionArgsDto":{"type":"object","properties":{"condition":{"description":"Boolean condition (or previous output reference)","oneOf":[{"type":"boolean"},{"$ref":"#/components/schemas/CallOutput"}],"example":{"useOutputOfCallAt":0}}},"required":["condition"]},"ConditionActionDto":{"type":"object","properties":{"protocol":{"type":"string","enum":["helpers"],"example":"helpers"},"action":{"type":"string","enum":["not","check"],"example":"check"},"args":{"$ref":"#/components/schemas/ConditionArgsDto"}},"required":["protocol","action","args"]},"ToggleArgsDto":{"type":"object","properties":{"condition":{"description":"Boolean condition (or previous output reference)","oneOf":[{"type":"boolean"},{"$ref":"#/components/schemas/CallOutput"}],"example":{"useOutputOfCallAt":0}},"amountA":{"description":"Value when condition is true (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"1000000"},"amountB":{"description":"Value when condition is false (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"0"}},"required":["condition","amountA","amountB"]},"ToggleActionDto":{"type":"object","properties":{"protocol":{"type":"string","enum":["helpers"],"example":"helpers"},"action":{"type":"string","enum":["toggle"],"example":"toggle"},"args":{"$ref":"#/components/schemas/ToggleArgsDto"}},"required":["protocol","action","args"]},"DepositArgsDto":{"type":"object","properties":{"onBehalfOf":{"type":"string","description":"Address that will own the resulting protocol position","example":"0x..."},"args":{"type":"object","description":"Protocol-specific additional action arguments","additionalProperties":{"type":"string"}},"tokenIn":{"description":"Input token(s)","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"example":["0x...","0x..."]},"tokenOut":{"description":"Output token(s)","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"example":"0x..."},"amountIn":{"description":"Amount(s) (or previous output reference)","oneOf":[{"type":"string"},{"$ref":"#/components/schemas/CallOutput"},{"type":"array","items":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/CallOutput"}]}}],"example":["1000000",{"useOutputOfCallAt":0}]},"primaryAddress":{"type":"string","description":"Protocol contract address","example":"0x..."},"positionId":{"type":"string","description":"Position identifier for position-based protocols","example":"0x01"},"tokenId":{"type":"string","description":"Token identifier for token-based protocol positions","example":"123"},"receiver":{"type":"string","description":"Receiver address","example":"0x..."}},"required":["tokenIn","amountIn","primaryAddress"]},"DepositActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol","example":"yearn"},"action":{"type":"string","example":"deposit"},"args":{"$ref":"#/components/schemas/DepositArgsDto"}},"required":["protocol","action","args"]},"RedeemArgsDto":{"type":"object","properties":{"onBehalfOf":{"type":"string","description":"Address that will own the resulting protocol position","example":"0x..."},"args":{"type":"object","description":"Protocol-specific additional action arguments","additionalProperties":{"type":"string"}},"tokenIn":{"type":"string","description":"Input token (shares) address","example":"0x..."},"tokenOut":{"description":"Output token(s)","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"example":["0x...","0x..."]},"amountIn":{"description":"Amount to redeem (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"1000000"},"primaryAddress":{"type":"string","description":"Protocol contract address","example":"0x..."},"receiver":{"type":"string","description":"Receiver address","example":"0x..."},"positionId":{"type":"string","description":"Position identifier for position-based protocols","example":"0x01"},"tokenId":{"type":"string","description":"Token identifier for token-based protocol positions","example":"123"}},"required":["tokenOut","amountIn","primaryAddress"]},"RedeemActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol","example":"yearn"},"action":{"type":"string","example":"redeem"},"args":{"$ref":"#/components/schemas/RedeemArgsDto"}},"required":["protocol","action","args"]},"DepositCLMMArgsDto":{"type":"object","properties":{"tokenIn":{"description":"Input token addresses","example":["0x...","0x..."],"type":"array","items":{"type":"string"}},"tokenOut":{"type":"string","description":"Output token address","example":"0x..."},"amountIn":{"type":"array","description":"Amounts (or previous output references)","items":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/CallOutput"}]},"example":["100",{"useOutputOfCallAt":0}]},"ticks":{"description":"Ticks for the position","example":["-276300","276300"],"type":"array","items":{"type":"string"}},"poolFee":{"type":"string","description":"Pool fee in basis points","example":"3000"},"receiver":{"type":"string","description":"Receiver address","example":"0x..."},"tickSpacing":{"type":"string","description":"Tick spacing","example":"60"},"hook":{"type":"string","description":"Hook address","example":"0x..."}},"required":["tokenIn","tokenOut","amountIn","ticks"]},"DepositCLMMActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol","example":"uniswap-v4"},"action":{"type":"string","example":"depositclmm"},"args":{"$ref":"#/components/schemas/DepositCLMMArgsDto"}},"required":["protocol","action","args"]},"RedeemCLMMArgsDto":{"type":"object","properties":{"tokenIn":{"type":"string","description":"Input token address to redeem","example":"0x..."},"tokenOut":{"description":"Output token addresses","example":["0x...","0x..."],"type":"array","items":{"type":"string"}},"liquidity":{"description":"Liquidity to redeem (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"100000"},"tokenId":{"type":"string","description":"Token ID of the NFT position","example":"12345"},"receiver":{"type":"string","description":"Receiver address","example":"0x..."}},"required":["tokenIn","tokenOut","liquidity","tokenId"]},"RedeemCLMMActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol","example":"uniswap-v4"},"action":{"type":"string","example":"redeemclmm"},"args":{"$ref":"#/components/schemas/RedeemCLMMArgsDto"}},"required":["protocol","action","args"]},"TokenizedSingleDepositArgsDto":{"type":"object","properties":{"onBehalfOf":{"type":"string","description":"Address that will own the resulting protocol position","example":"0x..."},"args":{"type":"object","description":"Protocol-specific additional action arguments","additionalProperties":{"type":"string"}},"tokenIn":{"type":"string","description":"Input token address","example":"0x..."},"tokenOut":{"type":"string","description":"Output token address","example":"0x..."},"amountIn":{"description":"Amount to deposit (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"1000000"},"primaryAddress":{"type":"string","description":"Primary contract address","example":"0x..."},"receiver":{"type":"string","description":"Receiver address","example":"0x..."}},"required":["tokenIn","tokenOut","amountIn","primaryAddress"]},"TokenizedSingleDepositActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol","example":"yearn"},"action":{"type":"string","example":"tokenizedsingledeposit"},"args":{"$ref":"#/components/schemas/TokenizedSingleDepositArgsDto"}},"required":["protocol","action","args"]},"TokenizedMultiDepositArgsDto":{"type":"object","properties":{"onBehalfOf":{"type":"string","description":"Address that will own the resulting protocol position","example":"0x..."},"args":{"type":"object","description":"Protocol-specific additional action arguments","additionalProperties":{"type":"string"}},"tokenIn":{"description":"Input token addresses","example":["0x...","0x..."],"type":"array","items":{"type":"string"}},"tokenOut":{"type":"string","description":"Output token address","example":"0x..."},"amountIn":{"type":"array","description":"Amounts to deposit (or previous output references)","items":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/CallOutput"}]},"example":["100",{"useOutputOfCallAt":0}]},"primaryAddress":{"type":"string","description":"Primary contract address","example":"0x..."},"receiver":{"type":"string","description":"Receiver address","example":"0x..."}},"required":["tokenIn","tokenOut","amountIn","primaryAddress"]},"TokenizedMultiDepositActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol","example":"yearn"},"action":{"type":"string","example":"tokenizedmultideposit"},"args":{"$ref":"#/components/schemas/TokenizedMultiDepositArgsDto"}},"required":["protocol","action","args"]},"TokenizedSingleRedeemArgsDto":{"type":"object","properties":{"onBehalfOf":{"type":"string","description":"Address that will own the resulting protocol position","example":"0x..."},"args":{"type":"object","description":"Protocol-specific additional action arguments","additionalProperties":{"type":"string"}},"tokenIn":{"type":"string","description":"Input token address","example":"0x..."},"tokenOut":{"type":"string","description":"Output token address","example":"0x..."},"amountIn":{"description":"Amount to redeem (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"1000000"},"primaryAddress":{"type":"string","description":"Primary contract address","example":"0x..."},"receiver":{"type":"string","description":"Receiver address","example":"0x..."}},"required":["tokenIn","tokenOut","amountIn","primaryAddress"]},"TokenizedSingleRedeemActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol","example":"yearn"},"action":{"type":"string","example":"tokenizedsingleredeem"},"args":{"$ref":"#/components/schemas/TokenizedSingleRedeemArgsDto"}},"required":["protocol","action","args"]},"TokenizedMultiRedeemArgsDto":{"type":"object","properties":{"onBehalfOf":{"type":"string","description":"Address that will own the resulting protocol position","example":"0x..."},"args":{"type":"object","description":"Protocol-specific additional action arguments","additionalProperties":{"type":"string"}},"tokenIn":{"type":"string","description":"Input token address","example":"0x..."},"tokenOut":{"description":"Output token addresses","example":["0x...","0x..."],"type":"array","items":{"type":"string"}},"amountIn":{"description":"Amount to redeem (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"1000000"},"primaryAddress":{"type":"string","description":"Primary contract address","example":"0x..."},"receiver":{"type":"string","description":"Receiver address","example":"0x..."}},"required":["tokenIn","tokenOut","amountIn","primaryAddress"]},"TokenizedMultiRedeemActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol","example":"yearn"},"action":{"type":"string","example":"tokenizedmultiredeem"},"args":{"$ref":"#/components/schemas/TokenizedMultiRedeemArgsDto"}},"required":["protocol","action","args"]},"MultiOutSingleDepositArgsDto":{"type":"object","properties":{"onBehalfOf":{"type":"string","description":"Address that will own the resulting protocol position","example":"0x..."},"args":{"type":"object","description":"Protocol-specific additional action arguments","additionalProperties":{"type":"string"}},"tokenIn":{"type":"string","description":"Input token address","example":"0x..."},"tokenOut":{"description":"Output token addresses","example":["0x...","0x..."],"type":"array","items":{"type":"string"}},"amountIn":{"description":"Amount to deposit (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"1000000"},"primaryAddress":{"type":"string","description":"Primary contract address","example":"0x..."},"receiver":{"type":"string","description":"Receiver address","example":"0x..."}},"required":["tokenIn","tokenOut","amountIn","primaryAddress"]},"MultiOutSingleDepositActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol","example":"balancer"},"action":{"type":"string","example":"multioutsingledeposit"},"args":{"$ref":"#/components/schemas/MultiOutSingleDepositArgsDto"}},"required":["protocol","action","args"]},"TransferArgsDto":{"type":"object","properties":{"token":{"type":"string","description":"Token address","example":"0xA0b8...eB48"},"amount":{"description":"Amount to transfer (or previous output reference). Required for erc20.","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"1000000"},"receiver":{"type":"string","description":"Receiver address","example":"0x..."},"tokenId":{"type":"string","description":"ERC721 token id. Required for erc721; ignored otherwise.","example":"123"}},"required":["token","receiver"]},"TransferActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol","example":"erc20"},"action":{"type":"string","example":"transfer"},"args":{"$ref":"#/components/schemas/TransferArgsDto"}},"required":["protocol","action","args"]},"TransferFromArgsDto":{"type":"object","properties":{"token":{"type":"string","description":"Token address","example":"0xA0b8...eB48"},"sender":{"type":"string","description":"Sender address. Required for erc20; optional for erc721 (defaults to the executing wallet).","example":"0x..."},"receiver":{"type":"string","description":"Receiver address","example":"0x..."},"amount":{"description":"Amount to transfer (or previous output reference). Required for erc20.","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"1000000"},"tokenId":{"type":"string","description":"ERC721 token id. Required for erc721; ignored otherwise.","example":"123"}},"required":["token","receiver"]},"TransferFromActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol","example":"erc20","enum":["erc20","erc721"]},"action":{"type":"string","example":"transferfrom"},"args":{"$ref":"#/components/schemas/TransferFromArgsDto"}},"required":["protocol","action","args"]},"PermitTransferFromArgsDto":{"type":"object","properties":{"token":{"description":"Token(s) to transfer","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"example":["0x..."]},"amount":{"description":"Amount(s) (or previous output references)","oneOf":[{"type":"string"},{"$ref":"#/components/schemas/CallOutput"},{"type":"array","items":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/CallOutput"}]}}],"example":["1000000"]},"sender":{"type":"string","description":"Sender address","example":"0x..."},"receiver":{"type":"string","description":"Receiver address","example":"0x..."},"nonce":{"type":"string","description":"Nonce for signature replay protection","example":"1"},"deadline":{"type":"string","description":"Deadline timestamp","example":"1699999999"},"signature":{"type":"string","description":"EIP-2612 permit signature","example":"0x..."}},"required":["token","amount","sender","receiver","nonce","deadline","signature"]},"PermitTransferFromActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol","example":"erc20"},"action":{"type":"string","example":"permittransferfrom"},"args":{"$ref":"#/components/schemas/PermitTransferFromArgsDto"}},"required":["protocol","action","args"]},"SingleDepositArgsDto":{"type":"object","properties":{"onBehalfOf":{"type":"string","description":"Address that will own the resulting protocol position","example":"0x..."},"args":{"type":"object","description":"Protocol-specific additional action arguments","additionalProperties":{"type":"string"}},"tokenIn":{"type":"string","description":"Input token","example":"0x..."},"tokenOut":{"type":"string","description":"Output token","example":"0x..."},"amountIn":{"description":"Amount (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"1000000"},"primaryAddress":{"type":"string","description":"Primary contract","example":"0x..."},"receiver":{"type":"string","description":"Receiver address","example":"0x..."}},"required":["tokenIn","amountIn","primaryAddress"]},"SingleDepositActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol","example":"yearn"},"action":{"type":"string","example":"singledeposit"},"args":{"$ref":"#/components/schemas/SingleDepositArgsDto"}},"required":["protocol","action","args"]},"MultiDepositArgsDto":{"type":"object","properties":{"onBehalfOf":{"type":"string","description":"Address that will own the resulting protocol position","example":"0x..."},"args":{"type":"object","description":"Protocol-specific additional action arguments","additionalProperties":{"type":"string"}},"tokenIn":{"description":"Input tokens","example":["0x...","0x..."],"type":"array","items":{"type":"string"}},"tokenOut":{"type":"string","description":"Output token","example":"0x..."},"amountIn":{"type":"array","description":"Amounts (or previous output references)","items":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/CallOutput"}]},"example":["100",{"useOutputOfCallAt":0}]},"primaryAddress":{"type":"string","description":"Primary contract","example":"0x..."},"receiver":{"type":"string","description":"Receiver address","example":"0x..."}},"required":["tokenIn","amountIn","primaryAddress"]},"MultiDepositActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol","example":"yearn"},"action":{"type":"string","example":"multideposit"},"args":{"$ref":"#/components/schemas/MultiDepositArgsDto"}},"required":["protocol","action","args"]},"SingleRedeemArgs2Dto":{"type":"object","properties":{"onBehalfOf":{"type":"string","description":"Address that will own the resulting protocol position","example":"0x..."},"args":{"type":"object","description":"Protocol-specific additional action arguments","additionalProperties":{"type":"string"}},"tokenIn":{"type":"string","description":"Input token","example":"0x..."},"tokenOut":{"type":"string","description":"Output token","example":"0x..."},"amountIn":{"description":"Amount (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"1000000"},"primaryAddress":{"type":"string","description":"Primary contract","example":"0x..."},"receiver":{"type":"string","description":"Receiver address","example":"0x..."}},"required":["tokenOut","amountIn","primaryAddress"]},"SingleRedeemActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol","example":"yearn"},"action":{"type":"string","example":"singleredeem"},"args":{"$ref":"#/components/schemas/SingleRedeemArgs2Dto"}},"required":["protocol","action","args"]},"MultiRedeemArgs2Dto":{"type":"object","properties":{"onBehalfOf":{"type":"string","description":"Address that will own the resulting protocol position","example":"0x..."},"args":{"type":"object","description":"Protocol-specific additional action arguments","additionalProperties":{"type":"string"}},"tokenIn":{"type":"string","description":"Input token","example":"0x..."},"tokenOut":{"description":"Output tokens","example":["0x...","0x..."],"type":"array","items":{"type":"string"}},"amountIn":{"description":"Amount (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"1000000"},"primaryAddress":{"type":"string","description":"Primary contract","example":"0x..."},"receiver":{"type":"string","description":"Receiver address","example":"0x..."}},"required":["tokenOut","amountIn","primaryAddress"]},"MultiRedeemActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol","example":"yearn"},"action":{"type":"string","example":"multiredeem"},"args":{"$ref":"#/components/schemas/MultiRedeemArgs2Dto"}},"required":["protocol","action","args"]},"SwapArgsDto":{"type":"object","properties":{"tokenIn":{"type":"string","description":"Input token address","example":"0xC02a..."},"tokenOut":{"type":"string","description":"Output token address","example":"0xA0b8...eB48"},"amountIn":{"description":"Amount to swap (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"1000000000000000000"},"primaryAddress":{"type":"string","description":"Router or pool contract address","example":"0x7a25..."},"receiver":{"type":"string","description":"Receiver address","example":"0xd8da6bf..."},"slippage":{"type":"string","description":"Slippage in basis points","example":"100"},"poolFee":{"type":"string","description":"Pool fee in basis points","example":"3000"},"tickSpacing":{"type":"string","description":"Tick spacing for concentrated liquidity pools","example":"60"},"hooks":{"type":"string","description":"Hook contract address","example":"0x..."},"poolId":{"type":"string","description":"Pool identifier (if protocol-specific)","example":"0x..."},"salt":{"type":"string","description":"Protocol-specific pool salt","example":"0x..."},"path":{"description":"Token path for multi-hop protocol swaps","example":["0x...","0x..."],"type":"array","items":{"type":"string"}},"args":{"type":"object","description":"Protocol-specific additional swap arguments","additionalProperties":{"type":"string"}}},"required":["tokenIn","tokenOut","amountIn","primaryAddress"]},"SwapActionDto":{"type":"object","properties":{"protocol":{"type":"string","description":"Protocol","example":"uniswap-v2"},"action":{"type":"string","example":"swap"},"args":{"$ref":"#/components/schemas/SwapArgsDto"}},"required":["protocol","action","args"]},"CctpBridgeProtocolArgsDto":{"type":"object","properties":{"transferType":{"type":"string","description":"CCTP only. Preferred finality threshold. \"fast\" requires Circle-designated fast-source support; falls back to \"standard\" silently when unavailable.","enum":["fast","standard"],"example":"fast"},"forwardFee":{"type":"string","description":"CCTP only. Forwarding Service fee bracket (destination-chain gas buffer). Applies to all CCTP transfers — Forwarding is always used to guarantee destination execution. Defaults to `med`. Pass `high` for more headroom against fee drift between quote and forward execution, or `low` to trade delivery headroom for a better quote. An under-budgeted maxFee can strand the transfer until Circle re-attempts.","enum":["low","med","high"],"default":"med","example":"med"},"isHyperCoreTransfer":{"type":"boolean","description":"CCTP HyperCore only. When true, the CCTP burn delivers USDC into HyperCore via Circle's CctpForwarder instead of minting at `receiver` on HyperEVM. Requires `destinationChainId = 999` (HyperEVM) and a source chain other than HyperEVM. Most consumers should NOT set this directly — use the `callback: [enso:balance, hypercore-spot:deposit]` shape, or rely on `/route/nontokenized` with `positionOut = 0x2000…0000` to set it automatically.","example":true}}},"BridgeArgsDto":{"type":"object","properties":{"tokenIn":{"type":"string","description":"Input token address","example":"0xC02a..."},"amountIn":{"description":"Amount to bridge (or previous output reference)","oneOf":[{"type":"string","description":"Literal string value (e.g. wei amount)"},{"$ref":"#/components/schemas/CallOutput","description":"Reference output from a previous action"}],"example":"1000000000000000000"},"primaryAddress":{"type":"string","description":"Bridging protocol contract address","example":"0x..."},"destinationChainId":{"type":"number","description":"Destination chain id","example":10},"receiver":{"type":"string","description":"Receiver address on destination chain","example":"0x..."},"callback":{"type":"array","description":"Optional callback bundle on destination chain (MUST start with balance action)","items":{"oneOf":[{"$ref":"#/components/schemas/RouteActionDto"},{"$ref":"#/components/schemas/SwapActionDto"},{"$ref":"#/components/schemas/BridgeActionDto"},{"$ref":"#/components/schemas/BalanceActionDto"},{"$ref":"#/components/schemas/ApproveActionDto"},{"$ref":"#/components/schemas/TransferActionDto"},{"$ref":"#/components/schemas/TransferFromActionDto"},{"$ref":"#/components/schemas/PermitTransferFromActionDto"},{"$ref":"#/components/schemas/DepositActionDto"},{"$ref":"#/components/schemas/RedeemActionDto"},{"$ref":"#/components/schemas/DepositCLMMActionDto"},{"$ref":"#/components/schemas/RedeemCLMMActionDto"},{"$ref":"#/components/schemas/TokenizedSingleDepositActionDto"},{"$ref":"#/components/schemas/TokenizedMultiDepositActionDto"},{"$ref":"#/components/schemas/TokenizedSingleRedeemActionDto"},{"$ref":"#/components/schemas/TokenizedMultiRedeemActionDto"},{"$ref":"#/components/schemas/MultiOutSingleDepositActionDto"},{"$ref":"#/components/schemas/CallActionDto"},{"$ref":"#/components/schemas/FlashloanActionDto"},{"$ref":"#/components/schemas/WithdrawActionDto"},{"$ref":"#/components/schemas/SplitActionDto"},{"$ref":"#/components/schemas/MergeActionDto"},{"$ref":"#/components/schemas/MinAmountOutActionDto"},{"$ref":"#/components/schemas/SlippageActionDto"},{"$ref":"#/components/schemas/FeeActionDto"},{"$ref":"#/components/schemas/EnsoFeeActionDto"},{"$ref":"#/components/schemas/PaymasterFeeActionDto"},{"$ref":"#/components/schemas/RepayActionDto"},{"$ref":"#/components/schemas/BorrowActionDto"},{"$ref":"#/components/schemas/HarvestActionDto"},{"$ref":"#/components/schemas/SingleDepositActionDto"},{"$ref":"#/components/schemas/MultiDepositActionDto"},{"$ref":"#/components/schemas/SingleRedeemActionDto"},{"$ref":"#/components/schemas/MultiRedeemActionDto"},{"$ref":"#/components/schemas/MathActionDto"},{"$ref":"#/components/schemas/ComparisonActionDto"},{"$ref":"#/components/schemas/ConditionActionDto"},{"$ref":"#/components/schemas/ToggleActionDto"}],"discriminator":{"propertyName":"action","mapping":{"route":"#/components/schemas/RouteActionDto","swap":"#/components/schemas/SwapActionDto","bridge":"#/components/schemas/BridgeActionDto","balance":"#/components/schemas/BalanceActionDto","approve":"#/components/schemas/ApproveActionDto","transfer":"#/components/schemas/TransferActionDto","transferfrom":"#/components/schemas/TransferFromActionDto","permittransferfrom":"#/components/schemas/PermitTransferFromActionDto","deposit":"#/components/schemas/DepositActionDto","redeem":"#/components/schemas/RedeemActionDto","depositclmm":"#/components/schemas/DepositCLMMActionDto","redeemclmm":"#/components/schemas/RedeemCLMMActionDto","tokenizedsingledeposit":"#/components/schemas/TokenizedSingleDepositActionDto","tokenizedmultideposit":"#/components/schemas/TokenizedMultiDepositActionDto","tokenizedsingleredeem":"#/components/schemas/TokenizedSingleRedeemActionDto","tokenizedmultiredeem":"#/components/schemas/TokenizedMultiRedeemActionDto","multioutsingledeposit":"#/components/schemas/MultiOutSingleDepositActionDto","call":"#/components/schemas/CallActionDto","flashloan":"#/components/schemas/FlashloanActionDto","withdraw":"#/components/schemas/WithdrawActionDto","singlewithdraw":"#/components/schemas/WithdrawActionDto","singlewithdrawwithpositionid":"#/components/schemas/WithdrawActionDto","multiwithdraw":"#/components/schemas/WithdrawActionDto","split":"#/components/schemas/SplitActionDto","merge":"#/components/schemas/MergeActionDto","minamountout":"#/components/schemas/MinAmountOutActionDto","slippage":"#/components/schemas/SlippageActionDto","fee":"#/components/schemas/FeeActionDto","ensofee":"#/components/schemas/EnsoFeeActionDto","paymasterfee":"#/components/schemas/PaymasterFeeActionDto","repay":"#/components/schemas/RepayActionDto","borrow":"#/components/schemas/BorrowActionDto","harvest":"#/components/schemas/HarvestActionDto","singledeposit":"#/components/schemas/SingleDepositActionDto","multideposit":"#/components/schemas/MultiDepositActionDto","singleredeem":"#/components/schemas/SingleRedeemActionDto","multiredeem":"#/components/schemas/MultiRedeemActionDto","add":"#/components/schemas/MathActionDto","sub":"#/components/schemas/MathActionDto","mul":"#/components/schemas/MathActionDto","div":"#/components/schemas/MathActionDto","min":"#/components/schemas/MathActionDto","max":"#/components/schemas/MathActionDto","isequal":"#/components/schemas/ComparisonActionDto","islessthan":"#/components/schemas/ComparisonActionDto","isequalorlessthan":"#/components/schemas/ComparisonActionDto","isgreaterthan":"#/components/schemas/ComparisonActionDto","isequalorgreaterthan":"#/components/schemas/ComparisonActionDto","not":"#/components/schemas/ConditionActionDto","check":"#/components/schemas/ConditionActionDto","toggle":"#/components/schemas/ToggleActionDto"}}}},"protocolArgs":{"description":"Protocol-specific bridge args nested under a single field.","allOf":[{"$ref":"#/components/schemas/CctpBridgeProtocolArgsDto"}]}},"required":["tokenIn","amountIn","primaryAddress","destinationChainId","receiver"]},"BridgeActionDto":{"type":"object","properties":{"action":{"type":"string","description":"Action","example":"bridge"},"protocol":{"type":"string","description":"Protocol to use for bridging","enum":["cctp","stargate","ccip","relay","layerzero-teller","arbitrum-native","mayan"],"example":"stargate"},"args":{"$ref":"#/components/schemas/BridgeArgsDto"}},"required":["action","protocol","args"]},"QuoteEndpointResponse":{"type":"object","properties":{"amountOut":{"type":"string"},"priceImpact":{"type":"number","description":"Price impact in basis points, null if USD price not found","nullable":true},"route":{"description":"The route selected for the quote","type":"array","items":{"$ref":"#/components/schemas/Hop"}},"feeAmount":{"description":"An array of the fee amount collected for each tokenIn","type":"array","items":{"type":"string"}},"ensoFeeAmount":{"type":"array","items":{"type":"string"}}},"required":["amountOut","route"]},"NonTokenizedModel":{"type":"object","properties":{"chainId":{"type":"number","description":"Chain ID of the network of the nontokenized position"},"project":{"type":"string","description":"The project associated with the nontokenized position"},"protocol":{"type":"string","description":"The specific standard integration or version of the nontokenized position"},"address":{"type":"string","description":"Ethereum address of the nontokenized position"},"positionId":{"type":"string","description":"Opaque position identifier of the nontokenized position"},"primaryAddress":{"type":"string","description":"Ethereum address of the nontokenized position"},"name":{"type":"string","description":"Name of the nontokenized position"},"logosUri":{"type":"string","description":"Logo of the nontokenized position"},"underlyingTokens":{"description":"Underlying tokens of nontokenized position","nullable":true,"type":"array","items":{"$ref":"#/components/schemas/TokenModel"}}},"required":["chainId","project","protocol","address","positionId","primaryAddress"]},"Project":{"type":"object","properties":{"id":{"type":"string"},"chains":{"type":"array","items":{"type":"number"}},"protocols":{"type":"array","items":{"type":"string"}}},"required":["id","protocols"]},"CcipEvmTokenAmount":{"type":"object","properties":{"token":{"type":"string"},"amount":{"type":"string"}},"required":["token","amount"]},"CcipEvm2AnyMessage":{"type":"object","properties":{"receiver":{"type":"string"},"tokenAmounts":{"type":"array","items":{"$ref":"#/components/schemas/CcipEvmTokenAmount"}},"feeToken":{"type":"string"}},"required":["receiver","tokenAmounts","feeToken"]},"DecodedValidationError":{"type":"object","properties":{"errorCodeName":{"type":"string","description":"Human-readable error code name from EnsoCCIPReceiver","example":"MALFORMED_MESSAGE_DATA"},"errorDescription":{"type":"string","description":"Human-readable description of what went wrong","example":"Message payload could not be decoded as (address receiver, bytes shortcutData)"},"refundKind":{"type":"string","description":"Expected refund policy based on error code (NONE, TO_RECEIVER, TO_ESCROW)","example":"TO_ESCROW"},"refundKindDescription":{"type":"string","description":"Human-readable description of the refund outcome","example":"Tokens were quarantined in the EnsoCCIPReceiver contract for manual recovery"}},"required":["errorCodeName","errorDescription","refundKind","refundKindDescription"]},"MessageValidationFailedError":{"type":"object","properties":{"reason":{"type":"string","description":"Error reason - indicates CCIP message validation failed at the receiver","example":"MessageValidationFailed"},"messageId":{"type":"string","description":"CCIP message ID that failed validation","example":"0x9a3e6a8a52b82a1f4b523b0d50be133df0ad9407814b32e42d67119e1ae1947d"},"errorCode":{"type":"number","description":"Validation error code from EnsoCCIPReceiver contract","example":5},"errorData":{"type":"string","description":"Additional error data in hex format","example":"0x"},"decoded":{"description":"Human-readable decoded error information","allOf":[{"$ref":"#/components/schemas/DecodedValidationError"}]}},"required":["reason","messageId","errorCode","errorData","decoded"]},"ShortcutExecutionFailedError":{"type":"object","properties":{"reason":{"type":"string","description":"Error reason - indicates shortcut execution failed","example":"ShortcutExecutionFailed"},"messageId":{"type":"string","description":"CCIP message ID for the failed execution","example":"0x9a3e6a8a52b82a1f4b523b0d50be133df0ad9407814b32e42d67119e1ae1947d"},"error":{"type":"string","description":"Error details from the failed shortcut execution","example":"0x08c379a0000000000000000000000000..."}},"required":["reason","messageId","error"]},"CcipRouterResponse":{"type":"object","properties":{"router":{"type":"string","description":"CCIP router contract address for the specified chain","example":"0x141fa059441E0ca23ce184B6A78bafD2A517DdE8"}},"required":["router"]},"CcipSendParams":{"type":"object","properties":{"destinationChainSelector":{"type":"string","description":"Destination chain selector (CCIP format, not Enso ChainId). See https://docs.chain.link/ccip/supported-networks","example":"15971525489660198786"},"message":{"description":"CCIP message parameters (Client.EVM2AnyMessage structure with receiver, tokenAmounts and feeToken; the raw data/extraArgs bytes are not echoed — read them from the source transaction on chain)","allOf":[{"$ref":"#/components/schemas/CcipEvm2AnyMessage"}]}},"required":["destinationChainSelector","message"]},"DecodedMessageData":{"type":"object","properties":{"receiver":{"type":"string","description":"Receiver address extracted from CCIP message data","example":"0x1234567890123456789012345678901234567890"},"error":{"type":"string","description":"Error message if message.data could not be decoded as (address,bytes)","example":"Could not decode message.data as (address,bytes)"}},"required":["receiver"]},"TokenInfo":{"type":"object","properties":{"address":{"type":"string","description":"Token contract address","example":"0x55d398326f99059fF775485246999027B3197955"},"symbol":{"type":"string","description":"Token symbol (e.g., USDT, USDC)","example":"USDT"},"name":{"type":"string","description":"Token full name","example":"Tether USD"},"decimals":{"type":"number","description":"Token decimals","example":18}},"required":["address"]},"TokenAmount":{"type":"object","properties":{"token":{"description":"Token information","allOf":[{"$ref":"#/components/schemas/TokenInfo"}]},"amount":{"type":"string","description":"Token amount (in wei/smallest unit)","example":"1000000000000000000"}},"required":["token","amount"]},"FeeDetails":{"type":"object","properties":{"token":{"description":"Fee token information","allOf":[{"$ref":"#/components/schemas/TokenInfo"}]},"amount":{"type":"string","description":"Fee amount paid for CCIP message (in wei/smallest unit)","example":"5000000000000000"}},"required":["token","amount"]},"ExtraArgs":{"type":"object","properties":{"gasLimit":{"type":"string","description":"Gas limit allocated for shortcut execution on destination chain","example":"2000000"},"allowOutOfOrderExecution":{"type":"boolean","description":"Whether CCIP can execute this message out of order (true = allow)","example":false}},"required":["gasLimit","allowOutOfOrderExecution"]},"CcipSendParamsDecoded":{"type":"object","properties":{"destinationChainId":{"type":"number","description":"Destination chain ID","example":8453},"data":{"description":"Decoded message data containing receiver address and shortcut execution data","allOf":[{"$ref":"#/components/schemas/DecodedMessageData"}]},"tokenAmounts":{"description":"Token amounts being transferred cross-chain with full token metadata","type":"array","items":{"$ref":"#/components/schemas/TokenAmount"}},"fee":{"description":"CCIP fee details with token information","allOf":[{"$ref":"#/components/schemas/FeeDetails"}]},"extraArgs":{"description":"CCIP extra arguments (gas limit and execution order preferences)","allOf":[{"$ref":"#/components/schemas/ExtraArgs"}]}}},"CcipBridgeTransactionResponse":{"type":"object","properties":{"sourceChainId":{"type":"number","description":"Source chain ID where the CCIP message was sent from","example":56},"sourceTxHash":{"type":"string","description":"Source chain transaction hash","example":"0x80f1faf0652a5618ea1de0fc5142418e380676b3c6c74d482cfac1237638d6d4"},"sourceChainIdFinality":{"type":"number","description":"CCIP finality time in seconds for the source chain (time required for CCIP to achieve finality)","example":5},"sourceChainEstimatedTimeForFinalitySeconds":{"type":"number","description":"Estimated seconds remaining until source chain finality is achieved","example":0},"ccipSendParams":{"description":"Raw CCIP send parameters extracted from Chainlink API (destinationChainSelector and message)","allOf":[{"$ref":"#/components/schemas/CcipSendParams"}]},"ccipSendParamsDecoded":{"description":"Decoded and enriched CCIP send parameters with full token metadata and human-readable data","allOf":[{"$ref":"#/components/schemas/CcipSendParamsDecoded"}]},"destinationChainId":{"type":"number","description":"Destination chain ID where the CCIP message was delivered","example":8453},"destinationTxHash":{"type":"string","description":"Destination chain transaction hash (if message was delivered)","example":"0x9a3e6a8a52b82a1f4b523b0d50be133df0ad9407814b32e42d67119e1ae1947d"},"status":{"type":"string","description":"Overall bridge status. `ready_for_manual_execution` means destination execution failed/stalled but is recoverable — anyone can (re)trigger manual execution once the underlying cause is resolved.","enum":["pending","inflight","delivered","failed","ready_for_manual_execution","unknown"]},"readyForManualExecution":{"type":"boolean","description":"True if the CCIP message is awaiting (or can be retried via) manual execution on the destination chain. A failed message that is ready for manual execution can be re-triggered by anyone once the underlying cause (e.g. token pool liquidity) is resolved.","example":true},"ensoSourceEvent":{"description":"Enso shortcut event from source chain (ShortcutExecuted + execution result). Null if not found.","nullable":true,"allOf":[{"$ref":"#/components/schemas/EnsoEvent"}]},"ensoDestinationEvent":{"description":"Enso shortcut event from destination chain (ShortcutExecuted + execution result). Null if not found. On an intent route this is read from the keeper's execution transaction (destinationExecutionTxHash), not from the bridge delivery.","nullable":true,"allOf":[{"$ref":"#/components/schemas/EnsoEvent"}]},"intent":{"description":"Present when the source transaction published a cross-chain intent: this bridge only delivers funds to the intent's ephemeral executor, and a keeper then executes the intent (or refunds it past its deadline) in a separate destination transaction. `status: delivered` means the bridge delivered the funds to the executor; the execution itself is reported here (phase, keeper status, execution / repayment transactions).","allOf":[{"$ref":"#/components/schemas/BridgeRouteIntent"}]},"destinationExecutionTxHash":{"type":"string","description":"The keeper's intent execution transaction on the destination chain, once executed - the transaction that performed the Enso swap. destinationTxHash is only the bridge delivery that funded the executor."},"error":{"type":"string","description":"Error message if the API request failed (e.g., transaction not found, invalid chain selector, API errors)","example":"Transaction receipt not found for 0x..."}},"required":["sourceChainId","sourceTxHash","sourceChainIdFinality","status"]},"RelayTx":{"type":"object","properties":{"hash":{"type":"string","description":"Transaction hash","example":"0x80f1faf0652a5618ea1de0fc5142418e380676b3c6c74d482cfac1237638d6d4"},"chainId":{"type":"number","description":"Chain ID","example":8453},"block":{"type":"number","description":"Block number","example":12345678},"timestamp":{"type":"number","description":"Transaction timestamp (unix seconds)","example":1700000000},"status":{"type":"string","description":"Transaction status","example":"success"}},"required":["hash","chainId"]},"RelayCurrencyInfo":{"type":"object","properties":{"chainId":{"type":"number","description":"Chain ID of the currency","example":1},"address":{"type":"string","description":"Token contract address","example":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},"symbol":{"type":"string","description":"Token symbol","example":"USDC"},"name":{"type":"string","description":"Token name","example":"USD Coin"},"decimals":{"type":"number","description":"Token decimals","example":6}},"required":["chainId","address","symbol","name","decimals"]},"RelayFees":{"type":"object","properties":{"gas":{"type":"string","description":"Estimated gas cost in wei","example":"50000000000000"},"fixed":{"type":"string","description":"Fixed fee in wei","example":"0"},"price":{"type":"string","description":"Dynamic fee from chain and amount in wei","example":"100000"},"gateway":{"type":"string","description":"Fee taken by API gateway in wei","example":"0"}},"required":["gas","fixed","price"]},"RelayRequestData":{"type":"object","properties":{"status":{"type":"string","description":"Relay request status","example":"success","enum":["success","failure","refund","pending","depositing","waiting"]},"user":{"type":"string","description":"User address that initiated the bridge","example":"0x1234567890123456789012345678901234567890"},"recipient":{"type":"string","description":"Recipient address on destination chain","example":"0x1234567890123456789012345678901234567890"},"inTxs":{"description":"Source chain transactions","type":"array","items":{"$ref":"#/components/schemas/RelayTx"}},"outTxs":{"description":"Destination chain transactions","type":"array","items":{"$ref":"#/components/schemas/RelayTx"}},"currency":{"description":"Currency being bridged","allOf":[{"$ref":"#/components/schemas/RelayCurrencyInfo"}]},"fees":{"description":"Fee breakdown in wei","allOf":[{"$ref":"#/components/schemas/RelayFees"}]},"feesUsd":{"description":"Fee breakdown in USD","allOf":[{"$ref":"#/components/schemas/RelayFees"}]},"failReason":{"type":"string","description":"Reason for failure if the bridge failed","example":"EXECUTION_REVERTED"},"createdAt":{"type":"string","description":"When the relay request was created","example":"2024-01-15T12:00:00Z"},"updatedAt":{"type":"string","description":"When the relay request was last updated","example":"2024-01-15T12:05:00Z"}},"required":["status"]},"RelayBridgeTransactionResponse":{"type":"object","properties":{"sourceChainId":{"type":"number","description":"Source chain ID where the Relay message was sent from","example":1},"sourceTxHash":{"type":"string","description":"Source chain transaction hash","example":"0x80f1faf0652a5618ea1de0fc5142418e380676b3c6c74d482cfac1237638d6d4"},"destinationChainId":{"type":"number","description":"Destination chain ID where the Relay message was delivered","example":8453},"destinationTxHash":{"type":"string","description":"Destination chain transaction hash (if message was delivered)","example":"0x9a3e6a8a52b82a1f4b523b0d50be133df0ad9407814b32e42d67119e1ae1947d"},"refundChainId":{"type":"number","description":"Chain the funds were refunded on — the origin chain — present when the request was refunded instead of delivered. destinationChainId then names the intended destination and destinationTxHash is absent (nothing arrived there).","example":42161},"refundTxHash":{"type":"string","description":"The refund payout transaction, present when the request was refunded instead of delivered"},"status":{"type":"string","description":"Overall bridge status","enum":["pending","inflight","delivered","failed","unknown"]},"relayRequest":{"description":"Relay API request data with fee breakdown and status details","allOf":[{"$ref":"#/components/schemas/RelayRequestData"}]},"ensoSourceEvent":{"description":"Enso shortcut event from source chain (ShortcutExecuted + execution result). Null if not found.","nullable":true,"allOf":[{"$ref":"#/components/schemas/EnsoEvent"}]},"ensoDestinationEvent":{"description":"Enso shortcut event from destination chain (ShortcutExecuted + execution result). Null if not found. On an intent route this is read from the keeper's execution transaction (destinationExecutionTxHash), not from the bridge delivery.","nullable":true,"allOf":[{"$ref":"#/components/schemas/EnsoEvent"}]},"intent":{"description":"Present when the source transaction published a cross-chain intent: this bridge only delivers funds to the intent's ephemeral executor, and a keeper then executes the intent (or refunds it past its deadline) in a separate destination transaction. `status: delivered` means the bridge delivered the funds to the executor; the execution itself is reported here (phase, keeper status, execution / repayment transactions).","allOf":[{"$ref":"#/components/schemas/BridgeRouteIntent"}]},"destinationExecutionTxHash":{"type":"string","description":"The keeper's intent execution transaction on the destination chain, once executed - the transaction that performed the Enso swap. destinationTxHash is only the bridge delivery that funded the executor."},"error":{"type":"string","description":"Error message if the API request failed (e.g., transaction not found, API errors)","example":"Transaction receipt not found for 0x..."}},"required":["sourceChainId","sourceTxHash","status"]},"ArbitrumNativeBridgeTransactionResponse":{"type":"object","properties":{"sourceChainId":{"type":"number","description":"Parent chain ID the deposit was sent from","example":1},"sourceTxHash":{"type":"string","description":"Parent chain deposit transaction hash","example":"0x2825fed33798922dbb5a3f6bf513e0def70dcde0b79b7b5e0c1b356df335f404"},"destinationChainId":{"type":"number","description":"Child chain ID the deposit is delivered to","example":42161},"retryableTicketId":{"type":"string","description":"Retryable ticket ID, which is also the hash of the ticket creation transaction on the child chain","example":"0x24e5ec485567db136596b2202d293b5600daf679c1f18a0e329dcce62119e62a"},"destinationTxHash":{"type":"string","description":"Child chain redeem transaction that delivered the deposit (present when delivered)","example":"0xb0ca3eff46342b81e82bf7352e20db07204c13f19e690b90948b0377f6465f3e"},"ticketExpiresAt":{"type":"number","description":"Unix timestamp at which the unredeemed ticket expires (present when ready_for_manual_execution)","example":1790000000},"status":{"type":"string","description":"Overall bridge status. `ready_for_manual_execution` means the automatic redeem on the child chain failed; anyone can redeem the ticket manually before it expires.","enum":["pending","inflight","delivered","failed","ready_for_manual_execution","unknown"]},"error":{"type":"string","description":"Error message when the status could not be determined","example":"Transaction receipt not found for 0x..."}},"required":["sourceChainId","sourceTxHash","status"]},"MayanBridgeTransactionResponse":{"type":"object","properties":{"sourceChainId":{"type":"number","description":"Chain ID of the source transaction","example":8453},"sourceTxHash":{"type":"string","description":"Source transaction hash","example":"0x0bf1b6817c4c085c40cafe329fa451a0d0875258f3715b0ee8e4b5a7f005fbe7"},"orderHash":{"type":"string","description":"Swift order hash"},"destinationChainId":{"type":"number","description":"Destination chain ID of the order","example":56},"destinationTxHash":{"type":"string","description":"Destination transaction that fulfilled the order (present when delivered). A Solana signature for Solana destinations.","example":"0x9038c72fdb050784c7de4aba1f4c7fed85878cd1ee1d4f856ba46680874e4379"},"refundChainId":{"type":"number","description":"Chain the order was refunded on, which is the source chain. Present when the order was refunded instead of fulfilled. destinationChainId then names the intended destination.","example":8453},"refundTxHash":{"type":"string","description":"Refund transaction, present when the order was refunded instead of fulfilled"},"status":{"type":"string","description":"Overall bridge status","enum":["pending","inflight","delivered","failed","unknown"]},"mayanStatus":{"type":"string","description":"Order status reported by the Mayan explorer","example":"ORDER_SETTLED"},"intent":{"description":"Present when the source transaction published a cross-chain intent: Mayan only delivers funds to the intent's ephemeral executor, and a keeper then executes the intent (or refunds it past its deadline) in a separate destination transaction. `status: delivered` means the Swift order delivered the funds to the executor, the execution itself is reported here.","allOf":[{"$ref":"#/components/schemas/BridgeRouteIntent"}]},"destinationExecutionTxHash":{"type":"string","description":"The keeper's intent execution transaction on the destination chain, once executed. destinationTxHash is only the Swift fulfillment that funded the executor."},"ensoDestinationEvent":{"description":"Enso shortcut event from the keeper's intent execution transaction. Null if not found.","nullable":true,"allOf":[{"$ref":"#/components/schemas/EnsoEvent"}]},"error":{"type":"string","description":"Error message when the status could not be determined","example":"No Mayan Swift order found in transaction 0x..."}},"required":["sourceChainId","sourceTxHash","status"]},"ForwardingStatusInfo":{"type":"object","properties":{"state":{"type":"string","description":"Raw forward state reported by Circle's Forwarding Service (e.g. PENDING, COMPLETED, FAILED). Present only for forwarding-service transfers (incl. HyperCore deposits).","example":"FAILED"},"errorCode":{"type":"string","description":"Error code when the forward failed (e.g. INSUFFICIENT_FEE).","example":"INSUFFICIENT_FEE"},"errorDetails":{"type":"string","description":"Human-readable details when the forward failed.","example":"Fee provided insufficient for forwarding"},"txHash":{"type":"string","description":"Transaction hash of the forward (mint) transaction on the destination chain."}},"required":["state"]},"DepositForBurnParams":{"type":"object","properties":{"amount":{"type":"string","description":"Amount in token subunits","example":"100000"},"destinationDomain":{"type":"number","description":"CCTP destination domain ID","example":0},"mintRecipient":{"type":"string","description":"Mint recipient as bytes32","example":"0x00000000000000000000000042d023187acedd3306e3dce2f1b9e4a81d636503"},"burnToken":{"type":"string","description":"Burn token address on source chain","example":"0x754704bc059f8c67012fed69bc8a327a5aafb603"},"destinationCaller":{"type":"string","description":"Destination caller restriction (bytes32(0) = anyone)","example":"0x0000000000000000000000000000000000000000000000000000000000000000"},"maxFee":{"type":"string","description":"Maximum fee in token subunits","example":"0"},"minFinalityThreshold":{"type":"number","description":"Minimum finality threshold","example":1000}},"required":["amount","destinationDomain","mintRecipient","burnToken","destinationCaller","maxFee","minFinalityThreshold"]},"FinalityInfo":{"type":"object","properties":{"value":{"type":"number","description":"Raw finality threshold value","example":1000},"type":{"type":"string","description":"Transfer type: fast (<= 1000) or standard (>= 2000)","enum":["fast","standard"],"example":"fast"}},"required":["value","type"]},"DepositForBurnDecoded":{"type":"object","properties":{"burnToken":{"$ref":"#/components/schemas/TokenAmount"},"destinationChainId":{"type":"number","description":"Destination chain ID","example":1},"mintRecipient":{"type":"string","description":"Recipient address on destination chain (decoded from bytes32)","example":"0x42d023187acedd3306e3dce2f1b9e4a81d636503"},"destinationCaller":{"type":"string","description":"Destination caller as EVM address (decoded from bytes32)","example":"0x0000000000000000000000000000000000000000"},"maxFee":{"description":"Maximum fee with token info","allOf":[{"$ref":"#/components/schemas/TokenAmount"}]},"minFinalityThreshold":{"description":"Requested finality threshold and type","allOf":[{"$ref":"#/components/schemas/FinalityInfo"}]},"finalityThresholdExecuted":{"description":"Actual finality threshold executed by Circle (may differ from requested)","allOf":[{"$ref":"#/components/schemas/FinalityInfo"}]},"feeExecuted":{"description":"Actual fee deducted from minted amount, with token info","allOf":[{"$ref":"#/components/schemas/TokenAmount"}]}},"required":["burnToken","destinationChainId","mintRecipient","destinationCaller","maxFee","minFinalityThreshold"]},"DepositForBurnWithHookParams":{"type":"object","properties":{"amount":{"type":"string","description":"Amount in token subunits","example":"100000"},"destinationDomain":{"type":"number","description":"CCTP destination domain ID","example":0},"mintRecipient":{"type":"string","description":"Mint recipient as bytes32","example":"0x00000000000000000000000042d023187acedd3306e3dce2f1b9e4a81d636503"},"burnToken":{"type":"string","description":"Burn token address on source chain","example":"0x754704bc059f8c67012fed69bc8a327a5aafb603"},"destinationCaller":{"type":"string","description":"Destination caller restriction (bytes32(0) = anyone)","example":"0x0000000000000000000000000000000000000000000000000000000000000000"},"maxFee":{"type":"string","description":"Maximum fee in token subunits","example":"0"},"minFinalityThreshold":{"type":"number","description":"Minimum finality threshold","example":1000},"hookData":{"type":"string","description":"Raw hookData bytes","example":"0x636374702d666f72776172640000000000000000000000000000000000000000"}},"required":["amount","destinationDomain","mintRecipient","burnToken","destinationCaller","maxFee","minFinalityThreshold","hookData"]},"HookDataInfo":{"type":"object","properties":{"raw":{"type":"string","description":"Raw hookData bytes","example":"0x636374702d666f72776172640000000000000000000000000000000000000000"},"forwardingService":{"type":"boolean","description":"Whether the hookData payload matches Circle's Forwarding Service \"cctp-forward\" magic bytes.","example":true},"hyperCoreTransfer":{"type":"boolean","description":"True when the hookData is the 56-byte HyperCore forwarding payload (forwards the mint into HyperCore via the CctpForwarder).","example":true},"hyperCoreRecipient":{"type":"string","description":"HyperCore recipient decoded from the forwarding hookData (present for HyperCore transfers).","example":"0x42d023187acedd3306e3dce2f1b9e4a81d636503"},"hyperCoreDestinationDex":{"type":"number","description":"Raw destinationDex from the HyperCore hookData (0 = perps, 4294967295 = spot).","example":4294967295},"hyperCoreDestinationDexType":{"type":"string","description":"Human-readable HyperCore destination DEX.","enum":["perps","spot","unknown"],"example":"spot"}},"required":["raw","forwardingService"]},"DepositForBurnWithHookDecoded":{"type":"object","properties":{"burnToken":{"$ref":"#/components/schemas/TokenAmount"},"destinationChainId":{"type":"number","description":"Destination chain ID","example":1},"mintRecipient":{"type":"string","description":"Recipient address on destination chain (decoded from bytes32)","example":"0x42d023187acedd3306e3dce2f1b9e4a81d636503"},"destinationCaller":{"type":"string","description":"Destination caller as EVM address (decoded from bytes32)","example":"0x0000000000000000000000000000000000000000"},"maxFee":{"description":"Maximum fee with token info","allOf":[{"$ref":"#/components/schemas/TokenAmount"}]},"minFinalityThreshold":{"description":"Requested finality threshold and type","allOf":[{"$ref":"#/components/schemas/FinalityInfo"}]},"finalityThresholdExecuted":{"description":"Actual finality threshold executed by Circle (may differ from requested)","allOf":[{"$ref":"#/components/schemas/FinalityInfo"}]},"feeExecuted":{"description":"Actual fee deducted from minted amount, with token info","allOf":[{"$ref":"#/components/schemas/TokenAmount"}]},"hookData":{"description":"hookData payload. `forwardingService` is true when the bytes match Circle's \"cctp-forward\" magic.","allOf":[{"$ref":"#/components/schemas/HookDataInfo"}]}},"required":["burnToken","destinationChainId","mintRecipient","destinationCaller","maxFee","minFinalityThreshold","hookData"]},"CctpBridgeTransactionResponse":{"type":"object","properties":{"sourceChainId":{"type":"number","description":"Source chain ID where the CCTP burn was initiated","example":143},"sourceTxHash":{"type":"string","description":"Source chain transaction hash","example":"0x4ac72089eef92b827702281bb2668b416ee6d3e9d953600dc363842e473a157c"},"destinationChainId":{"type":"number","description":"Destination chain ID where the mint occurs","example":1},"destinationTxHash":{"type":"string","description":"Destination chain transaction hash (if mint has completed)"},"status":{"type":"string","description":"Overall bridge status. ready_for_manual_execution: the burn is attested but the destination mint has not been executed — claim it via /api/v1/cctp/bridge/claim.","enum":["pending","inflight","delivered","failed","ready_for_manual_execution","unknown"]},"transferType":{"type":"string","description":"CCTP transfer type based on finalityThresholdExecuted: \"fast\" (<= 1000) or \"standard\" (>= 2000)","enum":["fast","standard"]},"delayReason":{"type":"string","description":"Reason Circle reports for delayed message processing (insufficient_fee, amount_above_max, insufficient_allowance_available).","example":"insufficient_fee"},"forward":{"description":"Forwarding Service status for transfers with a forwarding hook (incl. HyperCore deposits). The bridge is only 'delivered' once the forward completes.","allOf":[{"$ref":"#/components/schemas/ForwardingStatusInfo"}]},"depositForBurn":{"description":"Raw depositForBurn function parameters. Present iff the source-chain call was plain depositForBurn (no hookData).","allOf":[{"$ref":"#/components/schemas/DepositForBurnParams"}]},"depositForBurnDecoded":{"description":"Decoded depositForBurn parameters with token metadata, chain IDs, and human-readable values.","allOf":[{"$ref":"#/components/schemas/DepositForBurnDecoded"}]},"depositForBurnWithHook":{"description":"Raw depositForBurnWithHook function parameters. Present iff the source-chain call was depositForBurnWithHook (non-empty hookData).","allOf":[{"$ref":"#/components/schemas/DepositForBurnWithHookParams"}]},"depositForBurnWithHookDecoded":{"description":"Decoded depositForBurnWithHook parameters with token metadata, chain IDs, and human-readable values.","allOf":[{"$ref":"#/components/schemas/DepositForBurnWithHookDecoded"}]},"ensoSourceEvent":{"description":"Enso shortcut event from source chain (ShortcutExecuted + execution result). Null if not found.","nullable":true,"allOf":[{"$ref":"#/components/schemas/EnsoEvent"}]},"ensoDestinationEvent":{"description":"Enso shortcut event from the destination chain. Standard CCTP transfers carry none; on an intent route it is read from the keeper's execution transaction (destinationExecutionTxHash).","nullable":true,"allOf":[{"$ref":"#/components/schemas/EnsoEvent"}]},"intent":{"description":"Present when the source transaction published a cross-chain intent: this bridge only delivers funds to the intent's ephemeral executor, and a keeper then executes the intent (or refunds it past its deadline) in a separate destination transaction. `status: delivered` means the bridge delivered the funds to the executor; the execution itself is reported here (phase, keeper status, execution / repayment transactions).","allOf":[{"$ref":"#/components/schemas/BridgeRouteIntent"}]},"destinationExecutionTxHash":{"type":"string","description":"The keeper's intent execution transaction on the destination chain, once executed - the transaction that performed the Enso swap. destinationTxHash is only the bridge delivery that funded the executor."},"error":{"type":"string","description":"Error message if the check failed"}},"required":["sourceChainId","sourceTxHash","status"]},"CctpTokenMessengerResponse":{"type":"object","properties":{"address":{"type":"string","description":"TokenMessengerV2 contract address on the specified chain","example":"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d"}},"required":["address"]},"CctpClaimTransaction":{"type":"object","properties":{"to":{"type":"string"},"data":{"type":"string"},"value":{"type":"string"},"chainId":{"type":"number"}},"required":["to","data","value","chainId"]},"CctpClaimResponse":{"type":"object","properties":{"claimable":{"type":"boolean","description":"Whether the claim transaction is available","example":true},"destinationChainId":{"type":"number","description":"Destination chain ID where receiveMessage should be called","example":1},"tx":{"description":"Ready-to-submit transaction to call MessageTransmitterV2.receiveMessage on the destination chain","allOf":[{"$ref":"#/components/schemas/CctpClaimTransaction"}]},"reason":{"type":"string","description":"Reason if not claimable","example":"Already claimed"}},"required":["claimable"]}}},"security":[{"bearer":[]}]}