Generic HTTP integration
Any automation tool that can make an authenticated HTTP request can call JSON2Video. This includes Zapier, Pipedream, Activepieces, Power Automate, or your own custom backend.
The recipe is always the same: POST /v2/movies to start a render, then GET /v2/movies?project=... to check status. This guide gives you the cURL primitives — translate them to your tool's HTTP action.
Authentication
Every request needs an x-api-key header containing your API key. Get one from the dashboard at json2video.com/dashboard/apikeys. Create a secondary key with the Render role for any third-party tool.
Submit a render
curl -X POST https://api.json2video.com/v2/movies \
-H "x-api-key: YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{
"resolution": "full-hd",
"scenes": [
{
"elements": [
{ "type": "text", "text": "Hello from HTTP!", "duration": 5 }
]
}
]
}'
Response:
{
"success": true,
"project": "WAEE8PohgVwv2teP",
"timestamp": "2025-05-28T14:57:34.393Z"
}
Save the project value — you'll need it to check status.
Poll for status
curl https://api.json2video.com/v2/movies?project=WAEE8PohgVwv2teP \
-H "x-api-key: YOUR_API_KEY"
Response (in progress):
{ "success": true, "movie": { "project": "WAEE8PohgVwv2teP", "status": "running", "progress": 42 } }
Response (finished):
{
"success": true,
"movie": {
"project": "WAEE8PohgVwv2teP",
"status": "done",
"url": "https://assets.json2video.com/clients/.../movie.mp4",
"thumbnail": "https://assets.json2video.com/clients/.../thumbnail.jpg",
"duration": 12.5
}
}
Poll every 5-10 seconds until status is one of: done, error, timeout.
Tool-specific notes
Zapier
- Use the Webhooks by Zapier → Custom Request action with method
POST, the JSON above, and thex-api-keyheader. - Zapier's free tier executions a step every 15 minutes, so polling-based flows can be slow. Use a webhook destination on the render request and a Webhooks by Zapier → Catch Hook trigger to react instantly.
Pipedream
- Use the HTTP / Webhook → Custom Request action.
- Pipedream supports JavaScript code steps — drop in a polling loop with
setTimeoutbetween requests.
Power Automate
- Use the HTTP action (premium connector). Set the URI, method, headers, and body inline.
- Use the Until control to poll until
body('GET_status').movie.statusisdone.
Bubble / Webflow / other low-code
- Use the platform's HTTP integration (usually called API Connector or similar).
- Configure two endpoints: one POST (create movie), one GET (status). Reuse the API key as a shared header.
Use a webhook to avoid polling
For backends and tools that can receive HTTP, configure a webhook destination on the render request so JSON2Video calls you when the video is ready:
{
"resolution": "full-hd",
"scenes": [ /* ... */ ],
"exports": [{
"destinations": [{
"type": "webhook",
"endpoint": "https://your-app.example.com/api/json2video-done"
}]
}]
}
Your endpoint receives a POST with the full movie object as the body when the render finishes. See Webhooks (production) for the full receiver pattern.
See also
- Quickstart — the same flow with code in Node / Python / PHP / cURL.
- Make.com end-to-end — full Make.com walkthrough.
- n8n end-to-end — full n8n walkthrough.
- API endpoints reference