> ## 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.

# Optimal route between two tokens

> Calculates optimal transaction with the best route between two tokens, which may involve several actions that interact with various DeFi protocols. This single call already quotes internally and returns executable calldata along with `amountOut` and `gas`, so there is no separate quote step to call beforehand. <Tip>To enter a non-tokenized position, use the GET&nbsp;`/shortcuts/route/nontokenized`.</Tip>



## OpenAPI

````yaml /public/openapi.json post /api/v1/shortcuts/route
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/route:
    post:
      tags:
        - DeFi Shortcuts
      summary: Optimal route between two tokens
      description: >-
        Calculates optimal transaction with the best route between two tokens,
        which may involve several actions that interact with various DeFi
        protocols. This single call already quotes internally and returns
        executable calldata along with `amountOut` and `gas`, so there is no
        separate quote step to call beforehand. <Tip>To enter a non-tokenized
        position, use the GET&nbsp;`/shortcuts/route/nontokenized`.</Tip>
      operationId: RouterController_postRouteShortcutTransaction
      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: ''
components:
  schemas:
    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
          example: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045'
        amountIn:
          description: Amount of tokenIn to swap in wei
          example:
            - '1000000000000000000'
          type: array
          items:
            type: string
        tokenIn:
          description: >-
            Ethereum address of the token to swap from. For ETH, use
            0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
          example:
            - '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'
          type: array
          items:
            type: string
        tokenOut:
          description: >-
            Ethereum address of the token to swap to. For ETH, use
            0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
          example:
            - '0x6b175474e89094c44da98b954eedeac495271d0f'
          type: array
          items:
            type: string
        routingStrategy:
          type: string
          description: >-
            Routing strategy to use. In majority of cases you can use `router`.
            Use `delegate` with EOA when you want to specify a `spender`
          nullable: true
          enum:
            - router
            - delegate
            - router-legacy
            - delegate-legacy
            - ensowallet
        toEoa:
          type: boolean
          description: Flag that indicates if gained tokenOut should be sent to EOA
          nullable: true
          deprecated: true
        receiver:
          type: string
          description: Ethereum address of the receiver of the tokenOut
          example: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045'
        spender:
          type: string
          description: >-
            Ethereum address of the spender of the tokenOut. **Note**: you must
            use the `delegate` strategy when specifying a spender, otherwise it
            will be ignored.
          example: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045'
        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%. Takes
            precedence over minAmountOut argument.
          example: '300'
          default: '50'
        fee:
          description: >-
            Fee in basis points (1/10000) for each amountIn value, e.g. 50 =
            0.50%. Must be in range 0-100. If specified, this percentage of each
            `amountIn` value will be sent to `feeReceiver`
          example:
            - '100'
          type: array
          items:
            type: string
        feeReceiver:
          type: string
          description: >-
            The Ethereum address that will receive the collected fee. Required
            if fee is provided
          example: '0x220866B1A2219f40e72f5c628B65D54268cA3A9D'
        ignoreAggregators:
          description: A list of swap aggregators to be ignored from consideration
          nullable: true
          type: array
          items:
            type: string
        ignoreStandards:
          description: A list of standards to be ignored from consideration
          nullable: true
          type: array
          items:
            type: string
        variableEstimates:
          type: object
          default: null
        referralCode:
          type: string
          description: Referral code that will be included in an on-chain event.
          maxLength: 16
          pattern: ^.{0,16}$
        destinationChainId:
          type: number
          description: Chain ID of the network to bridge to and receive tokenOut
        refundReceiver:
          type: string
          description: >-
            Ethereum address of the receiver of any dust tokens that might be
            produced during the execution of actions
          example: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045'
      required:
        - fromAddress
        - amountIn
        - tokenIn
        - tokenOut
        - variableEstimates
    RouteShortcutTransaction:
      type: object
      properties:
        gas:
          type: string
        amountOut:
          type: string
        priceImpact:
          type: number
          nullable: true
          description: Price impact in basis points, null if USD price not found
        feeAmount:
          description: An array of the fee amount collected for each tokenIn
          type: array
          items:
            type: string
        minAmountOut:
          type: string
          description: The minimum allowable amount out after slippage
        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: The route the shortcut will use
          type: array
          items:
            $ref: '#/components/schemas/Hop'
        ensoFeeAmount:
          type: array
          items:
            type: string
      required:
        - gas
        - amountOut
        - priceImpact
        - feeAmount
        - minAmountOut
        - createdAt
        - tx
        - route
        - ensoFeeAmount
    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
        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

````