---
title: "Get the per-leg fee model for an approved cross-venue market link"
method: GET
path: "/orders/route-fees"
tags: ["Routing"]
---

# Get the per-leg fee model for an approved cross-venue market link

`GET /orders/route-fees`

## Request

- Base URL: `https://execution.kairos.trade`
- URL: `https://execution.kairos.trade/orders/route-fees`
- Auth: API key in header `X-Client-Id` and API key in header `X-Api-Key` and API key in header `X-Api-Secret`

Returns the fee model each leg of the link charges per side, so a client can show the routing cost before quoting a size. Every union leg is listed; `executable` says whether the router fires on it for THIS caller and `connectable` whether connecting a Kalshi account would make it so. An unrecognized link is a `200` with `routed: false` and an empty `legs`.
**Auth & scope.** Requires `trade:read` for `provider`.

## Query parameters

- `provider` string, required
- `market_id` string, required

## Response `200`

Per-leg fee models.

- OrderRouteFeesResponse: Response for `GET /orders/route-fees`. An unknown link is a `200` with `routed` set false and an empty `legs`.
  - `routed` boolean, required: `true` only when at least two legs are `executable` for the caller.
  - `synthetic_id_yes` string, nullable: The union book id for the link's YES side, or `null` when no union is asserted.
  - `synthetic_id_no` string, nullable
  - `book_synthetic_id_yes` string, nullable: The deep (every resting level) union for the YES side, or `null` until the synthetic book service has accepted it.
  - `book_synthetic_id_no` string, nullable
  - `legs` object[], required: Every leg of the link's union book, routable for this caller or not.
    - `provider` string, required
    - `market_id` string, required
    - `stream_key` string, required
    - `market_id_no` string: The venue market that books the link's NO side when it is not `market_id` (a Kalshi two-ticker game). Absent otherwise.
    - `stream_key_no` string
    - `executable` boolean, required: Whether the router fires on this leg FOR THE CALLER. Polymarket and Predict.fun always; Hyperliquid when routing is enabled and the account can trade there; Kalshi only when the account has a Kalshi credential connected. Per caller, unlike the catalog's venue-level `executableVenues`.
    - `connectable` boolean, required: `true` for a Kalshi leg the caller could make executable by connecting a Kalshi account. Always `false` on other venues and for connected callers.
    - `token_id_yes` string, nullable
    - `token_id_no` string, nullable
    - `yes` OrderRouteFeeModelView
      - `model` 'curve' | 'min_side_bps' | 'none', required
      - `rate_ppm` integer, nullable
      - `bps` integer, nullable
      - `estimated` boolean, required
    - `no` OrderRouteFeeModelView
      - `model` 'curve' | 'min_side_bps' | 'none', required
      - `rate_ppm` integer, nullable
      - `bps` integer, nullable
      - `estimated` boolean, required
    - `yes_sell` OrderRouteFeeModelView
      - `model` 'curve' | 'min_side_bps' | 'none', required
      - `rate_ppm` integer, nullable
      - `bps` integer, nullable
      - `estimated` boolean, required
    - `no_sell` OrderRouteFeeModelView
      - `model` 'curve' | 'min_side_bps' | 'none', required
      - `rate_ppm` integer, nullable
      - `bps` integer, nullable
      - `estimated` boolean, required

## Other responses

- `400`: Malformed authenticated user id. Empty body (status code only).
- `401`: No valid credential presented — missing/invalid API-key headers or an invalid/expired session token.
- `403`: Missing `trade:read` scope, or API-key access to `provider` is disabled. Empty body (status code only).
- `503`: API-key access to `provider` could not be checked (fails closed). Empty body (status code only).

---

[API](https://skmtc.dev/kairos/apis/kairos-order-execution-api.md) - [All operations](https://skmtc.dev/kairos/apis/kairos-order-execution-api/llms.txt) - [OpenAPI document](https://skmtc.dev/kairos/apis/kairos-order-execution-api/revisions/9ba7d463d505?raw)
