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.
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
| Status | Meaning |
|---|
pending | Queued for processing |
running | Currently being generated |
completed | Done — media URL available |
failed | Generation 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
}'