---
title: "Read one escalation (the wait-for-human loop)"
method: GET
path: "/orgs/v1/{org_id}/escalations/{escalation_id}"
tags: ["Escalations"]
---

# Read one escalation (the wait-for-human loop)

`GET /orgs/v1/{org_id}/escalations/{escalation_id}`

## Request

- Base URL: `https://api.run402.com`
- URL: `https://api.run402.com/orgs/v1/{org_id}/escalations/{escalation_id}`
- Auth: none declared

Poll this until `status` is `acknowledged` — that is a named human taking ownership, with acknowledged.by_email and .channel. Then proceed per their direction, or stand down. Auth: SIWX wallet, control-plane session, or a run402_agent_key grant key. A project service_key is REJECTED — an escalation is agent judgement and needs a principal to attribute. Deny is 403, never 404. NEVER lifecycle-gated: an org in grace is exactly when an agent may most need a human.

## Path parameters

- `org_id` string, uuid, required
- `escalation_id` string, uuid, required

## Query parameters

- `include` 'delivery'

## Response `200`

The escalation.

- AgentEscalation: An agent's page to a human, and its whole life story.
  - `escalation_id` string, uuid
  - `org_id` string, uuid
  - `project_id` string, nullable: Soft reference — the escalation outlives the project's deletion.
  - `raised_by` object
    - `kind` 'principal' | 'rule': event-attention-rules: `rule` when a routing rule with channel escalation raised it — then principal_id is null and rule_id / rule_owner_email name the rule and who set it (rule_id is null once that rule is deleted).
    - `principal_id` string, uuid, nullable
    - `rule_id` string, uuid, nullable
    - `rule_owner_email` string, nullable
    - `grant_key_id` string, uuid, nullable
    - `presence_name` string, nullable
  - `severity` 'normal' | 'high'
  - `reason` string: The agent's argument, verbatim. Rendered as DATA everywhere it is shown. For a rule raise, the platform's composed account of the event or window: what happened, where, the bounded facts, and who set the rule.
  - `attached_count` integer: event-attention-rules: further matches of the raising rule that joined this escalation while it was open or acknowledged, instead of paging again. Always 0 for an agent raise.
  - `last_attached_at` string, date-time, nullable
  - `details` object: Structured sidecar. Readable here; never rendered into a page.
  - `status` 'open' | 'acknowledged' | 'resolved'
  - `level` integer: Which contact level is currently paged.
  - `raised_at` string, date-time
  - `deadline_at` string, date-time: When an unacknowledged escalation climbs to the next level.
  - `acknowledged` object, nullable
    - `at` string, date-time
    - `by_email` string, nullable
    - `channel` 'token' | 'authenticated'
  - `resolved` object, nullable
    - `at` string, date-time
    - `by_email` string, nullable
    - `note` string, nullable
  - `climbs` object[]: Append-only deadman history.
    - `from_level` integer
    - `to_level` integer
    - `at` string, date-time
    - `reason` 'deadline_lapsed'
  - `repage_count` integer: Top-level re-pages so far. At the bound the row rests OPEN — never auto-resolved.
  - `delivery_attempts` object[]: Only when include=delivery. What ACTUALLY happened on the wire, read from the audit log rather than assumed.
    - `email` string
    - `channel` string
    - `status` string
    - `error` string, nullable
    - `at` string, date-time

## Other responses

- `400`: Invalid input (missing/over-cap reason, malformed email, bad level or status).
- `401`: Missing or invalid auth.
- `403`: Not authorized (never a 404 existence oracle); also rate/open-bound denials (QUOTA_EXCEEDED with used/limit) and step-up required.

---

[API](https://skmtc.dev/run402/apis/run402-api.md) · [All operations](https://skmtc.dev/run402/apis/run402-api/llms.txt) · [OpenAPI document](https://skmtc.dev/run402/apis/run402-api/revisions/893607557f50?raw)
