---
title: "Approve a post that is waiting for approval"
method: POST
path: "/posts/{id}/approve"
tags: ["Posts"]
---

# Approve a post that is waiting for approval

`POST /posts/{id}/approve`

Approves the current step of the post's approval workflow, on behalf of the user who owns this API key. That user must be a listed approver for the workflow's CURRENT step — steps are approved in order, and a key holder who is only an approver on a later step gets `forbidden` until earlier steps clear. If this is the last step, the post is finalized immediately: it moves to `scheduled` (future `schedule_at`) or `posting` (due now or in the past). If more steps remain, the post stays `in_approval` and the next step's approvers are notified. Check `approval_status` on GET /posts/{id} first — only a post with status `in_approval` can be approved.

## Path parameters

- `id` string, required

## Response `200`

Approval recorded

- object
  - `data` object
    - `id` string
    - `status` string — The post's status after this call: `in_approval` (more steps remain), `scheduled`, or `posting`.
    - `approval_status` 'pending' | 'approved'
    - `message` string

## Other responses

- `400` — `invalid_status` — the post is not waiting for approval. `already_finalized` — someone else already decided this step (race condition).
- `403` — `forbidden` — the API key's owner is not a listed approver for the workflow's current step.
- `404` — Post not found, or the post has no approval workflow attached

---

[API](https://skmtc.dev/omnisocials/apis/omnisocials-api.md) · [All operations](https://skmtc.dev/omnisocials/apis/omnisocials-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/omnisocials/omnisocials-api/revisions/e53b89af0b98/schema)
