> ## Documentation Index
> Fetch the complete documentation index at: https://docs.omegas.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Resolve escalation

> The escalation destination's callback. Authenticated by the per-escalation bearer, not an API key.



## OpenAPI

````yaml /schemas/operator.json post /v1/escalations/{id}/resolve
openapi: 3.1.0
info:
  title: Omegas Operator API
  version: 0.1.0
  description: >-
    The public /v1 machine surface: cloud browser devices, tasks, live-view
    sessions, escalations, usage, webhook endpoints, and the audit trail.
    Generated from the same OpenAPI document the Rust API is checked against.
servers:
  - url: https://api.omegas.dev
    description: Production
security: []
paths:
  /v1/escalations/{id}/resolve:
    post:
      tags:
        - Endpoints
      summary: Resolve escalation
      description: >-
        The escalation destination's callback. Authenticated by the
        per-escalation bearer, not an API key.
      operationId: resolve_escalation
      parameters:
        - name: id
          in: path
          description: Escalation id (`esc_<uuid>`)
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ResolveEscalationBody'
        required: true
      responses:
        '200':
          description: Settled, or a replay of an already-settled attempt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResolveEscalationResponse'
        '404':
          description: escalation_not_found — unknown id, or the bearer did not match
components:
  schemas:
    ResolveEscalationBody:
      type: object
      description: >-
        The resolve callback body.


        Deliberately a SUPERSET with defaults, because the deployed escalation
        destination does not send

        the field set this endpoint would most like. Its resume POST is

        `{"source": "handoff", "handoff_id": "<id>", "answer": <str|null>}` —
        `cleared` and `by` are

        captured on ITS resolve API but are not forwarded to us
        (`app/main.py:179` in the handoff repo).


        So: `cleared` defaults to TRUE, because that callback fires only from
        the destination's resolve

        path and never on expiry — its arrival IS the human's "done" signal.
        `resolved_by` falls back to

        `source`, then to a constant. A runtime that DOES send the richer shape
        gets it honoured. This

        keeps the contract runtime-agnostic without requiring a change to a
        product we do not own.
      properties:
        answer:
          type:
            - string
            - 'null'
          description: The human's answer, for a `question`.
        cleared:
          type: boolean
          description: >-
            Whether the human reports the wall actually cleared. Defaults true —
            see above.
        resolved_by:
          type:
            - string
            - 'null'
          description: Opaque label for who answered.
        source:
          type:
            - string
            - 'null'
          description: >-
            Accepted as a fallback for `resolved_by` — what the deployed
            destination actually sends.
    ResolveEscalationResponse:
      type: object
      required:
        - id
        - object
        - status
        - applied
      properties:
        applied:
          type: boolean
          description: >-
            `true` when THIS call settled the attempt; `false` for a replay or a
            late answer. Both are

            200 — a redelivered callback is expected, not an error.
        id:
          type: string
        object:
          type: string
        status:
          type: string

````