Skip to main content

Overview

ReelMirror generates AI content by analyzing source posts from tracked Instagram/TikTok accounts and creating new content that matches the creator’s style. Generation is asynchronous — you start a job and poll for results.

Generation Flow

1. Add source → 2. Sync content → 3. Generate → 4. Poll status → 5. Retrieve media

Step 1: Add a source

Link an Instagram account to your persona:
curl -X POST https://reelmirror.com/api/v1/personas/PERSONA_ID/sources \
  -H "Authorization: Bearer rm_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"platform": "instagram", "username": "natgeo"}'

Step 2: Sync content

Pull the latest posts from all tracked sources:
curl -X POST https://reelmirror.com/api/v1/personas/PERSONA_ID/sync \
  -H "Authorization: Bearer rm_YOUR_KEY"
This returns sync job IDs you can poll:
{
  "job_ids": ["uuid-1", "uuid-2"],
  "total_cost_cents": 4
}
Poll each job until status is completed:
curl https://reelmirror.com/api/v1/sync-jobs/JOB_ID \
  -H "Authorization: Bearer rm_YOUR_KEY"

Step 3: Generate content

Browse synced content and pick a source post:
curl "https://reelmirror.com/api/v1/personas/PERSONA_ID/source-posts?limit=10" \
  -H "Authorization: Bearer rm_YOUR_KEY"
Then generate from it:
curl -X POST https://reelmirror.com/api/v1/generate \
  -H "Authorization: Bearer rm_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "source_post_id": "SOURCE_POST_ID",
    "persona_id": "PERSONA_ID"
  }'
Response (HTTP 202):
{
  "generated_post_id": "uuid",
  "media_items": [
    {"id": "uuid", "media_type": "image", "status": "pending"},
    {"id": "uuid", "media_type": "video", "status": "pending"}
  ],
  "total_cost_cents": 25
}

Step 4: Poll for results

curl https://reelmirror.com/api/v1/generated-posts/GENERATED_POST_ID \
  -H "Authorization: Bearer rm_YOUR_KEY"
When all media items have status: "completed", the url fields contain your generated content.

Quick Clone

Skip the sync step entirely — clone directly from an Instagram URL:
curl -X POST https://reelmirror.com/api/v1/clone-url \
  -H "Authorization: Bearer rm_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://www.instagram.com/p/ABC123/",
    "persona_id": "PERSONA_ID"
  }'
This fetches the source post and triggers generation in one step.

Regenerating Content

Regenerate an entire post

Re-generate all media items and the caption for a post. Old items are soft-deleted and new ones are created:
curl -X POST https://reelmirror.com/api/v1/generate/regenerate-post \
  -H "Authorization: Bearer rm_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"generated_post_id": "GENERATED_POST_ID"}'
This debits your balance for the full cost again. The same generated_post_id is reused.

Regenerate a single media item

If a specific media item didn’t turn out well, regenerate just that item:
curl -X POST https://reelmirror.com/api/v1/generate/media-item \
  -H "Authorization: Bearer rm_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"generated_media_item_id": "ITEM_ID"}'
This creates a new version of the media item. Poll the item ID for the updated result.

Voice Conversion

Add voice conversion to a completed video:
curl -X POST https://reelmirror.com/api/v1/generate/voice-convert \
  -H "Authorization: Bearer rm_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"generated_media_item_id": "ITEM_ID"}'
The persona must have a voice sample uploaded. Voice conversion costs $0.15 per video.

Making Content Public

Toggle a generated post’s public visibility:
curl -X POST https://reelmirror.com/api/v1/generate/toggle-public \
  -H "Authorization: Bearer rm_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"generated_post_id": "POST_ID"}'
Once a post is made public, it cannot be made private again for 20 days.

Deleting Generated Content

Delete a generated post (and all its media items):
curl -X DELETE https://reelmirror.com/api/v1/generated-posts/GENERATED_POST_ID \
  -H "Authorization: Bearer rm_YOUR_KEY"
Delete a single generated media item:
curl -X DELETE https://reelmirror.com/api/v1/generated-media-items/ITEM_ID \
  -H "Authorization: Bearer rm_YOUR_KEY"
Deletion is a soft-delete — billing and analytics data is preserved. After deleting a generated post, the source post can be re-cloned. R2 storage files are cleaned up asynchronously.

Generation Statuses

StatusMeaning
pendingQueued for processing
runningCurrently being generated
completedDone — media URL available
failedGeneration failed

Discount Mode

Pass discount_mode: true to the generate endpoint for faster, cheaper (but lower quality) generation:
curl -X POST https://reelmirror.com/api/v1/generate \
  -H "Authorization: Bearer rm_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "source_post_id": "SOURCE_POST_ID",
    "persona_id": "PERSONA_ID",
    "discount_mode": true
  }'