Documentation
RenderSnap API
A REST API for everything the editor can do — create projects, manage assets, submit renders, batch export to every social platform, and automate your video workflow at any scale.
https://rendersnap.io/api/v1Authentication
Obtain a Firebase ID token using the Firebase Auth SDK (Google OAuth or email/password), then include it in every request header:
Authorization: Bearer <firebase_id_token> Content-Type: application/json
Tokens expire after 1 hour. Refresh them with user.getIdToken() from the Firebase SDK. API keys (for server-to-server use without a browser) are on the roadmap.
Projects
Projects contain a timeline JSON and link to workspace assets. All operations are scoped to your workspace.
/projectsList all projects (paginated)/projectsCreate a new project/projects/:idGet a single project with full timeline/projects/:idUpdate project name, timeline, or status/projects/:idArchive a project (soft delete)Assets
Assets are video, audio, image, subtitle, font, or brand kit files stored in your workspace. Upload via a signed URL to avoid sending files through our API servers.
/assetsList workspace assets, filterable by kind and status/assetsRequest an upload URL (returns assetId + signedUrl)/assets/:idGet asset metadata and download URL/assets/:idUpdate name, tags, or status (e.g. mark as ready)/assets/:idDelete an asset and remove it from storageRenders
Submit a render job to convert a project timeline into a finished video. Render jobs are async — poll the job endpoint or use webhooks to receive status updates.
/rendersSubmit a render job (returns 202 with renderId)/rendersList render jobs, filterable by status/renders/:idGet render job status, progress, and output URLBatch Renders
Submit one project for rendering across multiple social media formats simultaneously. A single batch call fans out into individual render jobs — one per format — each with the canvas automatically resized to the target dimensions. Requires Pro plan or above.
/renders/batchSubmit a batch render (returns 202 with batchId + renderIds)/renders/batchList batch render jobs (paginated)/renders/batch/:idGet batch status and per-format render resultsSupported formats — pass any combination as the formats array:
Batch status is computed on read. Possible values: queued processing done failed mixed cancelled. mixed means some formats succeeded and some failed.
Templates
Templates are reusable timeline JSON presets with categories and thumbnail previews. Use them to scaffold new projects programmatically.
/templatesList available templates/templatesCreate a template from an existing project/templates/:idGet template details and timeline JSON/templates/:idUpdate template metadata/templates/:idDelete a templateWorkspace
Read and update your workspace profile, plan, and usage stats.
/workspaces/meGet current workspace details and usage/workspaces/meUpdate workspace name or slugSubmit a render — full example
POST https://rendersnap.io/api/v1/renders
Authorization: Bearer <token>
{
"projectId": "proj_abc123",
"resolution": "1080p",
"format": "mp4",
"fps": 30,
"webhookUrl": "https://yoursite.com/webhooks/renders"
}
// 202 Accepted
{
"ok": true,
"data": {
"renderId": "rnd_xyz789",
"status": "queued",
"message": "Rendering started — you'll receive a webhook on completion."
}
}Batch render — full example
Submit one project and receive separate output files for every social format in a single API call. Each format is rendered in parallel as an independent child job. Requires Pro plan or above.
POST https://rendersnap.io/api/v1/renders/batch
Authorization: Bearer <token>
{
"projectId": "proj_abc123",
"formats": ["youtube", "tiktok", "instagram_square", "instagram_story"],
"resolution": "1080p",
"format": "mp4",
"fps": 30,
"webhookUrl": "https://yoursite.com/webhooks/renders"
}
// 202 Accepted
{
"ok": true,
"data": {
"batchId": "bat_def456",
"renderIds": ["rnd_001", "rnd_002", "rnd_003", "rnd_004"],
"status": "queued",
"message": "Batch render queued — 4 formats submitted."
}
}
// Poll for results
GET https://rendersnap.io/api/v1/renders/batch/bat_def456
{
"ok": true,
"data": {
"id": "bat_def456",
"projectId": "proj_abc123",
"status": "done",
"formats": ["youtube", "tiktok", "instagram_square", "instagram_story"],
"renders": [
{ "socialFormat": "youtube", "status": "done", "outputUrl": "https://…/out_001.mp4" },
{ "socialFormat": "tiktok", "status": "done", "outputUrl": "https://…/out_002.mp4" },
{ "socialFormat": "instagram_square", "status": "done", "outputUrl": "https://…/out_003.mp4" },
{ "socialFormat": "instagram_story", "status": "done", "outputUrl": "https://…/out_004.mp4" }
]
}
}Webhooks
Pass a webhookUrl when submitting a render job. We will POST to that URL when the job completes, fails, or is cancelled. Verify authenticity by checking the X-RenderSnap-Signature header (HMAC-SHA256 of the payload, signed with your webhook secret).
// Payload sent to your webhookUrl on completion
{
"event": "render.completed",
"renderId": "rnd_xyz789",
"status": "done",
"outputUrl": "https://storage.rendersnap.io/outputs/rnd_xyz789.mp4",
"durationSeconds": 142,
"completedAt": "2026-03-01T14:22:05Z"
}Rate limits
Rate limit headers are included in every response: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.
Error codes
All errors return a consistent JSON envelope:
401UNAUTHORIZEDMissing or invalid token403FORBIDDENAuthenticated but lacks permission404NOT_FOUNDResource does not exist422VALIDATION_ERRORRequest body failed validation402QUOTA_EXCEEDEDRender minutes quota exhausted403PLAN_LIMITFeature not available on current plan429RATE_LIMITEDToo many requests500INTERNAL_ERRORSomething went wrong on our endReady to start building?