REST API Quick Reference
This page covers the public REST endpoints most developers need to render videos, manage assets, and poll results. For the full machine-readable spec, see the OpenAPI reference.
Base URLs
| Environment | URL |
|---|---|
| Production | https://api.ilovevideoeditor.com |
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 Full OpenAPI Reference for webhook events, payload shape, and retry behavior.