| Capability | Endpoint | Webhook support |
|---|---|---|
| Text-to-Video | /openapi/v2/video/text/generate | Yes |
| Image-to-Video | /openapi/v2/video/img/generate | Yes |
| First and Last Frame | /openapi/v2/video/transition/generate | Yes |
| Lipsync | /openapi/v2/video/lip_sync/generate | Yes |
| Video Extend | /openapi/v2/video/extend/generate | Yes |
| Sound Effect | /openapi/v2/video/sound_effect/generate | Yes |
| Reference-to-Video (Fusion) | /openapi/v2/video/fusion/generate | Yes |
| Multi-Transition Video | /openapi/v2/video/multi_transition/generate | Yes |
| Subject Replacement (Swap) | /openapi/v2/video/swap/generate | Yes |
| Video Restyle | /openapi/v2/video/restyle/generate | Yes |
| Motion Control | /openapi/v2/video/mimic/generate | Yes |
| Video Edit (Modify) | /openapi/v2/video/modify/generate | Yes |
| Video Upscale | /openapi/v2/video/upscale/generate | Yes |
webhook_idwebhook_id and Secret Key.webhook_id to a generation requestwebhook_id in the request body. The following example uses Text-to-Video:{
"aspect_ratio": "16:9",
"duration": 5,
"model": "v6",
"prompt": "A calm evening at a suburban bus station with soft neon lights.",
"quality": "720p",
"webhook_id": "1234"
}ok200 with the plain-text body ok.POST| Header | Type | Description |
|---|---|---|
Webhook-Timestamp | string | Unix timestamp in seconds. |
Webhook-Nonce | string | 32-character random lowercase alphanumeric string. |
Webhook-Signature | string | Base64-encoded HMAC-SHA256 signature. |
Ai-trace-id | string | Request identifier for tracing and troubleshooting. |
Content-Type | string | Fixed value: application/json. |
{
"id": "123456789",
"status": 1,
"url": "https://example.com/video.mp4",
"size": 10.5,
"has_audio": true,
"credits": 100
}status value.{timestamp}\n{nonce}\n{url_encoded_payload}timestamp: value of the Webhook-Timestamp headernonce: value of the Webhook-Nonce headerurl_encoded_payload: request-body fields sorted by key and encoded as a query stringkey=value, sort fields alphabetically by key, and join them with &.{
"id": "123456789",
"status": 1,
"url": "https://example.com/video.mp4",
"has_audio": true
}has_audio=true&id=123456789&status=1&url=https%3A%2F%2Fexample.com%2Fvideo.mp4signature = Base64(HMAC-SHA256(secret_key, signing_string))Webhook-Signature header using a timing-safe comparison function.| Item | Required value |
|---|---|
| HTTP status | 200 |
| Response body | ok |
ok, PixVerse retries delivery.| Retry | Delay |
|---|---|
| First | 2 seconds |
| Second | 10 seconds |
| Third | 30 seconds |
| Fourth | 1 minute |
| Fifth | 5 minutes |
| Sixth | 15 minutes |
| Seventh | 1 hour |
| Eighth | 4 hours |
Webhook-Timestamp values, for example timestamps outside a five-minute window, to reduce replay risk.hmac.compare_digest.| Symptom | Check |
|---|---|
| Signature mismatch | Confirm the exact raw field values, alphabetical key ordering, URL encoding, newline separators, and Secret Key. |
| Repeated callbacks | Confirm that the endpoint returns HTTP 200 and the exact body ok. |
| Missing callbacks | Confirm the webhook_id, callback URL accessibility, HTTPS certificate, and firewall rules. |
| Duplicate processing | Deduplicate by task ID and status before applying business changes. |