---
title: "Get Auto Router Session"
method: GET
path: "/auto_router/session"
tags: ["auto router"]
---

# Get Auto Router Session

`GET /auto_router/session`

One auto-routed session, for the key that ran it: the model its last turn was routed to and the
session's spend against the router's savings baseline. Built for a coding agent's status line
or stop hook, so any virtual key may call it and only ever sees rows written under its own
key hash. Reads the LiteLLM_AutoRouterSession rollup, which the asynchronous spend flush
fills a moment after each turn; a session with no flushed auto-routed turn yet is a 404. The
id is bounded the way the writer bounded it, so an oversized client id still finds its row.

## Query parameters

- `session_id` string, required — The client session id (x-*-session-id header) the turns were sent under

## Response `200`

Successful Response

- AutoRouterSessionResponse — One auto-routed session as its own key sees it: what the last turn ran on, and what the session cost against the router's savings baseline (the priciest model in its hardest tier).
  - `session_id` string, required
  - `router_name` string, required — The auto-router alias the session's requests were sent to
  - `router_type` string, required — complexity, adaptive or quality
  - `turns` integer, required — Auto-routed turns the rollup has recorded for this session so far
  - `last_model` string, required — The deployment model the most recent turn was routed to
  - `spend` number, required — What the session's routed traffic actually cost, classifier calls included
  - `savings_estimated_turns` integer, required — Turns covered by the current savings estimator; legacy estimates are excluded
  - `savings_estimated_actual_spend` number, required — Actual spend, including classifier cost, for covered turns only
  - `saved_spend` number, nullable, required — Estimated savings for covered turns only, net of classifier cost
  - `baseline_spend` number, nullable, required — Estimated single-model cost; unavailable unless every turn is covered
  - `savings_estimated_baseline_spend` number, nullable, required — Estimated single-model cost for covered turns only
  - `baseline_model` string, nullable, required — The savings baseline most covered turns were priced against, recorded turn by turn, so it still names the counterfactual after the router is reconfigured or removed. None when no turn recorded one: rows from before the baseline was recorded, and adaptive and quality routers, which derive no baseline and so report no savings
  - `baseline_models` object, required — Covered turns priced against each baseline model; more than one entry means the router's baseline changed mid-session and baseline_spend mixes both

## Other responses

- `422` — Validation Error

## Changes

- **2026-09-30** `85ac4287140e` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/flock/apis/litellm-api/changes/auto_router/session/get.md)

---

[API](https://skmtc.dev/flock/apis/litellm-api.md) · [All operations](https://skmtc.dev/flock/apis/litellm-api/llms.txt) · [OpenAPI document](https://skmtc.dev/flock/apis/litellm-api/revisions/611a0ed75fe8?raw)
