---
title: "Approve or reject a waiting post (dashboard session only)"
method: POST
path: "/api/approvals/{id}/decision"
---

# Approve or reject a waiting post (dashboard session only)

`POST /api/approvals/{id}/decision`

## Request

- Base URL: `https://postwire.io`
- URL: `https://postwire.io/api/approvals/{id}/decision`
- Auth: HTTP bearer

Only a person signed in to the PostWire dashboard can call this: an API key made in API & MCP, an AI connector or any other source gets 403 approval_requires_human — an agent can never approve its own post. Approve all networks, or only `networks`; `edits` replaces a network's text before it goes out; `run_at` sets a new time. A post whose time is now or has passed is published at once and the response carries each network's result; a post approved before its time goes out at that time. Reject keeps `reason`, shown to whoever sent it. One decision wins: a second one answers 409 not_pending.

## Path parameters

- `id` string, uuid, required

## Request body

- object
  - `action` 'approve' | 'reject', required
  - `networks` string[]: Approve only these networks of the post; the others are dropped from it. Default: all.
  - `edits` object: { "<network>": { "text": "…", "title": "…" } } — the approved text for that network.
  - `run_at` string, date-time: Publish at this time instead (not in the past, up to 365 days ahead).
  - `reason` string: Why it was rejected (or a note with an approval).

## Response `200`

{ ok, decision: approved|rejected, approval, late (its time had passed), post: { id, status, run_at, platforms }, results? (when it was published now), message }

## Other responses

- `400`: bad_request (no network chosen, an emptied text, a past run_at)
- `403`: approval_requires_human
- `404`: not_found
- `409`: not_pending: already decided, or withdrawn

---

[API](https://skmtc.dev/postwire/apis/postwire-api.md) · [All operations](https://skmtc.dev/postwire/apis/postwire-api/llms.txt) · [OpenAPI document](https://skmtc.dev/postwire/apis/postwire-api/revisions/513a409ab8f7?raw)
