API Overview
ViralSync exposes a REST API over HTTPS. All requests require an API key and return JSON responses. Jobs are asynchronous — you submit work and receive a jobId to track progress.
The REST API requires a Pro plan or higher. Free-plan users can render through the visual editor. See Plans →
Base URL
https://api.viralsync.io
All endpoints are relative to this base URL. Example: GET /v1/jobs → GET https://api.viralsync.io/v1/jobs.
Authentication
All requests must include your API key in the x-api-key header:
curl -H "x-api-key: vs_prod_YOUR_API_KEY" https://api.viralsync.io/v1/me
API keys are created in Dashboard → Settings → API Keys. See Authentication →
Request format
- All request bodies must be JSON (
Content-Type: application/json) - Query parameters use standard URL encoding
Response format
All responses are JSON. Successful responses return the requested data directly. Error responses always include error and code fields.
Success (200/202):
{ "jobId": "job_a1b2c3d4e5f6", "status": "queued" }
Error (4xx/5xx):
{ "error": "Monthly render quota exceeded.", "code": "RENDER_QUOTA_EXCEEDED" }
Versioning
The current API version is v1. The version is included in every endpoint path (/v1/...).
Breaking changes will be released under a new version prefix (/v2/...) with a migration guide and a deprecation period. Non-breaking additions (new optional fields, new endpoints) are made to the current version without notice.
Pagination
List endpoints (GET /v1/jobs) use cursor-based pagination:
| Parameter | Description |
|---|---|
limit | Number of items per page (1–100, default 25) |
cursor | Opaque string from the previous page's nextCursor |
# First page
curl -H "x-api-key: vs_prod_..." "https://api.viralsync.io/v1/jobs?limit=10"
# Next page
curl -H "x-api-key: vs_prod_..." "https://api.viralsync.io/v1/jobs?limit=10&cursor=eyJsYXN0SWQiOi..."
When nextCursor is null in the response, you have reached the last page.
Rate limits
All plans share a limit of 120 requests per 60-second sliding window per API key. When exceeded, the API returns 429 Too Many Requests with a Retry-After header.
See Rate Limits →
Endpoint reference
| Method | Path | Description |
|---|---|---|
POST | /v1/render/jobs | Submit a render job |
GET | /v1/jobs | List all jobs |
GET | /v1/jobs/{jobId} | Get a specific job |
GET | /v1/jobs/{jobId}/progress | Stream real-time progress (SSE) |
POST | /v1/jobs/{jobId}/cancel | Cancel a running job |
DELETE | /v1/jobs/{jobId} | Delete a terminal job |
GET | /v1/me | Current user info (userId, plan, email) |
GET | /v1/usage | Current render minute usage and limits |
Quick navigation
- Quickstart — render your first video in 5 minutes
- Render API — complete reference for
POST /v1/render/jobs - Movie Schema — Movie/Scene/Layer JSON reference
- Error Reference — all error codes and how to handle them