> ## Documentation Index
> Fetch the complete documentation index at: https://docs.enso.build/llms.txt
> Use this file to discover all available pages before exploring further.

# Bundle a list of actions

> Returns a single transaction bundling the submitted actions. For available actions, see `/actions` endpoint.



## OpenAPI

````yaml /public/openapi.json post /api/v1/shortcuts/bundle
openapi: 3.0.0
info:
  title: Enso 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://enso.finance/developers).
  version: 1.0.1
  contact: {}
servers:
  - url: https://api.enso.build
security:
  - {}
tags:
  - name: shortcuts
    description: ''
paths:
  /api/v1/shortcuts/bundle:
    post:
      tags:
        - DeFi Shortcuts
      summary: Bundle a list of actions
      description: >-
        Returns a single transaction bundling the submitted actions. For
        available actions, see `/actions` endpoint.
      operationId: BundleController_bundleShortcutTransaction
      parameters:
        - name: chainId
          required: false
          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:
            example: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045'
            type: string
        - name: routingStrategy
          required: false
          in: query
          description: >-
            Routing strategy to use. Use `delegate` when:

            - You want to specify `spender` 

            - You want to use the `harvest` or `deposit` action with `/bundle`
            endpoint
          schema:
            nullable: true
            enum:
              - ensowallet
              - router
              - delegate
              - router-legacy
              - delegate-legacy
            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: ignoreAggregators
          required: false
          in: query
          description: >-
            A list of swap aggregators to be ignored from consideration. See
            `/aggregators` endpoint for available aggregators
          schema:
            nullable: true
            type: array
            items:
              type: string
        - name: referralCode
          required: false
          in: query
          description: >-
            Referral code that will be included in an on-chain event after
            encoding to hex. At most 16 characters.
          schema:
            maxLength: 16
            example: 0123456789ABCDEF
            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: 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:
                $ref: '#/components/schemas/ActionToBundle'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BundleShortcutTransaction'
