Synthesia callbackId vs Sume Idempotency-Key for per-recipient videos
Synthesia suggests a customer email in callbackId to tie videos to requests. On Sume the per-recipient tag is your Idempotency-Key plus your own table.

Synthesia's create-video request accepts a callbackId string whose documented use is linking a video to your request, and the reference suggests a customer email for personalization. The Sume pages I checked have no field of that name on Format runs or video jobs (some jobs, such as music, take a caller metadata field; check the model's page). To tie a rendered video to one recipient on Sume, send a stable Idempotency-Key per recipient and keep the mapping from job or run id to recipient in your own table. Webhooks repeat request_id, which is what you dedupe on.
Synthesia details come from its create-video reference and API overview, read 2026-10-04.
What callbackId does
The field is an opaque string you choose. The reference positions it as the link between a video and the request that made it, so a completion notification can be matched to a row without a lookup by video id. The page does not describe length limits or uniqueness rules, so treat it as a plain label.
What Sume offers for the same job
Sume splits the work into three handles. The Idempotency-Key header on a create call makes a retry safe: replaying a spent key returns the original acceptance rather than a second paid render. The job or run id that comes back is the durable handle. A per-item webhook URL, on Format runs, delivers one signed terminal event for that item.
For batches, bulk runs take 1 to 100 items with a concurrency of 1 to 16. The queue object has no webhook of its own, so each item carries its own communication.webhook_url, and the batch itself takes one fresh idempotency key per batch, so the per-recipient mapping stays in your own table keyed by each child run id.
| Need | Synthesia | Sume |
|---|---|---|
| Label sent with the request | callbackId | Your own table keyed by job id or run id |
| Retry safety on create | Not described on the reference page | Idempotency-Key header, or idempotency_key in a bulk body |
| Completion notice | Webhook configured for the account | job.completed for model jobs; format.run.terminal for Format runs |
| Dedupe key on a notice | Not described | request_id, repeated on every retry |
A recipient-keyed pattern
Derive the key from something stable that is not the raw email. A hash of campaign, version and recipient id works: the same triple always reuses the same key, and a new script version gets a new one. Write the intent row before you submit, so a crash between submit and save cannot orphan a paid job.
- Key = hash(campaign, version, recipient id).
- Row = key, job or run id, status, media URL.
- On webhook, look up by
request_idand ignore a second delivery. - Never put a plain email in a URL or key.
What to watch
Changing the body under an existing key is a conflict, not a silent overwrite, so change the key when the script changes. Also remember a webhook can arrive twice; the receiver must be idempotent. The run webhooks page lists the delivery rules and the cookbook has receivers in Node and Python.
Sources
Related posts
More in Comparisons
- Synthesia Pro has 5 personal avatars; Sume avatars are handles
Synthesia Pro lists 5 personal avatars and Enterprise unlimited. On Sume an avatar is a reusable handle made by a job, so plan your roster by brand.
- Preview an avatar scene before the full render
Synthesia lists individual scene preview. Sume avatar video previews render first-frame stills, then start the full render from the one you approve.
- Synthesia test videos are free; Sume previews first frames instead
Synthesia's API test flag renders free watermarked drafts. Sume has no test flag; avatar video previews approve first frames before the full render.
- Tavus lists 1080p conversational video; Sume avatar clips are 720p
Tavus's pricing page lists 1080p and 24 kHz audio on all plans; Griffin-Lite renders 720p. Sume avatar videos are 720p today. What that means for your delivery.
Written by Sume