Is there a lipsync-1.0 endpoint on Sume? Old paths 404; use Fabric
Sume's old /v1/lipsync-1.0 paths return 404 and its model ids return model_not_found. Send the same still and audio to veed/fabric-1.0 or H3 Max lip-sync.

No. Sume has no lipsync-1.0 endpoint any more: POST /v1/lipsync-1.0/generate and the model-run paths /v1/models/sume/lipsync-1.0/runs, /v1/models/sume/lipsync/v1/runs and /v1/models/sume/lipsync/v1.0/runs all return 404, and sume/lipsync-1.0, sume/lipsync/v1 and sume/lipsync/v1.0 return model_not_found on the admission preview. A talking clip from a still plus audio is now POST /v1/veed/fabric-1.0, or POST /v1/minimax/h3-max/lip-sync when the audio is 5 to 14.8 seconds.
If you saw lipsync-1 in an old script, a log or a pricing sheet, Sume's tests still use lipsync-1 as the internal model id behind VEED Fabric 1.0, so the public Fabric route is the one to call. Both current routes take a still and an audio URL, but check your old body against the field rules below, since audio_url must be Sume-hosted and duration_seconds is required. Facts here come from the Models overview, the API reference and Sume's API tests, read 2026-10-10.
What 404s and what still works
Sume's tests assert the removed paths directly, so the 404 is deliberate and not an outage. Do not retry it or switch keys; change the route.
Two older Fabric aliases are different: they are deprecated but still accepted with the same body, so a script on those can migrate by changing the URL only.
| Route or id | Result today | Send instead |
|---|---|---|
| POST /v1/lipsync-1.0/generate | 404 | POST /v1/veed/fabric-1.0 |
| POST /v1/models/sume/lipsync-1.0/runs | 404 | POST /v1/models/veed/fabric-1.0/runs |
| POST /v1/models/sume/lipsync/v1/runs and /v1.0/runs | 404 | POST /v1/models/veed/fabric-1.0/runs |
| model sume/lipsync-1.0, sume/lipsync/v1, sume/lipsync/v1.0 (admission preview) | 404 model_not_found | veed/fabric-1.0 |
| POST /v1/avatar-1.0/image-to-video | Works, deprecated alias | POST /v1/veed/fabric-1.0 |
| POST /v1/models/sume/avatar-1.0/image-to-video/runs | Works, deprecated alias | POST /v1/models/veed/fabric-1.0/runs |
The two routes to move to
VEED Fabric 1.0 (veed/fabric-1.0) takes a still image or a ready avatar plus Sume-hosted audio. Send exactly one visual source: image_url, or avatar_id / avatar_handle. audio_url must be on the Sume media host and at most 10 MB, duration_seconds is 1 to 300, and resolution is 480p or 720p (default 720p).
MiniMax H3 Max Lip Sync (minimax/h3-max/lip-sync) takes the same still-plus-audio body. It is the explicit alternative when the audio is 5 to 14.8 seconds, and its list price is multiplied by 1.25. The Models overview states both rules.
- Import any outside audio first so it has a media.sume.com URL; see Media inputs.
- Keep the
Idempotency-Keyheader on every submit; both routes return the usual job envelope. - Poll
status_urlor use a webhook as described in Jobs and results.
What the move costs
Fabric bills the audio length rounded up to whole seconds. A 4.62-second line at 720p reserves 5 seconds at $0.1875 per second, which is $0.9375. At 480p the rate is $0.10 per second: a 30-second line is $3.00.
H3 Max follows the same rounding. In Sume's golden price tests, 14.8 seconds at 1080p bills as 15 seconds for $3.00. Check the live rate in GET /v1/catalog before you budget a batch, because these rates are fixtures of a dated test run.
| Route | Input | Billed seconds | Charge |
|---|---|---|---|
| veed/fabric-1.0 at 720p | 4.62 s audio | 5 | $0.9375 |
| veed/fabric-1.0 at 480p | 30 s audio | 30 | $3.00 |
| minimax/h3-max/lip-sync at 1080p | 14.8 s audio | 15 | $3.00 |
A working replacement call
This Python call sends the same body you used before to the Fabric route. It needs httpx and SUME_API_KEY in the environment, and it prints the job envelope so you can read the job id and result URL.
import asyncio
import os
import httpx
async def main() -> None:
async with httpx.AsyncClient(base_url="https://api.sume.com") as client:
r = await client.post(
"/v1/veed/fabric-1.0",
headers={
"Authorization": f"Bearer {os.environ['SUME_API_KEY']}",
"Idempotency-Key": "lipsync-migrate-001",
},
json={
"image_url": "https://example.com/still.png",
"audio_url": "https://media.sume.com/artifacts/artf_demo/line.wav",
"duration_seconds": 5,
"resolution": "720p",
},
)
print(r.status_code, r.json())
asyncio.run(main())Check before you ship
Search your code and logs for lipsync and for /v1/avatar-1.0/image-to-video. Replace the first with a Fabric or H3 Max route today, and plan to move the second before Sume retires it. If a talking face must also look like a stored avatar, pass avatar_handle instead of image_url, not both.
For a talking face, the Models overview says to use a Fabric clip with an accepted still plus TTS audio, not a video model with narration under it.
Sources
Related posts
More in Developers
- Make a vertical Short clip with curl and jq: submit, poll, download
A 20-line shell script that asks Sume for an 8-second 9:16 clip at 1080p, polls the job, and saves short.mp4, matched to YouTube's Shorts page.
- Node script for a 9:16 TikTok video: check the model, then submit
A Node 20 fetch script that confirms a Sume model lists 9:16 and your duration, submits one 12-second 720p job, and saves an MP4 that fits TikTok's API limits.
- Revoked a Sume API key and it still works? Up to 15 seconds
After you revoke a Sume API key, the API can keep accepting it for up to 15 seconds by default, because the key lookup is cached. What that means for a leak.
- Sume public_reason: generation_rejected vs temporary error
How Sume picks generation_rejected, temporary_generation_error or generation_failed on a failed job from the provider HTTP status and the retryable flag.
Written by Sume