Enso shortcuts API

The shortcuts API from Enso — 5 operation(s) for shortcuts.

OpenAPI Specification

enso-shortcuts-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Enso ccip shortcuts API
  description: '#### Enso API

    - Find detailed documentation on [docs.enso.finance](https://docs.enso.finance).

    - To use the API, **you must include your API Key in the Authorization header** (Bearer format).

    - For testing, Swagger pre-authorizes you using the key: `1e02632d-6feb-4a75-a157-documentation` (1rps).

    - Get your own API Key at [enso.finance/developers](https://developers.enso.build/).'
  version: '1.0'
  contact: {}
servers:
- url: https://api.enso.finance
security:
- bearer: []
tags:
- name: shortcuts
  description: ''
paths:
  /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: 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: 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: fee
        required: false
        in: query
        description: Fee in basis points (1/10000) for each amountIn value. Must be in range 0-100. If specified, this percentage of each amountIn value will be sent to feeReceiver
        schema:
          example:
          - '100'
          type: array
          items:
            type: string
      - name: feeReceiver
        required: false
        in: query
        description: The Ethereum address that will receive the collected fee. Required if fee is provided
        schema:
          example: '0x220866B1A2219f40e72f5c628B65D54268cA3A9D'
          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
      - 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 (e.g. stargate, ccip, relay)
        schema:
          default: []
          type: array
          items:
            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: Ethereum address of the token to swap to. For ETH, use 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
        schema:
          example:
          - '0x6b175474e89094c44da98b954eedeac495271d0f'
          type: array
          items:
            type: string
      - name: destinationChainId
        required: false
        in: query
        description: Chain ID of the network to bridge to and receive tokenOut
        schema:
          type: number
      - name: variableEstimates
        required: false
        in: query
        schema:
          additionalProperties:
            type: string
          default: null
          type: object
      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: fee
        required: false
        in: query
        description: Fee in basis points (1/10000) for each amountIn value. Must be in range 0-100. If specified, this percentage of each amountIn value will be sent to feeReceiver
        schema:
          example:
          - '100'
          type: array
          items:
            type: string
      - name: feeReceiver
        required: false
        in: query
        description: The Ethereum address that will receive the collected fee. Required if fee is provided
        schema:
          example: '0x220866B1A2219f40e72f5c628B65D54268cA3A9D'
          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
      - 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
      - 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/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
      - 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'
              lsd_looping:
                summary: Multiple dependent routes with onchain fee (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
                    fee:
                    - '100'
                    feeReceiver: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045'
                    ignoreAggregators:
                    - openocean
                    slippage: '1000'
                - protocol: enso
                  action: route
                  args:
                    tokenIn: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'
                    tokenOut: '0x6b175474e89094c44da98b954eedeac495271d0f'
                    amountIn:
                      useOutputOfCallAt: 1
                    slippage: '300'
              alchemix_loop_1:
                summary: 'Alchemix self-repaying loop with extra borrow (regression: per-action receiver routing)'
                value:
        

# --- truncated at 32 KB (137 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/enso/refs/heads/main/openapi/enso-shortcuts-api-openapi.yml