---
title: "Approve Message"
method: POST
path: "/v1/ask-feather/sessions/{session_id}/messages/approve"
tags: ["ask-feather"]
---

# Approve Message

`POST /v1/ask-feather/sessions/{session_id}/messages/approve`

Resume a turn paused for tool approval (Q7): validate ownership + that the
named turn is awaiting approval, re-open the SAME row in place, and enqueue the
resume leg. The client re-subscribes to the (refreshed) stream for the new leg.

## Path parameters

- `session_id` string, uuid, required

## Request body

- ApproveMessageRequest
  - `turn_id` string, uuid, required
  - `decisions` ApprovalDecision[], required
    - `tool_call_id` string, required
    - `approved` boolean, required

## Response `202`

Successful Response

- TurnAcceptedResponse — Phase 3 split contract: POST enqueues a turn and returns its id + status; the client then opens a separate ``…/turns/{turn_id}/stream`` SSE request to watch it. ``status`` is ``queued`` immediately after enqueue.
  - `turn_id` string, uuid, required
  - `status` string, required

## Other responses

- `422` — Validation Error

## Changes

- **2026-08-12** `5a5597ebb2d6` — 2 breaking, 1 info
  - added the new required request property `turn_id`
  - removed the success response with the status `200`
  - added the success response with the status `202`

[Change history](https://skmtc.dev/oneloop-hq/apis/feather-api/changes/v1/ask-feather/sessions/:session_id/messages/approve/post.md)

---

[API](https://skmtc.dev/oneloop-hq/apis/feather-api.md) · [All operations](https://skmtc.dev/oneloop-hq/apis/feather-api/llms.txt) · [OpenAPI document](https://skmtc.dev/oneloop-hq/apis/feather-api/revisions/9cd7291d4228?raw)
