
Python preflight: price a video batch before you submit to Sume
A short Python function prices Seedance 2.5 and Wan 3.0 jobs at list x 1.25 and compares the total with your balance before any submit. Example: $99.36.
Building on the Sume API: keys and hosts, jobs and runs, polling, webhooks, idempotency, errors and rate limits, the SDK, the CLI, and MCP auth.
Start with: Sume API quickstart: your first video generation call in five steps

A short Python function prices Seedance 2.5 and Wan 3.0 jobs at list x 1.25 and compares the total with your balance before any submit. Example: $99.36.

A short Python script reads GET /v1/videos/models and keeps the rows that fit your seconds, resolution and aspect ratio. Run it before you pick an id.

Alibaba caps qwen-image-2.1-turbo at 120 requests per minute and Pro at 20. Here is how to size a batch and where Sume's async mode fits.

Sume's schema accepts seed, but no image model lists it, so seed returns 400 unsupported_parameter. Pin the model and prompt, and keep the output file.

Send sume/auto when you want Sume to choose and pin an id when you need the same look and price every time. Auto never names the model that ran.

Use sume/auto for 3-10 s clips with no family requirement. Pin an id when you need over 10 s, 1080p-only, a given family or 4:3. Read 2026-10-13.

Sume Timeline outputs can be as small as 256 px, below the 360 px minimum on TikTok's media transfer guide. Clamp sizes in your own code before upload.
On Sume's TTS Router, Eleven rows refuse timestamps, segmentation, transcript_source and avatar selectors. Sonic rows accept them. Pick by the fields you need.

Sume's Sonic rows return mp3 or wav up to 48 kHz. Eleven rows return mp3 only, and three of them only mp3_44100_128. Pick by the format you need.

GET /v1/tts-router/voices lists voices for one family, sonic or eleven. A model speaks only with voices from its own family, so pick the model first.

Send test posts a dummy webhook.test payload to a URL you type. Redeliver re-sends the real terminal event for one job with a fresh signature. Do not swap them.

Sume only accepts public HTTPS webhook URLs and rejects localhost and private networks. For local work, poll the job and keep webhooks for a deployed endpoint.

For the voice-language check, Sume compares regional tags by primary language, so en-GB on an en-US voice does not trigger the 409, and fil matches tl.

Sume's live-commerce TTS takes only transcript_source (a script revision plus sentence IDs) and rejects literal transcript text, even if correct.

Trim, frames, captions and filter are deterministic jobs; Omni edit changes content from a prompt. Pick the cheapest route that does the change you need.

Sume's /v1/videos has frame_images and input_references but no edit field. Send video_url to /v1/video-router/generate with gemini-omni-flash-1.1.

Sume reserves the credits of every accepted job at submit, so a 100-ad batch needs the whole total in the balance. 402 insufficient_credits otherwise.

A documented video id can be absent from the model list: Veo needs Google Cloud, Tencent rows need the Tencent switch. Absent ids 404. Read 2026-10-13.

X's chunked upload keeps each segment at or below 5 MB, with an 8 MB server limit. Divide your MP4's byte size by 5 MB, rounded up, to count APPEND calls.

A Sume bulk run takes at most 100 items, so 250 year-in-review runs need three queues. Set concurrency 1 to 16, a spend cap per item and a new key per queue.

Astro actions give a browser form a typed way to start a Sume video job and poll it, without the API key in client code. Zod 4 validation, 402 handling.

Effect 4.0.4 makes HttpClient.retryTransient honor Retry-After, so a Sume 429 waits as told. It also retries POST on 5xx, so send an Idempotency-Key.

Test a Go poll loop for Sume video jobs with testing/synctest: 90 seconds of fake sleeps and a 20-minute deadline pass in under a second, no sockets.

Use k6 --once and --scenario for a Sume API smoke test that costs nothing: models, a deliberate 400, and a paced balance read that counts 429s.

Playwright 1.64 adds a describe lock and --shuffle. Use them to test Sume video calls: free 400 checks run in parallel, one paid test holds a credits lock.

Run Sume video jobs from Rust with reqwest, a Tokio Semaphore, and a JoinSet that collects clips as they finish and calls abort_all on a 402.

Bun 1.4.3 reports a temporary DNS failure as EAI_AGAIN, not ETIMEOUT. Update your retry check, and keep one Idempotency-Key across every Sume submit retry.

Bun 1.4.3 fixes response streams that ended cleanly after a transfer failure. Still check the byte count when you save a finished Sume video to disk.

Hume's TTS and EVI APIs end Nov 13, 2026 at 12:01 a.m. EST and account data is deleted. What to download, what cannot move, and where Sume TTS fits.

A Sume caption job returns a captioned video, not raw text. For words and sentence segments, run video_inspect with transcribe true at $0.01 per audio minute.

Porting OpenRouter-style image code to Sume: provider ignore, sort and allow_fallbacks are accepted but change nothing. only and order take "sume" alone.

Sume's timeline audio endpoint rejects concat with a top-level url and split with parts. Stable error codes and the right shape for each operation.

Sume rejects a parameter a model does not list with 400 unsupported_parameter. Read the catalog descriptors and check a request body before you POST /v1/images.

Powertools idempotency guards your Lambda handler; Sume's Idempotency-Key guards the paid submit. How they differ, and how to derive one key from an order id.

LangGraph time travel re-runs every node after the checkpoint, API calls too. Derive the Sume Idempotency-Key from the body so replays dedupe and forks run.

A scoped Sume usage summary can show final false with money held. hold_counts says whether a turn runs, a Browser session is open, or work is being priced.

Sume's usage summary lists each script_run call with its rows, debited, held and refunded micros, so a fan-out of TTS or image jobs has one price.

Use one WireMock scenario per job so GET /v1/jobs/{id}/status answers queued, processing, then completed, and test the poll loop without spending.

xAI's video API returns a request_id and three states. Here is how they map onto Sume's five /v1/videos statuses, with a runnable Python polling loop.

Which of stability, similarity_boost, style, speed and seed work on eleven-v4, v4-turbo, v3, multilingual-v2 and turbo-v2.5 in the Sume TTS Router, with ranges.

Eleven v4 and other eleven-* ids run through the Sume TTS Router. How to list voices with family=eleven, which id shape each family takes, and what gets a 400.

Kandinsky 6.0 has an image-to-audio-video mode. On Sume these ids take a first_frame image and return sound, and these do not. Request code included.

Point MCPJam's auth debugger at mcp.sume.com and read the results: S256-only PKCE, public clients, authorization_code only, a one-hour token, a resource check.

Sume /v1/usage lists script_runs with rows and money per call, and counts script_run_children in includes. Read the cost of one script_run to the cent.

Sume /v1/usage splits open holds into held and pending_usd_micros. Read the two fields and settle_state to tell parked rows from spend, and when final flips.

unpriced_usd_micros in Sume /v1/usage is captured spend from legacy rows with no price-book stamp. It is inside debited, so never subtract or add it twice.

Receive a signed Sume job webhook in a TanStack Start server route: read request.text(), verify with the SDK, answer 204, and dedupe on job_id.

The Sume TTS Router rejects timestamps on eleven-* ids. Get word timings by running the finished narration through Sume STT for one cent a minute.