Skip to main content

Overview

Every generated post enters a review queue before it can be published. The review queue gives you — or your bot — a chance to inspect, approve, or reject content.

Review Status State Machine

Each generated post has a review_status field that moves through the following states:
pending_review → approved   → published
              → rejected
StateMeaning
pending_reviewAwaiting a review action. Default state after generation completes.
approvedApproved but not yet published (only reached via send-to-compose).
rejectedRejected — will not be published.
publishedSuccessfully published to at least one account.
A post can only be reviewed once its generation status is completed. Check that all media_items[].status === "completed" before taking a review action.

Three Review Actions

1. Approve and publish immediately

Creates an outgoing post and triggers publishing to all connected accounts in a single call.
curl -X POST "https://reelmirror.com/api/v1/generated-posts/{post_id}/approve" \
  -H "Authorization: Bearer rm_your_api_key"
{
  "status": "publishing",
  "outgoing_post_id": "uuid"
}
Requires: At least one active publishing account connected to the persona.

2. Reject

Marks the post as rejected. No outgoing post is created.
curl -X POST "https://reelmirror.com/api/v1/generated-posts/{post_id}/reject" \
  -H "Authorization: Bearer rm_your_api_key"

3. Send to compose

Approves the post and creates a draft outgoing post for further editing, without publishing immediately. Sets review_status to approved.
curl -X POST "https://reelmirror.com/api/v1/generated-posts/{post_id}/send-to-compose" \
  -H "Authorization: Bearer rm_your_api_key"
{ "outgoing_post_id": "uuid" }
From here you can edit the caption, add platform settings, then publish or schedule via the publishing endpoints.

Per-Item Rejection

You can reject individual media items within a post. This is useful when a post has multiple items and only some need to be replaced.
curl -X POST "https://reelmirror.com/api/v1/generated-media-items/{item_id}/reject" \
  -H "Authorization: Bearer rm_your_api_key"
{
  "status": "rejected",
  "post_auto_rejected": false
}
Auto-rejection: If all items in a post are rejected, the parent post is automatically set to review_status: "rejected". The post_auto_rejected field in the response will be true when this happens.

Automating Review

A bot that wants to auto-approve all completed posts can run the following loop:
# Poll for posts pending review
posts = api.get(f"/v1/personas/{persona_id}/generated-posts")

for post in posts["data"]:
    # Only act on fully completed posts
    if post["status"] != "completed":
        continue
    if post["review_status"] != "pending_review":
        continue
    all_items_done = all(
        item["status"] == "completed"
        for item in post["media_items"]
    )
    if not all_items_done:
        continue

    # Approve and publish
    api.post(f"/v1/generated-posts/{post['id']}/approve")
Auto-approving requires connected publishing accounts. If none are connected, the /approve call returns 400. Set up accounts via the dashboard first.