HeyGen Video
HeyGen · Video · Text → Video
HeyGen Video — video with native audio from text, a first-frame image, or up to 12 reference images, videos and audio. Refer to references in the prompt as Picture 1, Video 1, in input order. Up to 15s at 768p.
heygen-video-1Workflow: heygen/v1/models/video/generateAuthentication
Send your Picsart API key as a bearer token on every request.
Authorization: Bearer <PICSART_API_KEY>Make a request
One endpoint serves every model: POST to /workflows/v1/models/execute with the model id and its input in the body. The nesting is deliberate — the outer paramsis the envelope every workflow takes, and the inner one is this model's own input. Those inner names are the same unified ones the SDK takes, so a call translates one-to-one between the two — no per-vendor naming to learn.
curl -X POST 'https://api.picsart.com/workflows/v1/models/execute' \
-H 'Authorization: Bearer $PICSART_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"params": {
"model": "heygen-video-1",
"params": {
"prompt": "A serene mountain lake at golden hour, ultra detailed",
"resolution": "768p",
"duration": 5,
"aspectRatio": "16:9"
}
}
}'Async (submit & poll)
This model can run longer than the sync limit (~20s), so send it to /workflows/v1/models/submit, which returns a task id, and poll /workflows/v1/models/{taskId}/result until response.status is COMPLETED or FAILED.
# 1. Submit the job
curl -X POST 'https://api.picsart.com/workflows/v1/models/submit' \
-H 'Authorization: Bearer $PICSART_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"params": {
"model": "heygen-video-1",
"params": {
"prompt": "A serene mountain lake at golden hour, ultra detailed",
"resolution": "768p",
"duration": 5,
"aspectRatio": "16:9"
}
}
}'
# → { "status": "success", "response": { "id": "task_abc123" } }
# 2. Poll until response.status is COMPLETED
curl 'https://api.picsart.com/workflows/v1/models/task_abc123/result' \
-H 'Authorization: Bearer $PICSART_API_KEY'{
"status": "success",
"response": {
"id": "task_abc123",
"status": "COMPLETED",
"result": {
"url": "https://cdn.picsart.com/…/result",
"items": [
{
"url": "https://cdn.picsart.com/…/result"
}
],
"model": "heygen-video-1"
},
"usage": {
"credits": 1
}
}
}Parameters
10 parameters, sent inside the inner paramsobject. Identical to the SDK's — one parameter set, whichever transport you use.
| Parameter | Type | Required | Default | Details |
|---|---|---|---|---|
promptPrompt | text | yes | — | max 32000 chars |
startFrameStart Frame | file (image) | no | — | — |
imageUrlsReference Images | file (image[]) | no | — | — |
videoUrlsReference Videos | file (video[]) | no | — | — |
audioUrlsReference Audios | file (audio[]) | no | — | — |
resolution | enum | no | 768p | 480p, 768p |
duration | range | no | 5 | 5–15 (step 1) |
aspectRatio | enum | no | 16:9 | adaptive, 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 |
promptEnhancementPrompt Enhancement | enum | no | turbo | turbo, quality, disabled |
seedSeed | range | no | — | 0–4294967295 (step 1) |
Response
The body arrives in the gateway's status envelope, so the output is at response.result — alongside the task id, its status and the credits charged. Asset models return url plus an items array; text models return text instead.
{
"status": "success",
"response": {
"id": "task_abc123",
"status": "COMPLETED",
"result": {
"url": "https://cdn.picsart.com/…/result",
"items": [
{
"url": "https://cdn.picsart.com/…/result"
}
],
"model": "heygen-video-1"
},
"usage": {
"credits": 1
}
}
}