# Post actions

> Approve, reject, cancel, reschedule, and retry first comments on Botdoor posts. Who may do each, bodies and errors.

Source: https://docs.botdoor.co/api/post-actions/

All return `{"post": {…}}` ([shape](https://docs.botdoor.co/api/posts-read/)).

| Action | Body | Who |
|---|---|---|
| `POST /posts/{id}/approve` | `{"publishNow"?: true, "scheduledFor"?: "…"}` | Signed-in person only |
| `POST /posts/{id}/reject` | `{"reason"?: "…"}` | Key or person (a key may reject its own post) |
| `POST /posts/{id}/cancel` | none | Key or person |
| `POST /posts/{id}/reschedule` | `{"scheduledFor": "…"}` | Key or person |
| `POST /posts/{id}/first-comment/retry` | none | Key or person |

## Approve

Approves a `needs_approval` post. If it has a future `scheduledFor` it is scheduled for then; otherwise it publishes now. If the time has passed you get `409 schedule_passed` with `details.choices`: send `publishNow: true` or a new `scheduledFor`. Keys get `403 approval_requires_human`, and a key can never approve its own post (`self_approval_forbidden`).

## Reject

Stops a waiting post for good. `reason` is shown to the author. Keys may reject, including their own posts.

## Cancel

Works while `needs_approval` or `scheduled`. Cancelling twice is fine. Otherwise `409 not_cancellable`.

## Reschedule

New ISO 8601 time with offset. Waiting posts change locally; scheduled ones are moved at the provider. Otherwise `409 not_reschedulable`.

## Retry first comment

Only when `firstComment.status` is `failed`; it can't post twice. Otherwise `409 first_comment_not_failed`.

## Errors

| Status | Code |
|---|---|
| 403 | `approval_requires_human`, `self_approval_forbidden`, `session_required`, `cross_site_request` |
| 404 | `post_not_found` |
| 409 | `not_awaiting_approval`, `schedule_passed`, `not_cancellable`, `not_reschedulable`, `first_comment_not_failed`, `not_retryable` |

## Common questions

### Can my bot approve its own posts?

No. Approval needs a signed-in person, and a key can never approve a post it created.

### Can a bot cancel a post?

Yes, while it is waiting or scheduled.

### What if the scheduled time passed while waiting for approval?

Nothing was posted. Approve with publishNow: true, or send a new scheduledFor.
