openapi: 3.1.0
info:
  title: Router API
  description: Cross-chain transfer routing API for the Initia ecosystem.
  version: 1.0.0
servers:
  - url: https://router-api.initia.xyz
    description: Mainnet
  - url: https://router-api.initiation-2.initia.xyz
    description: Testnet
paths:
  /v2/fungible/assets:
    get:
      operationId: getAssets
      summary: Get Assets
      description:
        Returns a map of supported fungible assets across all chains. You can
        optionally filter by specific chain IDs.
      tags:
        - Assets & Chains
      parameters:
        - name: chain_ids
          in: query
          description:
            Comma-separated list of chain IDs to filter by (e.g.
            "1,42161,interwoven-1"). Returns all supported chains if omitted.
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  chain_to_assets_map:
                    type: object
                    description: A map of chain IDs to their supported assets.
                    additionalProperties:
                      type: object
                      properties:
                        assets:
                          type: array
                          items:
                            type: object
                            properties:
                              chain_id:
                                type: string
                                description: Chain ID where the asset exists.
                              denom:
                                type: string
                                description: Asset denomination.
                              decimals:
                                type: integer
                                description: Number of decimal places.
                              symbol:
                                type: string
                                description: Asset ticker symbol.
                              name:
                                type: string
                                description: Human-readable asset name.
                              logo_uri:
                                type: string
                                description: URL to the asset logo.
                              is_cw20:
                                type: boolean
                                description: Whether the asset is a CW20 token.
                              is_evm:
                                type: boolean
                                description: Whether the asset is an EVM token.
                              is_svm:
                                type: boolean
                                description: Whether the asset is an SVM token.
                              origin_chain_id:
                                type: string
                                description:
                                  Chain ID where the asset originated.
                              origin_denom:
                                type: string
                                description:
                                  Original denomination on the origin chain.
                              trace:
                                type: string
                                description: IBC trace path.
              example:
                chain_to_assets_map:
                  interwoven-1:
                    assets:
                      - chain_id: interwoven-1
                        denom: uinit
                        decimals: 6
                        symbol: INIT
                        name: Initia
                        logo_uri: https://raw.githubusercontent.com/.../init.png
                        is_cw20: false
                        is_evm: false
                        is_svm: false
                        origin_chain_id: interwoven-1
                        origin_denom: uinit
                        trace: ''
  /v2/info/chains:
    get:
      operationId: getChains
      summary: Get Chains
      description:
        Returns the list of all supported chains available for cross-chain
        transfers. You can optionally filter by specific chain IDs.
      tags:
        - Assets & Chains
      parameters:
        - name: chain_ids
          in: query
          description: Comma-separated list of chain IDs to filter by.
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  chains:
                    type: array
                    items:
                      type: object
                      properties:
                        chain_id:
                          type: string
                          description: Unique chain identifier.
                        chain_name:
                          type: string
                          description: Human-readable chain name.
                        chain_type:
                          type: string
                          description: 'Chain type (e.g. cosmos, evm).'
                        pfm_enabled:
                          type: boolean
                          description:
                            Whether Packet Forward Middleware is enabled.
                        supports_memo:
                          type: boolean
                          description: Whether the chain supports IBC memo.
                        logo_uri:
                          type: string
                          description: URL to the chain logo.
                        bech32_prefix:
                          type: string
                          description: Bech32 address prefix (Cosmos chains).
                        fee_assets:
                          type: array
                          description: Accepted fee assets on the chain.
                          items:
                            type: object
                        rest:
                          type: string
                          description: REST API endpoint URL.
                        rpc:
                          type: string
                          description: RPC endpoint URL.
                        evm_fee_asset:
                          type: object
                          description: EVM fee asset details (EVM chains only).
                          properties:
                            decimals:
                              type: integer
                              description: Token decimals.
                            name:
                              type: string
                              description: Token name.
                            symbol:
                              type: string
                              description: Token symbol.
              example:
                chains:
                  - chain_id: interwoven-1
                    chain_name: Initia
                    chain_type: cosmos
                    pfm_enabled: true
                    supports_memo: true
                    logo_uri: https://raw.githubusercontent.com/.../initia.png
                    bech32_prefix: init
                    fee_assets: []
                    rest: https://rest.initia.xyz
                    rpc: https://rpc.initia.xyz
  /v2/info/balances:
    post:
      operationId: getBalances
      summary: Get Balances
      description:
        Returns token balances and USD values for given addresses across
        multiple chains.
      tags:
        - Assets & Chains
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - chains
              properties:
                chains:
                  type: object
                  description:
                    A map of chain IDs to address and denomination queries.
                  additionalProperties:
                    type: object
                    required:
                      - address
                      - denoms
                    properties:
                      address:
                        type: string
                        description: Account address on the chain.
                      denoms:
                        type: array
                        description: List of token denominations to query.
                        items:
                          type: string
            example:
              chains:
                interwoven-1:
                  address: init1abc...
                  denoms:
                    - uinit
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  chains:
                    type: object
                    description: A map of chain IDs to balance results.
                    additionalProperties:
                      type: object
                      properties:
                        denoms:
                          type: object
                          additionalProperties:
                            type: object
                            properties:
                              amount:
                                type: string
                                description: Raw token amount.
                              price_usd:
                                type: string
                                description: Current USD price per token.
                              value_usd:
                                type: string
                                description: Total USD value of the balance.
              example:
                chains:
                  interwoven-1:
                    denoms:
                      uinit:
                        amount: '1000000'
                        price_usd: '1.50'
                        value_usd: '1.50'
  /v2/fungible/route:
    post:
      operationId: computeRoute
      summary: Compute Route
      description: |-
        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.
      tags:
        - Routing
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - amount_in
                - source_asset_chain_id
                - source_asset_denom
                - dest_asset_chain_id
                - dest_asset_denom
              properties:
                amount_in:
                  type: string
                  description:
                    Amount to send in the smallest denomination (e.g. "1000000"
                    for 1 INIT).
                source_asset_chain_id:
                  type: string
                  description: Source chain ID.
                source_asset_denom:
                  type: string
                  description: Source asset denomination.
                dest_asset_chain_id:
                  type: string
                  description: Destination chain ID.
                dest_asset_denom:
                  type: string
                  description: Destination asset denomination.
                allow_unsafe:
                  type: boolean
                  default: true
                  description: Allow routes that may have higher risk.
                go_fast:
                  type: boolean
                  description:
                    Use Go Fast bridging. Automatically determined if not set.
                is_op_withdraw:
                  type: boolean
                  description: Force an Optimistic withdrawal route.
            example:
              amount_in: '1000000'
              source_asset_chain_id: interwoven-1
              source_asset_denom: uinit
              dest_asset_chain_id: '8453'
              dest_asset_denom: '0x...'
              allow_unsafe: true
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  amount_in:
                    type: string
                    description: Input amount.
                  amount_out:
                    type: string
                    description: Expected output amount.
                  source_asset_chain_id:
                    type: string
                    description: Source chain ID.
                  source_asset_denom:
                    type: string
                    description: Source asset denom.
                  dest_asset_chain_id:
                    type: string
                    description: Destination chain ID.
                  dest_asset_denom:
                    type: string
                    description: Destination asset denom.
                  operations:
                    type: array
                    description: Ordered list of transfer operations to execute.
                    items:
                      type: object
                  required_chain_addresses:
                    type: array
                    description: >-
                      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.
                    items:
                      type: string
                  chain_ids:
                    type: array
                    description: >-
                      Ordered list of all chain IDs involved in the route.
                    items:
                      type: string
                  does_swap:
                    type: boolean
                    description: Whether the route involves a token swap.
                  estimated_amount_out:
                    type: string
                    description: >-
                      Estimated output amount before fees and slippage
                      adjustments.
                  estimated_fees:
                    type: array
                    description: >-
                      Estimated fees for the route. Each entry describes a fee
                      with its amount, behavior, and the originating asset.
                    items:
                      type: object
                      properties:
                        amount:
                          type: string
                          description: Fee amount in the smallest denomination.
                        fee_behavior:
                          type: string
                          description: >-
                            How the fee is applied (e.g.
                            FEE_BEHAVIOR_ADDITIONAL, FEE_BEHAVIOR_DEDUCTED).
                        origin_asset:
                          type: object
                          description: >-
                            The asset in which the fee is denominated.
                          properties:
                            denom:
                              type: string
                            chain_id:
                              type: string
                        usd_amount:
                          type: string
                          nullable: true
                          description: USD value of the fee, if available.
                  estimated_route_duration_seconds:
                    type: integer
                    nullable: true
                    description: >-
                      Estimated time in seconds for the route to complete.
                  txs_required:
                    type: integer
                    description:
                      Number of transactions required to execute the route.
                  swap_venues:
                    type: array
                    description: DEX venues used for swaps in the route, if any.
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                          description: Swap venue name.
                        chain_id:
                          type: string
                          description: Chain ID where the swap occurs.
                        logo_uri:
                          type: string
                          description: URL to the swap venue logo.
                  swap_venue:
                    type: object
                    description: Primary DEX venue used for the route's swap.
                    properties:
                      name:
                        type: string
                        description: Swap venue name.
                      chain_id:
                        type: string
                        description: Chain ID where the swap occurs.
                      logo_uri:
                        type: string
                        description: URL to the swap venue logo.
                  swap_price_impact_percent:
                    type: string
                    description: Estimated price impact percentage for the swap.
                  usd_amount_in:
                    type: string
                    description: USD value of the input amount.
                  usd_amount_out:
                    type: string
                    description: USD value of the output amount.
                  warning:
                    type: object
                    nullable: true
                    description:
                      Price impact warning (present when impact exceeds 5%).
                    properties:
                      type:
                        type: string
                        description: Warning type (e.g. BAD_PRICE_WARNING).
                      message:
                        type: string
                        description: Human-readable warning message.
                  extra_warnings:
                    type: array
                    nullable: true
                    description: >-
                      Additional warning messages for the route, such as
                      withdrawal duration notices.
                    items:
                      type: string
                  required_op_hook:
                    type: boolean
                    description: Whether an OP hook is required for this route.
              example:
                amount_in: '1000000'
                amount_out: '999000'
                source_asset_chain_id: interwoven-1
                source_asset_denom: uinit
                dest_asset_chain_id: '8453'
                dest_asset_denom: '0x...'
                operations: []
                required_chain_addresses:
                  - interwoven-1
                  - '8453'
                chain_ids:
                  - interwoven-1
                  - '8453'
                does_swap: false
                estimated_amount_out: '999000'
                estimated_fees: []
                estimated_route_duration_seconds: 60
                txs_required: 1
                swap_venues: []
                usd_amount_in: '1.50'
                usd_amount_out: '1.49'
                warning: null
                extra_warnings: null
                required_op_hook: false
        '400':
          description: >-
            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`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: integer
                    example: 400
                  message:
                    type: string
                    description: Human-readable error message.
                  error:
                    type: string
                    example: Bad Request
              example:
                statusCode: 400
                message:
                  'IBC rate limit exceeded - Remaining send capacity:
                  1234.567890'
                error: Bad Request
  /v2/fungible/msgs:
    post:
      operationId: generateTransaction
      summary: Generate Transaction
      description: |-
        This is the second step when bridging tokens. After computing a route with Compute Route (`POST /v2/fungible/route`), pass the route details and your addresses to this endpoint. It returns signable transaction messages that you can broadcast to the source chain.

        The typical flow is: **Compute Route** → **Generate Transaction** → sign and broadcast → **Track Transaction**.
      tags:
        - Routing
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - amount_in
                - amount_out
                - source_asset_chain_id
                - source_asset_denom
                - dest_asset_chain_id
                - dest_asset_denom
                - address_list
                - operations
                - slippage_tolerance_percent
              properties:
                amount_in:
                  type: string
                  description: Input amount in smallest denomination.
                amount_out:
                  type: string
                  description: Expected output amount from the route response.
                source_asset_chain_id:
                  type: string
                  description: Source chain ID.
                source_asset_denom:
                  type: string
                  description: Source asset denomination.
                dest_asset_chain_id:
                  type: string
                  description: Destination chain ID.
                dest_asset_denom:
                  type: string
                  description: Destination asset denomination.
                address_list:
                  type: array
                  description:
                    Array of recipient and/or sender address for each chain in
                    the path, corresponding to the required_chain_addresses
                    array returned from a route request.
                  minItems: 2
                  items:
                    type: string
                operations:
                  type: array
                  description:
                    Route operations from the /v2/fungible/route response.
                  items:
                    type: object
                slippage_tolerance_percent:
                  type: string
                  description:
                    'Slippage tolerance as a percentage (e.g. "1" for 1%).'
                signed_op_hook:
                  type: object
                  description:
                    Signed OP hook data, required when the route has
                    required_op_hook true.
                  properties:
                    hook:
                      type: string
                      description: Hook data.
                    signer:
                      type: string
                      description: Signer address.
            example:
              amount_in: '1000000'
              amount_out: '999000'
              source_asset_chain_id: interwoven-1
              source_asset_denom: uinit
              dest_asset_chain_id: '8453'
              dest_asset_denom: '0x...'
              address_list:
                - init1abc...
                - '0xdef...'
              operations: []
              slippage_tolerance_percent: '1'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  txs:
                    type: array
                    description:
                      Array of transaction objects. Each can be a cosmos_tx,
                      evm_tx, or svm_tx.
                    items:
                      type: object
                      properties:
                        cosmos_tx:
                          type: object
                          properties:
                            chain_id:
                              type: string
                              description: Target chain ID.
                            msgs:
                              type: array
                              description: Array of Cosmos SDK messages.
                              items:
                                type: object
                            signer_address:
                              type: string
                              description:
                                Address that must sign the transaction.
              example:
                txs:
                  - cosmos_tx:
                      chain_id: interwoven-1
                      msgs: []
                      signer_address: init1abc...
  /op-hook:
    post:
      operationId: getOpHook
      summary: Get OP hook
      description: |-
        Generates OP hook data required for certain cross-chain routes that involve Optimistic bridge withdrawals with ERC-20 token conversion. When the Compute Route response includes `required_op_hook: true`, you must call this endpoint to obtain the hook payload before generating transaction messages.

        Pass the returned hook data to the Generate Transaction endpoint (`POST /v2/fungible/msgs`) in the `signed_op_hook` field after signing it.
      tags:
        - Routing
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - source_address
                - source_asset_chain_id
                - source_asset_denom
                - dest_address
                - dest_asset_chain_id
                - dest_asset_denom
              properties:
                source_address:
                  type: string
                  description: Sender address on the source chain.
                source_asset_chain_id:
                  type: string
                  description: Source chain ID.
                source_asset_denom:
                  type: string
                  description: Source asset denomination.
                dest_address:
                  type: string
                  description: Recipient address on the destination chain.
                dest_asset_chain_id:
                  type: string
                  description: Destination chain ID.
                dest_asset_denom:
                  type: string
                  description: Destination asset denomination.
            example:
              source_address: init1abc...
              source_asset_chain_id: echelon-1
              source_asset_denom: uinit
              dest_address: '0xdef...'
              dest_asset_chain_id: '8453'
              dest_asset_denom: '0x...'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  chain_id:
                    type: string
                    description:
                      Chain ID where the hook messages should be executed.
                  hook:
                    type: array
                    description:
                      Array of EVM messages that form the OP hook payload.
                    items:
                      type: object
              example:
                chain_id: '8453'
                hook: []
        '400':
          description: Bad request — the route does not support OP withdraw.
  /v2/tx/track:
    post:
      operationId: trackTransaction
      summary: Track Transaction
      description: |-
        Registers a transaction for cross-chain tracking. Call this once with the transaction hash and chain ID immediately after broadcasting. This is required before you can poll the transaction status.

        After calling this endpoint, use Get Transaction Status (`GET /v2/tx/status`) to poll for progress updates.
      tags:
        - Tracking Transactions
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - tx_hash
                - chain_id
              properties:
                tx_hash:
                  type: string
                  description: The transaction hash to track.
                chain_id:
                  type: string
                  description: The chain ID where the transaction was submitted.
            example:
              tx_hash: ABCDEF1234567890...
              chain_id: interwoven-1
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  tx_hash:
                    type: string
                    description: Hash of the tracked transaction.
                  explorer_link:
                    type: string
                    description: Link to the transaction on a block explorer.
              example:
                tx_hash: 87782A6A7C4EF4232FFC5B7C8204398AE73870049D8DC58E0146EFCAC3901979
                explorer_link: https://scan.initia.xyz/strat-1/txs/87782A6A7C4EF4232FFC5B7C8204398AE73870049D8DC58E0146EFCAC3901979
  /v2/tx/status:
    get:
      operationId: getTransactionStatus
      summary: Get Transaction Status
      description: |-
        Polls the current status of a transaction that was previously registered with Track Transaction (`POST /v2/tx/track`). Returns the overall status and the state of each hop in the transfer sequence.

        Call this endpoint repeatedly until the status reaches a terminal state (e.g. `STATE_COMPLETED` or `STATE_FAILED`). This is useful for showing transfer progress in your UI.
      tags:
        - Tracking Transactions
      parameters:
        - name: tx_hash
          in: query
          required: true
          description: The transaction hash to check.
          schema:
            type: string
        - name: chain_id
          in: query
          required: true
          description: The chain ID where the transaction was submitted.
          schema:
            type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  state:
                    type: string
                    description: >-
                      Overall end-to-end transaction state (e.g.
                      STATE_SUBMITTED, STATE_PENDING, STATE_COMPLETED_SUCCESS,
                      STATE_COMPLETED_ERROR, STATE_ABANDONED,
                      STATE_PENDING_ERROR).
                  transfers:
                    type: array
                    description: Transfer status for all transfers in the route.
                    items:
                      type: object
                  transfer_sequence:
                    type: array
                    description: >-
                      Deprecated. Flat list of transfer events in sequence
                      order.
                    items:
                      type: object
                      properties:
                        src_chain_id:
                          type: string
                        dst_chain_id:
                          type: string
                        state:
                          type: string
                  next_blocking_transfer:
                    type: object
                    nullable: true
                    description: >-
                      The next transfer that is blocking progress, if any.
                    properties:
                      transfer_sequence_index:
                        type: integer
                  transfer_asset_release:
                    type: object
                    nullable: true
                    description: Information about released assets.
                    properties:
                      chain_id:
                        type: string
                      denom:
                        type: string
                      amount:
                        type: string
                        nullable: true
                      released:
                        type: boolean
                  error:
                    type: object
                    nullable: true
                    description: Error details if the transaction failed.
              example:
                state: STATE_COMPLETED_SUCCESS
                transfers: []
                transfer_sequence:
                  - src_chain_id: interwoven-1
                    dst_chain_id: '8453'
                    state: TRANSFER_SUCCESS
                next_blocking_transfer: null
                transfer_asset_release: null
                error: null
  /api/rpc/{chainId}:
    post:
      operationId: rpc
      summary: Cosmos RPC Proxy
      description: |-
        JSON-RPC 2.0 proxy to the Cosmos RPC of a supported Cosmos chain. The request and response follow the standard [JSON-RPC 2.0 specification](https://www.jsonrpc.org/specification).

        Only a limited set of RPC methods is supported:
        - `status` — fetch the node status. `params` must be `{}`.
        - `abci_query` — query application state. `params` must include `data` (string), `path` (string), and `prove` (boolean). Allowed `path` values:
          - `/cosmos.auth.v1beta1.Query/Account`
          - `/cosmos.bank.v1beta1.Query/AllBalances`
          - `/cosmos.tx.v1beta1.Service/Simulate`
        - `broadcast_tx_sync` — broadcast a signed transaction. `params` must contain a single `tx` field (string).
        - `tx_search` — search for transactions. `params` must include `page` (string, only `"1"` is allowed) and `query` (string, must match `tx.hash='<64-hex>'`).

        Any other method or unsupported parameter shape returns a `400` error.
      tags:
        - RPC
      parameters:
        - name: chainId
          in: path
          required: true
          description: Cosmos chain ID to proxy the RPC call to.
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - id
                - method
                - params
              properties:
                id:
                  type: integer
                  description: JSON-RPC request ID.
                method:
                  type: string
                  description: RPC method name.
                  enum:
                    - status
                    - abci_query
                    - broadcast_tx_sync
                    - tx_search
                params:
                  type: object
                  description:
                    RPC method parameters. The expected shape depends on
                    `method`.
            example:
              id: 1
              method: abci_query
              params:
                data: '0a14...'
                path: /cosmos.bank.v1beta1.Query/AllBalances
                prove: false
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  jsonrpc:
                    type: string
                    description: JSON-RPC protocol version.
                  id:
                    type: integer
                    description: Echoed request ID.
                  result:
                    type: object
                    description: RPC method result.
              example:
                jsonrpc: '2.0'
                id: 1
                result: {}
        '400':
          description:
            Bad request — unsupported chain, method, or parameter shape.
  /nft:
    post:
      operationId: nftTransfer
      summary: NFT Transfer
      description: |-
        Computes routes and generates transaction messages for cross-chain NFT transfers within the Initia ecosystem. Supports:
        - Same-chain transfers (EVM, Move, and Wasm chains)
        - Single-hop IBC (L2 to L1 or L1 to L2 via ICS-721)
        - Multi-hop (L2 to L1 to L2, two IBC hops)
      tags:
        - NFT
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - from_address
                - from_chain_id
                - to_address
                - to_chain_id
                - token_ids
                - collection_address
              properties:
                from_address:
                  type: string
                  description: Sender address.
                from_chain_id:
                  type: string
                  description: Source chain ID.
                to_address:
                  type: string
                  description: Recipient address.
                to_chain_id:
                  type: string
                  description: Destination chain ID.
                token_ids:
                  type: array
                  description: Token IDs to transfer (maximum 30).
                  maxItems: 30
                  items:
                    type: string
                collection_address:
                  type: string
                  description:
                    NFT collection contract address. Pass an empty string for
                    Move chains.
                class_id:
                  type: string
                  description: IBC class ID. Required for cross-chain transfers.
                class_trace:
                  type: object
                  description: IBC class trace for multi-hop transfers.
                  properties:
                    path:
                      type: string
                      description: IBC trace path.
                    base_class_id:
                      type: string
                      description: Base class ID.
                object_addresses:
                  type: array
                  description:
                    Move object addresses (maximum 30). Required for same-chain
                    Move transfers.
                  maxItems: 30
                  items:
                    type: string
                l1_recover_address:
                  type: string
                  description:
                    L1 recovery address for L2 to L1 to L2 transfers. Defaults
                    to from_address.
                outgoing_proxy:
                  type: string
                  description: Outgoing proxy contract address (Wasm chains).
                timeout:
                  type: integer
                  default: 1800
                  description: IBC timeout in seconds.
            example:
              from_address: init1abc...
              from_chain_id: echelon-1
              to_address: init1def...
              to_chain_id: yominet-1
              token_ids:
                - '1'
                - '2'
              collection_address: '0xabc...'
              class_id: wasm.init1.../nft-transfer/channel-0/...
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  msgs:
                    type: array
                    description:
                      Array of transaction messages appropriate for the source
                      chain's VM type.
                    items:
                      type: object
                      properties:
                        typeUrl:
                          type: string
                        value:
                          type: object
              example:
                msgs:
                  - typeUrl: /ibc.applications.nft_transfer.v1.MsgTransfer
                    value: {}
