avatar-image-to-video_create: audio_url and duration_seconds
avatar-image-to-video_create needs a Sume-hosted audio_url and duration_seconds (1 to 300) matching the audio. Missing either gives missing_payload_field.
avatar-image-to-video_create is the hosted MCP tool that turns a still and an audio clip into a talking video. An agent that calls it with only an image and a prompt gets the error code missing_payload_field twice over: once for audio_url, and then for duration_seconds. Each error names the field in a path, so the repair is mechanical.
The three required parts
The payload needs a non-empty audio_url, which the message says is a Sume-hosted URL, typically a tts_create segment. It needs duration_seconds, a number from 1 to 300 that matches the length of the audio. And it needs one visual source: image_url, or avatar_id or avatar_handle, not both.
The checks run in that order. The tool first applies the allowed-key list, then checks audio_url, then duration_seconds, then the visual source. So a call missing everything fails on audio_url first, and each retry reveals the next gap.
| Order | Field | Error code if wrong |
|---|---|---|
| 1 | unknown keys | unsupported_payload_keys |
| 2 | audio_url (Sume-hosted, non-empty) | missing_payload_field |
| 3 | duration_seconds (number, 1 to 300) | missing_payload_field |
| 4 | image_url XOR avatar_id / avatar_handle | conflicting_payload_fields or missing_payload_field |
Get the audio from Sume first
A third-party audio link is not accepted: the tool wants a Sume-hosted audio_url. The usual flow is tts_create for the line, then a wait for the job, then passing the resulting URL on. Read the length from the audio job result instead of guessing, because duration_seconds must match it.
If the lip-sync model minimax/h3-max/lip-sync is your target, the error text for the wrong tool says the audio should run 5 to 14.8 seconds. Keep the line within that range, or split a long script into several clips.
Retry rules
Each of these errors comes before admission, so no job is created and no hold is made. Reuse the same idempotency_key on the corrected call. Use dry_run to read the price of the clip before you submit it.
{
"idempotency_key": "host-intro-3",
"dry_run": true,
"payload": {
"avatar_handle": "my-host",
"audio_url": "https://media.sume.com/example/line-1.mp3",
"duration_seconds": 9
}
}Sources
Related posts
More in Integrations
- BigCommerce blocklists below 90% success: keep Sume callbacks quick
BigCommerce blocks a domain for 3 minutes under 90% success in 2 minutes. Ack Sume job webhooks inside its 10s timeout, then queue the work.
- BigCommerce deactivates webhooks after 48 hours: poll Sume jobs
BigCommerce deactivates a webhook once retries run out after about 48 hours. Your Sume jobs keep finishing, so reconcile with status polls and the job list.
- BigCommerce sends only the order ID: fetch it, then render a Sume clip
BigCommerce order webhooks carry a scope and an ID, not the order. Ack, fetch the order yourself, then submit POST /v1/videos to Sume with a stable key.
- Calendly webhook signature t= v1= with 3 minutes vs Sume sume-v1
Calendly sends t=<ts>,v1=<sig> signed over t.body and suggests 3 minutes of tolerance. Sume signs timestamp.body as sume-v1; write a separate check for each.
Written by Sume