---
title: "Compute Route"
method: POST
path: "/v2/fungible/route"
tags: ["Routing"]
---

# Compute Route

`POST /v2/fungible/route`

This is the first step when bridging tokens between chains. Call this endpoint with your source and destination assets to find the optimal transfer route. The response includes the expected output amount, USD value estimates, and an ordered list of operations.

After receiving a route, pass the full response (including `operations`) to the Generate Transaction endpoint (`POST /v2/fungible/msgs`) to get signable transaction messages you can broadcast.

If the route involves an IBC transfer between the Initia L1 chain and an external Cosmos chain, the endpoint also checks that the transfer fits within the current IBC rate-limit capacity. When the requested amount exceeds the remaining send or receive capacity, the request is rejected with a `400` error whose message reports the remaining capacity in human-readable units.

## Request body

- object
  - `amount_in` string, required — Amount to send in the smallest denomination (e.g. "1000000" for 1 INIT).
  - `source_asset_chain_id` string, required — Source chain ID.
  - `source_asset_denom` string, required — Source asset denomination.
  - `dest_asset_chain_id` string, required — Destination chain ID.
  - `dest_asset_denom` string, required — Destination asset denomination.
  - `allow_unsafe` boolean — Allow routes that may have higher risk.
  - `go_fast` boolean — Use Go Fast bridging. Automatically determined if not set.
  - `is_op_withdraw` boolean — Force an Optimistic withdrawal route.

## Response `200`

Successful response

- object
  - `amount_in` string — Input amount.
  - `amount_out` string — Expected output amount.
  - `source_asset_chain_id` string — Source chain ID.
  - `source_asset_denom` string — Source asset denom.
  - `dest_asset_chain_id` string — Destination chain ID.
  - `dest_asset_denom` string — Destination asset denom.
  - `operations` object[] — Ordered list of transfer operations to execute.
  - `required_chain_addresses` string[] — All chain IDs that require an address, in order of usage by operations in the route. Use this to populate the address_list parameter in the Generate Transaction request.
  - `chain_ids` string[] — Ordered list of all chain IDs involved in the route.
  - `does_swap` boolean — Whether the route involves a token swap.
  - `estimated_amount_out` string — Estimated output amount before fees and slippage adjustments.
  - `estimated_fees` object[] — Estimated fees for the route. Each entry describes a fee with its amount, behavior, and the originating asset.
    - `amount` string — Fee amount in the smallest denomination.
    - `fee_behavior` string — How the fee is applied (e.g. FEE_BEHAVIOR_ADDITIONAL, FEE_BEHAVIOR_DEDUCTED).
    - `origin_asset` object — The asset in which the fee is denominated.
      - `denom` string
      - `chain_id` string
    - `usd_amount` string, nullable — USD value of the fee, if available.
  - `estimated_route_duration_seconds` integer, nullable — Estimated time in seconds for the route to complete.
  - `txs_required` integer — Number of transactions required to execute the route.
  - `swap_venues` object[] — DEX venues used for swaps in the route, if any.
    - `name` string — Swap venue name.
    - `chain_id` string — Chain ID where the swap occurs.
    - `logo_uri` string — URL to the swap venue logo.
  - `swap_venue` object — Primary DEX venue used for the route's swap.
    - `name` string — Swap venue name.
    - `chain_id` string — Chain ID where the swap occurs.
    - `logo_uri` string — URL to the swap venue logo.
  - `swap_price_impact_percent` string — Estimated price impact percentage for the swap.
  - `usd_amount_in` string — USD value of the input amount.
  - `usd_amount_out` string — USD value of the output amount.
  - `warning` object, nullable — Price impact warning (present when impact exceeds 5%).
    - `type` string — Warning type (e.g. BAD_PRICE_WARNING).
    - `message` string — Human-readable warning message.
  - `extra_warnings` string[], nullable — Additional warning messages for the route, such as withdrawal duration notices.
  - `required_op_hook` boolean — Whether an OP hook is required for this route.

## Other responses

- `400` — Bad request. Returned when the requested transfer exceeds the current IBC rate-limit capacity for the source or destination asset. The error `message` reports the remaining send or receive capacity in human-readable decimal units, for example `IBC rate limit exceeded - Remaining send capacity: 1234.567890` or `IBC rate limit exceeded - Remaining receive capacity: 1234.567890`.

## Changes

- **2026-07-13** `d69782928523` — 1 info
  - added the non-success response with the status `400`
- **2026-04-07** `bc03d7d11524` — 10 info
  - added the optional property `chain_ids` to the response with the `200` status
  - added the optional property `does_swap` to the response with the `200` status
  - added the optional property `estimated_amount_out` to the response with the `200` status
  - added the optional property `estimated_fees` to the response with the `200` status
  - …6 more
- **2026-03-25** `8f391fd6e76c` — 10 warning, 1 info
  - removed the optional property `chain_ids` from the response with the `200` status
  - removed the optional property `does_swap` from the response with the `200` status
  - removed the optional property `estimated_amount_out` from the response with the `200` status
  - removed the optional property `estimated_fees` from the response with the `200` status
  - …7 more

[Change history](https://skmtc.dev/initia-labs/apis/router-api/changes/v2/fungible/route/post.md)

---

[API](https://skmtc.dev/initia-labs/apis/router-api.md) · [All operations](https://skmtc.dev/initia-labs/apis/router-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/initia-labs/router-api/revisions/d69782928523/schema)
