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

````