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.

Base URLhttps://rendersnap.io/api/v1

Authentication

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.

GET/projectsList all projects (paginated)
POST/projectsCreate a new project
GET/projects/:idGet a single project with full timeline
PATCH/projects/:idUpdate project name, timeline, or status
DELETE/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.

GET/assetsList workspace assets, filterable by kind and status
POST/assetsRequest an upload URL (returns assetId + signedUrl)
GET/assets/:idGet asset metadata and download URL
PATCH/assets/:idUpdate name, tags, or status (e.g. mark as ready)
DELETE/assets/:idDelete an asset and remove it from storage

Renders

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.

POST/rendersSubmit a render job (returns 202 with renderId)
GET/rendersList render jobs, filterable by status
GET/renders/:idGet render job status, progress, and output URL

Templates

Templates are reusable timeline JSON presets with categories and thumbnail previews. Use them to scaffold new projects programmatically.

GET/templatesList available templates
POST/templatesCreate a template from an existing project
GET/templates/:idGet template details and timeline JSON
PATCH/templates/:idUpdate template metadata
DELETE/templates/:idDelete a template

Workspace

Read and update your workspace profile, plan, and usage stats.

GET/workspaces/meGet current workspace details and usage
PATCH/workspaces/meUpdate workspace name or slug

Submit 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

Free60 / min1 concurrent
Pro300 / min3 concurrent
Team1,000 / min10 concurrent
EnterpriseCustomCustom

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 token
403FORBIDDENAuthenticated but lacks permission
404NOT_FOUNDResource does not exist
422VALIDATION_ERRORRequest body failed validation
402QUOTA_EXCEEDEDRender minutes quota exhausted
403PLAN_LIMITFeature not available on current plan
429RATE_LIMITEDToo many requests
500INTERNAL_ERRORSomething went wrong on our end