---
title: "Approve a creator-owned draft post"
method: POST
path: "/posts/{post_id}/approve"
---

# Approve a creator-owned draft post

`POST /posts/{post_id}/approve`

## Request

- Base URL: `https://api.bamf.ai/v1`
- URL: `https://api.bamf.ai/v1/posts/{post_id}/approve`
- Auth: HTTP bearer

Records the creator owner's approval for an unscheduled, unpublished draft. The transition atomically persists canonical BAMF post review metadata and any matching approval request, uses an Approved label when the workspace has one, and otherwise preserves the unscheduled draft status. It returns a replayable receipt and never schedules, publishes, calls, or mutates a provider. Only the exact creator owner may approve; workspace managers, members, clients, and creator-scoped keys for another creator are denied.

## Path parameters

- `post_id` string, required

## Headers

- `Idempotency-Key` string, required

## Response `200`

Creator approval receipt; provider_action and provider_mutation are false.

- CreatorPostApprovalResponse
  - `data` Post, required
    - `id` string
    - `author_id` string
    - `creator_id` string: Alias used by preview responses; raw post rows may use author_id.
    - `status_id` string, nullable
    - `post_type` 'text' | 'image' | 'carousel' | 'video' | 'article' | 'poll'
    - `platform` 'linkedin' | 'x' | 'twitter' | 'null', nullable
    - `content` string
    - `topic` string, nullable
    - `first_comment` string, nullable
    - `scheduled_for` string, date-time, nullable
    - `generated_image_url` string, nullable
    - `uploaded_image_url` string, nullable
    - `document_url` string, nullable
    - `video_url` string, nullable
    - `created_at` string, date-time, nullable
    - `updated_at` string, date-time, nullable
  - `receipt` CreatorPostApprovalReceipt, required
    - `schema` 'creator-post-approval-receipt/v1', required
    - `operation` 'post.approve', required
    - `post_id` string, required
    - `creator_id` string, required
    - `approval_request_id` string, nullable
    - `state` 'approved', required
    - `previous_state` string
    - `approved_at` string, date-time, required
    - `approved_by` string
    - `idempotency_key` string, required
    - `provider_action` unknown, required
    - `provider_mutation` unknown, required
    - `replay` boolean, required

## Other responses

- `400`: Missing or unbounded Idempotency-Key.
- `403`: Exact creator ownership is required.
- `409`: Post is already approved, scheduled, published, or not a draft.

---

[API](https://skmtc.dev/bamf/apis/bamf-developer-platform-api.md) · [All operations](https://skmtc.dev/bamf/apis/bamf-developer-platform-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bamf/apis/bamf-developer-platform-api/revisions/a390dd3294bd?raw)
