Documentation
RenderSnap API
A REST API for everything the editor can do — create projects, manage assets, submit renders, 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 URLTemplates
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",
"jobId": "rnd_xyz789",
"status": "queued",
"message": "Rendering started — you'll receive a webhook on completion."
}
}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?