components:
  schemas:
    ActionToBundle:
      type: object
      properties:
        protocol:
          description: Protocol to interact with
          example: enso
          type: string
        action:
          type: string
          enum:
            - approve
            - borrow
            - borrowwithpositionid
            - bridge
            - deposit
            - singledeposit
            - singledepositwithpositionid
            - multideposit
            - tokenizedsingledeposit
            - tokenizedmultideposit
            - multioutsingledeposit
            - depositclmm
            - harvest
            - permittransferfrom
            - redeem
            - singleredeem
            - singleredeemwithpositionid
            - multiredeem
            - tokenizedsingleredeem
            - tokenizedmultiredeem
            - redeemclmm
            - repay
            - repaywithpositionid
            - swap
            - transfer
            - transferfrom
            - route
            - call
            - split
            - merge
            - balance
            - minamountout
            - slippage
            - fee
            - ensofee
            - paymasterfee
          example: route
        args:
          type: object
          description: >-
            Arguments specific to the action type. See the [action
            types](https://docs.enso.finance/reference/actions) for more
            details.
          discriminator:
            propertyName: action
          oneOf:
            - $ref: '#/components/schemas/ApproveArgs'
            - $ref: '#/components/schemas/BorrowArgs'
            - $ref: '#/components/schemas/BridgeArgs'
            - $ref: '#/components/schemas/DepositArgs'
            - $ref: '#/components/schemas/SingleDepositArgs'
            - $ref: '#/components/schemas/MultiDepositArgs'
            - $ref: '#/components/schemas/TokenizedSingleDepositArgs'
            - $ref: '#/components/schemas/TokenizedMultiDepositArgs'
            - $ref: '#/components/schemas/MultiOutSingleDepositArgs'
            - $ref: '#/components/schemas/DepositCLMMArgs'
            - $ref: '#/components/schemas/HarvestArgs'
            - $ref: '#/components/schemas/PermitTransferFromArgs'
            - $ref: '#/components/schemas/RedeemArgs'
            - $ref: '#/components/schemas/SingleRedeemArgs'
            - $ref: '#/components/schemas/MultiRedeemArgs'
            - $ref: '#/components/schemas/TokenizedSingleRedeemArgs'
            - $ref: '#/components/schemas/TokenizedMultiRedeemArgs'
            - $ref: '#/components/schemas/RedeemCLMMArgs'
            - $ref: '#/components/schemas/RepayArgs'
            - $ref: '#/components/schemas/SwapArgs'
            - $ref: '#/components/schemas/TransferArgs'
            - $ref: '#/components/schemas/TransferFromArgs'
            - $ref: '#/components/schemas/RouteArgs'
            - $ref: '#/components/schemas/SlippageArgs'
            - $ref: '#/components/schemas/BorrowWithPositionIdArgs'
            - $ref: '#/components/schemas/SingleDepositWithPositionIdArgs'
            - $ref: '#/components/schemas/SingleRedeemWithPositionIdArgs'
            - $ref: '#/components/schemas/RepayWithPositionIdArgs'
            - $ref: '#/components/schemas/CallArgs'
            - $ref: '#/components/schemas/SplitArgs'
            - $ref: '#/components/schemas/MergeArgs'
            - $ref: '#/components/schemas/BalanceArgs'
            - $ref: '#/components/schemas/MinAmountOutArgs'
            - $ref: '#/components/schemas/FeeArgs'
      required:
        - protocol
        - action
        - args
    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
        route:
          description: The route the shortcut will use
          type: array
          items:
            $ref: '#/components/schemas/Hop'
        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'
        priceImpact:
          type: number
          nullable: true
          description: Price impact in basis points, null if USD price not found
        feeAmount:
          type: object
      required:
        - bundle
        - route
        - createdAt
        - tx
        - priceImpact
        - feeAmount
    ApproveArgs:
      type: object
      description: Arguments for the approve action
      title: Approve
      properties:
        token:
          type: string
          description: The token address
        spender:
          type: string
          description: The spender address
        amount:
          type: string
          description: The amount to approve
      required:
        - token
        - spender
        - amount
    BorrowArgs:
      type: object
      description: Arguments for the borrow action
      title: Borrow
      properties:
        collateral:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Address of token used for collateral
        tokenOut:
          type: string
          description: Address of token to borrow
        amountOut:
          type: string
          description: The amount to receive
        primaryAddress:
          type: string
          description: Address of smart contract to interact with
      required:
        - collateral
        - tokenOut
        - amountOut
        - primaryAddress
    BridgeArgs:
      type: object
      description: Arguments for the bridge action
      title: Bridge
      properties:
        primaryAddress:
          type: string
          description: Address of the source bridge pool
          example: '0x38EA452219524Bb87e18dE1C24D3bB59510BD783'
        destinationChainId:
          type: number
          description: Chain ID of the destination network
          example: 42161
        tokenIn:
          type: string
          description: Address of token to bridge from source chain
          example: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'
        amountIn:
          oneOf:
            - type: string
              description: Amount to bridge with full decimals
              example: '1000000000'
            - $ref: '#/components/schemas/OutputReference'
        receiver:
          type: string
          description: Address to receive bridged tokens on destination chain
          example: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045'
        callback:
          type: array
          description: Array of actions to execute on the destination chain after bridging
          items:
            type: object
            description: Any valid action that can be executed on the destination chain
      required:
        - primaryAddress
        - destinationChainId
        - tokenIn
        - amountIn
        - receiver
    DepositArgs:
      type: object
      description: Arguments for the deposit action
      title: Deposit
      properties:
        tokenIn:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Address of token to deposit
        tokenOut:
          type: string
          description: Address of token to receive
          nullable: true
        amountIn:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: The amount to send
        primaryAddress:
          type: string
          description: Address of smart contract to interact with
        receiver:
          type: string
          description: The receiver account
          nullable: true
      required:
        - tokenIn
        - amountIn
        - primaryAddress
    SingleDepositArgs:
      type: object
      description: Arguments for the single deposit action
      title: SingleDeposit
      properties:
        tokenIn:
          type: string
          description: Address of token to deposit
        tokenOut:
          type: string
          description: Address of token to receive
          nullable: true
        amountIn:
          type: string
          description: The amount to send
        primaryAddress:
          type: string
          description: Address of smart contract to interact with
        receiver:
          type: string
          description: The receiver account
          nullable: true
      required:
        - tokenIn
        - amountIn
        - primaryAddress
    MultiDepositArgs:
      type: object
      description: Arguments for the multi deposit action
      title: MultiDeposit
      properties:
        tokenIn:
          type: array
          items:
            type: string
          description: Addresses of tokens to deposit
        tokenOut:
          type: string
          description: Address of token to receive
          nullable: true
        amountIn:
          type: array
          items:
            type: string
          description: The amounts to send
        primaryAddress:
          type: string
          description: Address of smart contract to interact with
        receiver:
          type: string
          description: The receiver account
          nullable: true
      required:
        - tokenIn
        - amountIn
        - primaryAddress
    TokenizedSingleDepositArgs:
      type: object
      description: Arguments for the tokenized single deposit action
      title: TokenizedSingleDeposit
      properties:
        tokenIn:
          type: string
          description: Address of token to deposit
        tokenOut:
          type: string
          description: Address of token to receive
        amountIn:
          type: string
          description: The amount to send
        primaryAddress:
          type: string
          description: Address of smart contract to interact with
        receiver:
          type: string
          description: The receiver account
          nullable: true
      required:
        - tokenIn
        - tokenOut
        - amountIn
        - primaryAddress
    TokenizedMultiDepositArgs:
      type: object
      description: Arguments for the tokenized multi deposit action
      title: TokenizedMultiDeposit
      properties:
        tokenIn:
          type: array
          items:
            type: string
          description: Addresses of tokens to deposit
        tokenOut:
          type: string
          description: Address of token to receive
        amountIn:
          type: array
          items:
            type: string
          description: The amounts to send
        primaryAddress:
          type: string
          description: Address of smart contract to interact with
        receiver:
          type: string
          description: The receiver account
          nullable: true
      required:
        - tokenIn
        - tokenOut
        - amountIn
        - primaryAddress
    MultiOutSingleDepositArgs:
      type: object
      description: Arguments for the multi out single deposit action
      title: MultiOutSingleDeposit
      properties:
        tokenIn:
          type: string
          description: Address of token to send
        tokenOut:
          type: array
          items:
            type: string
          description: Addresses of tokens to receive
        amountIn:
          type: string
          description: The amount to deposit
        primaryAddress:
          type: string
          description: Address of smart contract to interact with
        receiver:
          type: string
          description: The receiver account
          nullable: true
      required:
        - tokenIn
        - tokenOut
        - amountIn
        - primaryAddress
    DepositCLMMArgs:
      type: object
      description: Arguments for the deposit CLMM action
      title: DepositCLMM
      properties:
        tokenIn:
          type: array
          items:
            type: string
          description: Addresses of tokens to deposit
        tokenOut:
          type: string
          description: Address of token to receive
        amountIn:
          type: array
          items:
            type: string
          description: The amounts to send
        ticks:
          type: array
          items:
            type: string
          description: Ticks for the deposit
        poolFee:
          type: string
          description: The fee for the pool to deposit into
        receiver:
          type: string
          description: The receiver account
          nullable: true
      required:
        - tokenIn
        - tokenOut
        - amountIn
        - ticks
        - poolFee
    HarvestArgs:
      type: object
      description: Arguments for the harvest action
      title: Harvest
      properties:
        token:
          type: string
          description: Address of token
        primaryAddress:
          type: string
          description: Address of smart contract to interact with
      required:
        - token
        - primaryAddress
    PermitTransferFromArgs:
      type: object
      description: Arguments for the permit transfer from action
      title: PermitTransferFrom
      properties:
        token:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Address of token to approve
        amount:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: The amount to approve
        sender:
          type: string
          description: The sender account
        receiver:
          type: string
          description: The receiver account
        nonce:
          type: string
          description: The nonce to prevent signature replays
        deadline:
          type: string
          description: The deadline on the permit signature
        signature:
          type: string
          description: The permit signature
      required:
        - token
        - amount
        - sender
        - receiver
        - nonce
        - deadline
        - signature
    RedeemArgs:
      type: object
      description: Arguments for the redeem action
      title: Redeem
      properties:
        tokenIn:
          type: string
          description: Address of token to send
          nullable: true
        tokenOut:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Address of token to receive
        amountIn:
          type: string
          description: The amount to deposit
        primaryAddress:
          type: string
          description: Address of smart contract to interact with
        receiver:
          type: string
          description: The receiver account
          nullable: true
      required:
        - tokenOut
        - amountIn
        - primaryAddress
    SingleRedeemArgs:
      type: object
      description: Arguments for the single redeem action
      title: SingleRedeem
      properties:
        tokenIn:
          type: string
          description: Address of token to send
          nullable: true
        tokenOut:
          type: string
          description: Address of token to receive
        amountIn:
          type: string
          description: The amount to deposit
        primaryAddress:
          type: string
          description: Address of smart contract to interact with
        receiver:
          type: string
          description: The receiver account
          nullable: true
      required:
        - tokenOut
        - amountIn
        - primaryAddress
    MultiRedeemArgs:
      type: object
      description: Arguments for the multi redeem action
      title: MultiRedeem
      properties:
        tokenIn:
          type: string
          description: Address of token to send
          nullable: true
        tokenOut:
          type: array
          items:
            type: string
          description: Address of token to receive
        amountIn:
          type: string
          description: The amount to deposit
        primaryAddress:
          type: string
          description: Address of smart contract to interact with
        receiver:
          type: string
          description: The receiver account
          nullable: true
      required:
        - tokenOut
        - amountIn
        - primaryAddress
    TokenizedSingleRedeemArgs:
      type: object
      description: Arguments for the tokenized single redeem action
      title: TokenizedSingleRedeem
      properties:
        tokenIn:
          type: string
          description: Address of token to send
        tokenOut:
          type: string
          description: Address of token to receive
        amountIn:
          type: string
          description: The amount to deposit
        primaryAddress:
          type: string
          description: Address of smart contract to interact with
        receiver:
          type: string
          description: The receiver account
          nullable: true
      required:
        - tokenIn
        - tokenOut
        - amountIn
        - primaryAddress
    TokenizedMultiRedeemArgs:
      type: object
      description: Arguments for the tokenized multi redeem action
      title: TokenizedMultiRedeem
      properties:
        tokenIn:
          type: string
          description: Address of token to send
        tokenOut:
          type: array
          items:
            type: string
          description: Address of token to receive
        amountIn:
          type: string
          description: The amount to deposit
        primaryAddress:
          type: string
          description: Address of smart contract to interact with
        receiver:
          type: string
          description: The receiver account
          nullable: true
      required:
        - tokenIn
        - tokenOut
        - amountIn
        - primaryAddress
    RedeemCLMMArgs:
      type: object
      description: Arguments for the redeem CLMM action
      title: RedeemCLMM
      properties:
        tokenIn:
          type: string
          description: Address of token to send
        tokenOut:
          type: array
          items:
            type: string
          description: Address of token to receive
        liquidity:
          type: string
          description: The amount of liquidity to redeem
        tokenId:
          type: string
          description: The token ID
        receiver:
          type: string
          description: The receiver account
          nullable: true
      required:
        - tokenIn
        - tokenOut
        - liquidity
        - tokenId
    RepayArgs:
      type: object
      description: Arguments for the repay action
      title: Repay
      properties:
        tokenIn:
          type: string
          description: Address of token to repay
        amountIn:
          type: string
          description: The amount to send
        primaryAddress:
          type: string
          description: Address of smart contract to interact with
      required:
        - tokenIn
        - amountIn
        - primaryAddress
    SwapArgs:
      type: object
      description: Arguments for the swap action
      title: Swap
      properties:
        tokenIn:
          type: string
          description: Address of token to send
        tokenOut:
          type: string
          description: Address of token to receive
        amountIn:
          type: string
          description: The amount to deposit
        primaryAddress:
          type: string
          description: The receiver account
          nullable: true
        receiver:
          type: string
          description: Address of smart contract to interact with
        slippage:
          type: string
          description: Amount of slippage in BPS
          nullable: true
        poolFee:
          type: string
          description: The fee that the liquidity pool uses
          nullable: true
      required:
        - tokenIn
        - tokenOut
        - amountIn
        - receiver
    TransferArgs:
      type: object
      description: Arguments for the transfer action
      title: Transfer
      properties:
        token:
          type: string
          description: Address of token
        amount:
          type: string
          description: The amount to transfer
        receiver:
          type: string
          description: The receiver account
        id:
          type: string
          description: The ERC721 or ERC1155 id
          nullable: true
      required:
        - token
        - amount
        - receiver
    TransferFromArgs:
      type: object
      description: Arguments for the transfer from action
      title: TransferFrom
      properties:
        token:
          type: string
          description: Address of token
        amount:
          type: string
          description: The amount to transfer
        receiver:
          type: string
          description: The receiver account
        sender:
          type: string
          description: The sender account
        id:
          type: string
          description: The ERC721 or ERC1155 id
          nullable: true
      required:
        - token
        - amount
        - receiver
        - sender
    RouteArgs:
      type: object
      description: Arguments for the route action
      title: Route
      properties:
        tokenIn:
          type: string
          description: Address of token to send
        tokenOut:
          type: string
          description: Address of token to receive
        amountIn:
          type: string
          description: The amount to deposit
        primaryAddress:
          type: string
          description: The receiver account
          nullable: true
        receiver:
          type: string
          description: Address of smart contract to interact with
        slippage:
          type: string
          description: Amount of slippage in BPS
          nullable: true
        poolFee:
          type: string
          description: The fee that the liquidity pool uses
          nullable: true
      required:
        - tokenIn
        - tokenOut
        - amountIn
        - receiver
    SlippageArgs:
      type: object
      description: Arguments for setting slippage tolerance for an output amount
      title: Slippage
      properties:
        amountOut:
          oneOf:
            - type: string
              description: Expected output amount with full decimals
              example: '980000000000000000'
            - $ref: '#/components/schemas/OutputReference'
        bps:
          type: string
          description: Maximum acceptable slippage in basis points (1 bps = 0.01%)
          example: '100'
      required:
        - amountOut
        - bps
    BorrowWithPositionIdArgs:
      type: object
      description: Arguments for the borrow with position ID action
      title: BorrowWithPositionId
      properties:
        collateral:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Address of token used for collateral
        tokenOut:
          type: string
          description: Address of token to borrow
        amountOut:
          type: string
          description: The amount to receive
        primaryAddress:
          type: string
          description: Address of smart contract to interact with
        positionId:
          type: string
          description: The position ID to borrow against
      required:
        - collateral
        - tokenOut
        - amountOut
        - primaryAddress
        - positionId
    SingleDepositWithPositionIdArgs:
      type: object
      description: Arguments for the single deposit with position ID action
      title: SingleDepositWithPositionId
      properties:
        tokenIn:
          type: string
          description: Address of token to deposit
        tokenOut:
          type: string
          description: Address of token to receive
          nullable: true
        amountIn:
          type: string
          description: The amount to send
        primaryAddress:
          type: string
          description: Address of smart contract to interact with
        receiver:
          type: string
          description: The receiver account
          nullable: true
        positionId:
          type: string
          description: The position ID to deposit into
      required:
        - tokenIn
        - amountIn
        - primaryAddress
        - positionId
    SingleRedeemWithPositionIdArgs:
      type: object
      description: Arguments for the single redeem with position ID action
      title: SingleRedeemWithPositionId
      properties:
        tokenIn:
          type: string
          description: Address of token to send
          nullable: true
        tokenOut:
          type: string
          description: Address of token to receive
        amountIn:
          type: string
          description: The amount to deposit
        primaryAddress:
          type: string
          description: Address of smart contract to interact with
        receiver:
          type: string
          description: The receiver account
          nullable: true
        positionId:
          type: string
          description: The position ID to redeem from
      required:
        - tokenOut
        - amountIn
        - primaryAddress
        - positionId
    RepayWithPositionIdArgs:
      type: object
      description: Arguments for the repay with position ID action
      title: RepayWithPositionId
      properties:
        tokenIn:
          type: string
          description: Address of token to repay
        amountIn:
          type: string
          description: The amount to send
        primaryAddress:
          type: string
          description: Address of smart contract to interact with
        positionId:
          type: string
          description: The position ID to repay
      required:
        - tokenIn
        - amountIn
        - primaryAddress
        - positionId
    CallArgs:
      type: object
      description: Arguments for the generic call action
      title: Call
      properties:
        target:
          type: string
          description: The contract address to call
        data:
          type: string
          description: The encoded function call data
        value:
          type: string
          description: The amount of ETH to send with the call
          default: '0'
      required:
        - target
        - data
    SplitArgs:
      type: object
      description: Arguments for splitting a token amount into multiple portions
      title: Split
      properties:
        token:
          type: string
          description: Token address to split
        amount:
          oneOf:
            - type: string
              description: Total amount to split with full decimals
            - $ref: '#/components/schemas/OutputReference'
        portions:
          type: array
          items:
            type: object
            properties:
              percentage:
                type: string
                description: Percentage in basis points (1 bps = 0.01%)
              receiver:
                type: string
                description: Address to receive this portion
            required:
              - percentage
              - receiver
          description: Array of split portions with percentages and receivers
      required:
        - token
        - amount
        - portions
    MergeArgs:
      type: object
      description: Arguments for merging multiple token amounts
      title: Merge
      properties:
        token:
          type: string
          description: Token address to merge
        amounts:
          type: array
          items:
            oneOf:
              - type: string
              - $ref: '#/components/schemas/OutputReference'
          description: Array of amounts to merge
        receiver:
          type: string
          description: Address to receive the merged amount
      required:
        - token
        - amounts
        - receiver
    BalanceArgs:
      type: object
      description: Arguments for checking token balance
      title: Balance
      properties:
        token:
          type: string
          description: Token address to check balance for
        account:
          type: string
          description: Account address to check balance of
      required:
        - token
        - account
    MinAmountOutArgs:
      type: object
      description: Arguments for setting minimum output amount
      title: MinAmountOut
      properties:
        token:
          type: string
          description: Token address for minimum amount check
        minAmount:
          type: string
          description: Minimum acceptable amount with full decimals
      required:
        - token
        - minAmount
    FeeArgs:
      type: object
      description: Arguments for applying a custom fee to a token amount
      title: Fee
      properties:
        token:
          type: string
          description: Token address to apply the fee to
        amount:
          oneOf:
            - type: string
              description: Amount to apply the fee to with full decimals
            - $ref: '#/components/schemas/OutputReference'
        bps:
          type: string
          description: Fee percentage in basis points (1 bps = 0.01%)
        receiver:
          type: string
          description: Address to receive the fee
      required:
        - token
        - amount
        - bps
        - receiver
    Hop:
      type: object
      properties:
        tokenIn:
          type: array
          items:
            type: string
        tokenOut:
          type: array
          items:
            type: string
        protocol:
          type: string
        action:
          type: string
        primary:
          type: string
        internalRoutes:
          type: array
          items:
            type: string
        args:
          type: object
        chainId:
          type: number
        sourceChainId:
          type: number
        destinationChainId:
          type: number
      required:
        - tokenOut
        - protocol
        - internalRoutes
        - action
        - args
        - tokenIn
        - primary
    Transaction:
      type: object
      properties:
        data:
          type: string
        to:
          type: string
        from:
          type: string
        value:
          type: string
      required:
        - data
        - to
        - from
        - value
    OutputReference:
      type: object
      properties:
        useOutputOfCallAt:
          type: integer
          description: Index of the previous action whose output should be used
        index:
          type: integer
          description: >-
            For actions that return multiple values, specifies which index to
            use
      required:
        - useOutputOfCallAt

````