---
title: "Resolve a team's ladder against right now, sending nothing"
method: GET
path: "/api/{org_id}/oncall/teams/{team_id}/escalation-preview"
tags: ["OnCall"]
---

# Resolve a team's ladder against right now, sending nothing

`GET /api/{org_id}/oncall/teams/{team_id}/escalation-preview`

## Request

- Base URL: `https://api.openobserve.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.openobserve.ai/api/{org_id}/oncall/teams/{team_id}/escalation-preview`
- Auth: API key in header `Authorization`
- TypeScript: <https://skmtc.dev/openobserve/apis/openobserve-api-http/docs/api/:org_id/oncall/teams/:team_id/escalation-preview/get.ts> (a function with typed inputs; its response is checked against the schema)

## Path parameters

- `org_id` string, required
- `team_id` string, required

## Query parameters

- `priority` string
- `at` integer

## Response `200`

Success

- EscalationPreview
  - `at` integer, required
  - `channels` Channel[], required: The channels the policy names, restricted to what this build can send.
  - `cross_team_moves` string[], required: The only ways a page ever leaves this team, stated so the screen does not have to imply one that does not exist. There is no team hierarchy in this product — no parent team, no sibling team, nothing above a team to climb to. A rung's targets are the whole of who a ladder can reach, and the one real cross-team move is a responder pressing handoff with a `to_team_id`.
  - `ends_with` string, required: What happens when the ladder runs out — the "Escalation ends" line.
  - `l0` PreviewL0, required
    - `allow_downgrade` boolean, required
    - `allow_promotion` boolean, required
    - `allow_suppress` boolean, required
    - `available` boolean, required: Whether this deployment can actually run the agent. Same honesty rule the channel list follows: a policy naming a thing that cannot happen is worse than one that does not name it, because the screen reads as configured. A `gate` with no agent reachable does not hold the page — it pages immediately — and this is what lets the screen say so.
    - `mode` string, required: `parallel` | `gate` | `only` | `off`, already resolved for this priority — so a caller never re-derives the P1 invariant or the pages-nobody rule.
    - `summary` string, required: One sentence, ready to render.
    - `triage_budget_seconds` integer, required: How long a `gate` holds the page waiting for a verdict.
  - `pages_anyone` boolean, required: This priority pages a human at all.
  - `priority` string, required
  - `reaches_nobody` boolean, required: Nobody at all would be reached, at any rung. A dry run's headline.
  - `rungs` PreviewRung[], required
    - `after_micros` integer, required
    - `recipients` PreviewRecipient[], required
      - `deliverable_channels` Channel[], required
      - `reason` string, required: Why this rung names them — "you are on call".
      - `user_email` string, required
      - `why_not` string, nullable
      - `would_a_page_land` boolean, required
    - `resolves_to_nobody` boolean, required: The rung resolves to nobody at this instant. The single most important thing this endpoint can say.
    - `targets` string[], required: What the rung says, before resolution — `the on-call`, `ana@o2.ai`.
  - `team_id` string, required
  - `team_name` string, required

## Other responses

- `400`: Invalid
- `404`: Not found

---

[API](https://skmtc.dev/openobserve/apis/openobserve-api-http.md) - [All operations](https://skmtc.dev/openobserve/apis/openobserve-api-http/llms.txt) - [OpenAPI document](https://skmtc.dev/openobserve/apis/openobserve-api-http/revisions/0529b8a10252?raw)
