---
title: "Get an approval request"
method: GET
path: "/v1/hitl/approvals/{approval_id}"
tags: ["hitl"]
---

# Get an approval request

`GET /v1/hitl/approvals/{approval_id}`

## Path parameters

- `approval_id` string, uuid, required

## Response `200`

Successful Response

- ApprovalRequestDetail — Full detail view of a single ``approval_requests`` row.
  - `id` string, uuid, required
  - `organization_id` string, uuid, required
  - `conversation_id` string, uuid, required
  - `conv_turn_id` string, uuid, nullable, required
  - `node_id` string, nullable, required
  - `subject_kind` 'workflow_node' | 'tool_call', required — What a suspended approval is gating — the caller-agnostic dispatch key. The :class:`ResumeDispatcher` (HITL-03 §1) routes a recorded decision back to the right continuation by this value: a workflow ``ApprovalNode`` resumes an edge (``WORKFLOW_NODE``); a Policy/tool-level gate resumes a partial turn (``TOOL_CALL``). Persisted to a ``VARCHAR(20)`` — a StrEnum serializes to its string value, so it needs no migration.
  - `subject_ref` string, required
  - `payload` object
  - `suspend_message` string, nullable
  - `approver_role` string, required
  - `status` string, required
  - `decision` string, nullable
  - `decided_by` string, nullable
  - `decided_at` string, date-time, nullable
  - `note` string, nullable
  - `timeout_at` string, date-time, nullable
  - `resume_token` string, nullable
  - `created_at` string, date-time, required

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/oneloop-hq/apis/feather-api.md) · [All operations](https://skmtc.net/oneloop-hq/apis/feather-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/oneloop-hq/feather-api/versions/888bdd5c076e/schema)
