REST API Quick Reference
This page covers the public REST endpoints most developers need to render videos, manage assets, and poll results. For the current API guide, see the developer documentation.
Base URLs
| Environment | URL |
|---|---|
| Production | https://api.ilovevideoeditor.com |
Postman, Bruno, Insomnia & friends
The API ships as machine-readable artifacts you can import into any HTTP client:
- OpenAPI 3.x spec (JSON) — the source of truth for API clients and code generators.
Authentication
- API key (
x-api-keyheader) — used by render pipeline endpoints. Get one from Account > API Keys in the dashboard. - Bearer token (
Authorization: Bearer <jwt>) — used by user-scoped endpoints such as projects, assets, and billing.
See Authentication for details.
Public endpoints cheat sheet
| Method | Endpoint | Auth | What it does |
|---|---|---|---|
POST | /v1/render | API key or Bearer | Queue a render job |
POST | /v1/render/cost | API key or Bearer | Estimate credit cost without queueing |
GET | /v1/render/{id} | API key or Bearer | Get render status and progress |
GET | /v1/render/{id}/download-url | API key or Bearer | Get a signed download URL |
POST | /v1/render/{id}/refresh-url | API key or Bearer | Refresh an expired signed URL |
GET | /v1/templates | none | List public templates |
GET | /v1/templates/{id} | none | Get a single template |
GET | /v1/assets | Bearer | List workspace assets |
POST | /v1/assets/upload-url | Bearer | Get a signed upload URL |
GET | /health | none | Health check |
Dashboard-scoped endpoints such as /v1/integrations, /billing/*, /v1/admin/*, and the /v1/tools jobs API are documented in the full OpenAPI reference.
Render a video
bash
curl -X POST https://api.ilovevideoeditor.com/v1/render \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"videoJSON": {
"name": "Hello World",
"layers": [
{
"type": "composition",
"width": 1920,
"height": 1080,
"fps": 30,
"sourceDuration": 5
},
{
"type": "text",
"text": "Hello, world!",
"start": 0,
"duration": 5,
"style": {
"fontSize": 8,
"color": "#ffffff",
"fontFamily": "Inter"
}
}
]
}
}'Response:
json
{
"jobId": "018f...",
"status": "pending"
}Poll for status
bash
curl https://api.ilovevideoeditor.com/v1/render/018f... \
-H "x-api-key: YOUR_API_KEY"When completed:
json
{
"id": "018f...",
"status": "completed",
"progress": 100,
"url": "https://cdn.ilovevideoeditor.com/.../render.mp4",
"error": null,
"createdAt": "2026-06-26T00:00:00.000Z",
"completedAt": "2026-06-26T00:01:00.000Z"
}Download the MP4
bash
curl -L https://api.ilovevideoeditor.com/v1/render/018f.../download \
-H "x-api-key: YOUR_API_KEY" \
-o hello-world.mp4The /download endpoint redirects to a signed URL. If the URL expires, use POST /v1/render/{id}/refresh-url to generate a fresh one.
Estimate cost before rendering
bash
curl -X POST https://api.ilovevideoeditor.com/v1/render/cost \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{"videoJSON": { ... }}'Upload and use your own assets
- Request a signed upload URL:
bash
curl -X POST https://api.ilovevideoeditor.com/v1/assets/upload-url \
-H "Authorization: Bearer YOUR_JWT" \
-H "Content-Type: application/json" \
-d '{"name": "clip.mp4", "type": "video", "sizeBytes": 1048576}'PUTthe file to the returneduploadUrl.- Register the asset:
bash
curl -X POST https://api.ilovevideoeditor.com/v1/assets \
-H "Authorization: Bearer YOUR_JWT" \
-H "Content-Type: application/json" \
-d '{
"name": "clip.mp4",
"type": "video",
"storageKey": "workspace-id/asset-id/clip.mp4",
"sizeBytes": 1048576,
"duration": 10,
"width": 1920,
"height": 1080
}'- Use the returned
assetUrlas thesrcfor image/video/audio layers in your VideoJSON.
Webhooks
You can avoid polling by providing webhookUrl when queueing a render:
bash
curl -X POST https://api.ilovevideoeditor.com/v1/render \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"videoJSON": { ... },
"webhookUrl": "https://your-app.com/webhooks/ilv"
}'See the developer documentation for webhook events, payload shape, and retry behavior.