---
title: "Approve or reject a held post"
method: POST
path: "/posts/{id}/approve"
---

# Approve or reject a held post

`POST /posts/{id}/approve`

## Request

- Base URL: `https://xpost.to/api/v1`
- URL: `https://xpost.to/api/v1/posts/{id}/approve`
- Auth: HTTP bearer

Decide a `pending_approval` post. Human keys with `posts:approve` only — agent keys are always 403 here; approval is the product's trust boundary.

## Path parameters

- `id` string, uuid, required

## Request body

- object
  - `decision` 'approve' | 'reject', required
  - `reason` string

## Response `200`

Decision applied

- object

## Other responses

- `401`: Missing or invalid API key
- `403`: Agent key, or missing posts:approve scope
- `404`: Post not found in this project
- `409`: Post is not pending approval
- `429`: Rate limited

---

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