Revid API Foundations
v1.0.1Foundation knowledge for every Revid skill — auth, the single render endpoint, the workflow discriminator, polling, webhooks, and the response envelope. Load...
Revid API foundations
Everything every other skill in this library depends on. Read this once.
When to use
Always — but transparently. Other skills assume the agent already knows:
- how to authenticate
- which endpoint to hit
- how to wait for the result
- the response envelope shape
The shape of every Revid call
POST https://www.revid.ai/api/public/v3/render
Header: key: $REVID_API_KEY
Body: { "workflow": "<one-of-9>", "source": { … }, … }
↓
{ "success": 1, "pid": "p_…" }
↓
GET https://www.revid.ai/api/public/v3/status?pid=p_…
↓ (poll every 5–8 s)
{ "status": "ready", "videoUrl": "https://cdn.revid.ai/v/…mp4", … }
That's the entire contract. Skills only differ in the body of POST /render.
Auth
key: $REVID_API_KEY
The header is literally named key (not Authorization). If unset, fail with a
clear message instead of calling the API.
The 9 workflows
| Workflow | Use when input is… |
|---|---|
script-to-video | Already-written script (text). |
prompt-to-video | A one-liner idea — the API writes the script. |
article-to-video | Any URL with text content (blog/product/news). |
avatar-to-video | A script + an avatar image (talking-head). |
ad-generator | A product description — AI writes ad hooks. |
music-to-video | A music URL + visuals. |
motion-transfer | A reference image animated with motion from a clip. |
caption-video | An existing video that needs captions. |
static-background-video | A voiceover over a fixed background. |
Pick the workflow that matches the input shape, not the output you want.
The same script-to-video workflow can produce a Reel, a YouTube short, or a
LinkedIn square — that's just aspectRatio.
Source mapping
Each workflow expects one of these source.* fields:
| Workflow | Field |
|---|---|
script-to-video | source.text |
prompt-to-video | source.prompt (+ optional source.stylePrompt, durationSeconds) |
article-to-video | source.url (+ optional source.scrapingPrompt) |
ad-generator | source.prompt (the product description) |
avatar-to-video | source.text (script) + top-level avatar.url |
music-to-video / caption-video / motion-transfer | source.url |
static-background-video | source.text + media.backgroundVideo |
If you put text in the wrong field, the call fails 422 with a schema error.
Common knobs every skill should set
-
aspectRatio— pick from the consumer surface:- Reels / TikTok / Shorts →
9:16 - LinkedIn / Instagram feed →
1:1 - YouTube long-form →
16:9
- Reels / TikTok / Shorts →
-
voice.enabled—truefor narrated content;falsefor music-only or caption-only outputs. -
captions.enabled— keeptrueby default. Most short-form watches happen on mute. -
music.enabled—truefor promo / ad / story content;falsefor talking-head where the avatar voice should breathe. -
render.resolution—1080pis the right default. Use720pfor cheap previews;4konly when downstream needs it. -
media.quality/media.videoModel— start atpro. Bump toultra/veo3/sora2only when the cost is justified. Mirror the/renderbody toPOST /api/public/v3/calculate-creditsfirst to get a price estimate without spending. -
webhookUrl— pass it whenever the caller can receive webhooks. Saves polling entirely.
Reading the response
Success:
{ "success": 1, "pid": "p_…", "workflow": "…", "endpoint": "…", "docs": {…} }
Failure:
{ "success": 0, "error": "human-readable string" }
Skills should always check success === 1 and fail loudly otherwise.
Polling
After POST /render, poll until status === "ready":
PID="<pid-from-render>"
while :; do
R=$(curl -fsSL "https://www.revid.ai/api/public/v3/status?pid=$PID" \
-H "key: $REVID_API_KEY")
S=$(echo "$R" | jq -r .status)
case "$S" in
ready) echo "$R" | jq .; break ;;
failed) echo "FAILED: $R"; exit 1 ;;
*) sleep 5 ;;
esac
done
Recommended cadence: poll every 5 s; back off to 8 s once progress > 30.
In production prefer setting webhookUrl in the request body and skip polling
entirely.
Failure modes
The two most common errors every skill must handle:
scrape failed/403from source URL — the page is JS-only or blocks bots. Either pre-scrape it yourself and switch toscript-to-video, or passsource.scrapingPromptwith the manual title + body.insufficient_credits— dropmedia.quality/videoModel/resolutionand retry, or top up withPOST /api/public/v3/buy-credit-pack.
See also
- Full Revid Public API v3 spec: https://documenter.getpostman.com/view/36975521/2sBXcGEfaB
- The other Revid skills in this catalog apply this foundation to specific content types (article, product page, blog, tweet, PDF, etc.).
