---
title: "List serving capacity lanes and their members (platform admin)"
method: GET
path: "/v1/admin/inference/serving/lanes"
tags: ["Internal"]
---

# List serving capacity lanes and their members (platform admin)

`GET /v1/admin/inference/serving/lanes`

The lane view, derived by the same pipeline that drives rollouts, so a surface can never narrate a different split than the controller executes: per lane, its members oldest first with their live catalog weight and share, the green if the lane is rolling, and a flag when the two sides run different pool policies. Filter by publicModelId and nodePool to answer "does this lane already have a green" before creating one.

## Query parameters

- `publicModelId` string
- `nodePool` string

## Response `200`

Lanes

- ServingLaneList
  - `items` ServingLane[], required
    - `greenId` string — The lane's opted-in green; absent when the lane is not rolling
    - `lane` string, required — The lane's label, publicModelId/nodePool
    - `members` ServingLaneMember[], required — Oldest first
      - `backendHealthy` boolean — Whether this member's catalog backend is marked healthy. Absent when the catalog could not be read or the backend is not registered at all. Read it with liveWeight: a healthy member at weight 0 is a standby, an unhealthy one has been pulled out of rotation.
      - `id` string, required
      - `liveWeight` integer, required — The catalog weight this member's backend currently carries. 0 for an unregistered backend and for a demoted blue, which are different states with the same number: read role and status to tell them apart.
      - `readyReplicas` integer, required
      - `replicasDesired` integer, required
      - `role` 'independent' | 'blue' | 'green', required — A deployment's part in its lane RIGHT NOW. independent = carries its own weight and is not in a rollout (also what every lane member is when no green exists). blue = an older member a green is ramping against. green = the opted-in successor.
      - `share` integer, required — This member's percentage of the lane's total weight, rounded. 0 when the lane carries no weight at all.
      - `status` string, required — The deployment's lifecycle status
    - `nextAction` string — What the rollout controller will do next on this lane, in one sentence for an operator. The same value the green's rollout state reports. Absent when the lane is not rolling.
    - `nodePool` string — Absent or empty = the legacy model-wide lane
    - `phase` 'none' | 'waiting_for_replicas' | 'ramping' | 'capacity_hold' | 'at_full_weight' | 'cut_over' | 'rolled_back' | 'paused' — Where a roll is. capacity_hold is the state the capacity guard produces: green is ramped as far as its serving capacity justifies and will not advance until it is scaled up. paused is an operator hold: the ramp is frozen at its current share and traffic is untouched, which is categorically weaker than rolled_back.
    - `policyMismatch` boolean — The lane's members run different pool member-selection policies
    - `publicModelId` string, required
    - `rolling` boolean, required — The lane has a green with something to replace
    - `totalWeight` integer, required — Sum of the lane members' live catalog weights

## Other responses

- `400` — The request is invalid
- `401` — Missing or invalid API key
- `403` — API key lacks the required scope
- `404` — Resource not found
- `409` — The request conflicts with existing state
- `503` — A required integration (e.g. payments) is not configured

---

[API](https://skmtc.net/openrelay/apis/openrelay-api.md) · [All operations](https://skmtc.net/openrelay/apis/openrelay-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/openrelay/openrelay-api/revisions/ed76b41e8006/schema)
