---
title: "List approval requests"
method: GET
path: "/v1/hitl/approvals"
tags: ["hitl"]
---

# List approval requests

`GET /v1/hitl/approvals`

## Query parameters

- `conversation_id` string, uuid, nullable — Filter to a single conversation (session).
- `status` string, nullable — Filter by status; 'all' lists every status.
- `approver_role` string, nullable — Filter to a single approver role.
- `cursor` string, nullable
- `limit` integer

## Response `200`

Successful Response

- CursorPageApprovalRequestSummary
  - `items` ApprovalRequestSummary[], required
    - `id` string, uuid, required
    - `conversation_id` string, uuid, 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
    - `approver_role` string, required
    - `status` string, required
    - `suspend_message` string, nullable
    - `created_at` string, date-time, required
    - `timeout_at` string, date-time, nullable
  - `next_cursor` string, nullable
  - `has_more` boolean, 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/revisions/5a5597ebb2d6/schema)
