POST /v1/escalations/{escalation_id}/resolve
Resolve a third-party escalation. Escalation is a Pro+ decision path for scopes listed in requires_escalation_for.
When you need this
When /check returns decision: "escalate" inside a scope result, the matching scope requires approval from the configured escalation target before the action may proceed.
The escalation flow:
/checkreturnsdecision: "escalate"with anescalation_id- Your app routes the request to the approver shown by
escalation_to - Call
POST /v1/escalations/{escalation_id}/resolvewithresolution: "approved"or"rejected" - If approved, re-call
/checkwith the sameauthorization_id, scope, and resource — it returnsallowonce and consumes the approval - If rejected, re-call
/check— it returnsdenywithreason: "escalation_rejected"
Escalations expire after 24 hours.
Request
POST /v1/escalations/esc_01HXZ.../resolve
Authorization: Bearer allowly_l1_s001_...
Content-Type: application/json
{
"resolution": "approved",
"resolved_by": "manager:8821",
"note": "Approved for this candidate only."
}
| Field | Required | Description |
|---|---|---|
resolution | yes | approved or rejected |
resolved_by | yes | Opaque internal approver ID. Do not use raw email or legal name. |
note | no | Optional note copied into the escalation resolution receipt. |
Response — changed
The first successful resolution creates an escalation.resolve receipt.
{
"escalation_id": "esc_01HXZ...",
"status": "approved",
"resolved_by": "manager:8821",
"resolved_at": "2026-04-21T14:33:17.000Z",
"receipt": {
"status": "pending",
"receipt_id": "rcp_01HXZESCALATION...",
"ready_at_estimate": "2026-04-21T14:33:18.000Z",
"url": "https://api.allowly.ai/v1/receipts/rcp_01HXZESCALATION..."
}
}
Response — same resolution repeated
Resolving the same escalation with the same resolution is idempotent and returns receipt: null.
{
"escalation_id": "esc_01HXZ...",
"status": "approved",
"resolved_by": "manager:8821",
"resolved_at": "2026-04-21T14:33:17.000Z",
"receipt": null
}
Nonce-like behavior
| Condition | Status returned |
|---|---|
| Valid pending escalation | 200 |
| Already resolved with the same resolution | 200, receipt: null |
| Already resolved with a different resolution | 409 Conflict |
| Approval already consumed by a successful re-check | 409 Conflict |
| Expired | 409 Conflict |
| Not found or wrong workspace | 404 Not Found |
| Workspace plan does not include escalation | 402 Payment Required |
Important
Only resolve escalations after an approver actually approves or rejects the request. Never auto-approve escalations server-side — the escalation path exists for cases where the user authorization is valid but the action needs a separate authority.