Quickstart
Upload a reference image, render a ten-second video from it, and poll until it's ready — the whole flow is three requests.
Before you start
You need an API key from Account → API keys (any paid plan). Export it as JANUSLY_API_KEY in your shell — details in Authentication.
1. Upload a reference image
curl -X POST https://janusly.com/api/v1/uploads \
-H "Authorization: Bearer $JANUSLY_API_KEY" \
-F kind=image -F file=@product.jpg{ "url": "https://…/uploads/….jpg", "kind": "image", "contentType": "image/jpeg", "bytes": 482133 }Only URLs returned by the uploads endpoint are accepted as references in render requests.
2. Start a render
curl -X POST https://janusly.com/api/v1/renders \
-H "Authorization: Bearer $JANUSLY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"kind": "video",
"model": "kling",
"prompt": "Slow push-in on the bottle, condensation beading, golden hour",
"durationSeconds": 10,
"referenceImageUrls": ["https://…/uploads/….jpg"]
}'{
"id": "b3f1…",
"ids": ["b3f1…"],
"batchId": null,
"kind": "video",
"status": "pending",
"renderModel": "kling-720p",
"creditsCharged": 200
}3. Poll until ready
curl https://janusly.com/api/v1/renders/$RENDER_ID \
-H "Authorization: Bearer $JANUSLY_API_KEY"{
"id": "b3f1…",
"kind": "video",
"status": "ready",
"renderModel": "kling-720p",
"outputUrl": "https://…/renders/….mp4",
"errorMessage": null,
"creditsRefunded": 0,
"createdAt": "2026-07-16T09:12:03.000Z",
"updatedAt": "2026-07-16T09:14:41.000Z"
}status moves pending → running → ready (or failed, with an automatic refund). Poll every few seconds — images typically finish in under a minute, videos in one to several minutes depending on model and duration. Status polls are limited to 60 per minute; see Errors & limits.