Skip to main content
The Percify replication API turns a short video into a shot-by-shot blueprint and then renders an AI copy of it. POST /v3/replicate/v1/analyze takes a TikTok, YouTube Shorts, Instagram Reels or direct video link under two minutes and returns an analysis id. When the analysis is ready, POST /v3/replicate/v1/analyses/{id}/replicate renders each clip with a video model, stitches them and produces a side-by-side comparison with the original.
All endpoints use the same Authorization: Bearer pk_live_… header as the rest of the API. See Authentication.

Analyze a video

string
required
An https link to a TikTok, YouTube (including Shorts) or Instagram video, or a direct .mp4, .mov or .webm file. The video must be two minutes or shorter. Photo posts are refused.
string
Reuse the same value on retries to get the original analysis back instead of paying again. Kept for 24 hours.
201 Response
An analysis costs a flat 5 credits, refunded if it fails.

Get an analysis

GET /v3/replicate/v1/analyses/{id} returns:
string
analyzing, ready or failed.
string | null
A title for the video.
number | null
Length of the source video.
integer | null
Number of clips in the blueprint.
string
The link you sent.
string | null
Percify’s copy of the source video.
string | null
A poster frame.
object | null
The shot-by-shot breakdown. clips is an array where each clip has start and end times, a generation prompt, camera framing and movement, per-second beats, onScreenText and overlays, keyframes and, for split-screen shots, a layout. The blueprint also carries styleBible, soundtrack, aspect, shots, speakers and characters.
string | null
Why the analysis failed.
If the analysis is ready but its clips have "prompt": null, only the shot list exists. Call POST /v3/replicate/v1/analyses/{id}/blueprint to build the rest, then poll again until it is ready. The call answers { "started": true }, or started: false with a reason such as Blueprint already built.

Render a replica

POST /v3/replicate/v1/analyses/{id}/replicate
string
default:"seedance-2-fast-i2v"
The video model for every clip. Models the API names include seedance-2-fast-i2v (follows the original frames most closely), kling-v2-6-std-motion-control (driven by the original’s movement), seedance-v1-5-pro-i2v, p-video and seedance-2-fast-t2v (prompt only). Another model returns 400 with the list.
string
default:"medium"
low, medium or high.
string
default:"fast"
How many blueprint clips share one generation on multi-shot models. fast packs consecutive clips into fewer, longer takes, balanced keeps hard fades as seams, and exact renders one generation per shot.
integer[]
Clip indexes to render. Leave it out for the full video.
string
An https image of a person or product to put in place of the original subject in every clip. It is checked by content moderation.
boolean
default:"false"
Burn the original’s text overlays into the replica.
object
{"mode": "chunks"} keeps each clip’s original audio, {"mode": "original"} lays the source soundtrack over the result, and {"mode": "upload", "url": "https://…"} uses your own track. Leave it out for a silent video.
string
default:"9:16"
9:16 or 16:9 for the branded side-by-side marketing cut.
string
https URL that receives the run once it is done or failed. See Webhooks.
string
Same value on retries returns the original run. Kept for 24 hours.
201 Response
A replica is charged per generation as each clip renders, at that model’s price. Clips that fail are refunded.

Get a replication run

GET /v3/replicate/v1/runs/{id} returns:
string
generating and stitching while it works, then done or failed.
integer
Clips in this run. doneClips counts finished ones.
string | null
The finished replica.
string | null
Side-by-side video of the original and the replica.
string | null
The same replica without the burned-in text, when captions was on.
string | null
The branded marketing cut. marketingVideoUrl169 is the 16:9 version. They can arrive a little after the run is done.
string | null
A public link to the result on app.percify.io, once the run is done.
The object also has id, analysisId, modelId, quality, error and createdAt.

Errors

These endpoints have no wait parameter. Poll every few seconds, or pass a webhook.

Remake a video in the app

The same pipeline without code.

Async jobs and polling

Statuses for every job type.

Webhooks

The replication.completed payload.

MCP server

analyze_video and replicate_video for agents.
Last modified on September 16, 2026