Developers
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.

Sume webhook retry window: 4.5 minutes for jobs, 3 hours for runs
Job webhooks retry 10 times at a fixed 30 s, about 4.5 minutes. Run webhooks back off for about 3 hours. How long a deploy can take your receiver down.

FLUX 3 style boxes for Sume: draw a layout reference sheet in Python
Sume has no bounding-box input. Draw numbered boxes on a blank sheet from a 0-1000 grid, pass it as a reference, and name each box in the prompt.

MAI-Transcribe-2-Streaming '2x faster': measure your caption delay
Microsoft says words appear 2x faster than its closest competitor. Measure your own delay from speech to caption with a p50 and p95 script before you switch.

Mistral Vibe tool globs: keep Sume to read-only tools
Vibe prefixes MCP tools with the server name and lets you allow or deny them by glob. A read-only Sume allowlist for a key that otherwise sees paid tools.

n8n browser OAuth2 webhook auth vs Sume HMAC-signed webhooks
n8n 2.42 adds a browser OAuth2 flow for User Auth webhooks. Sume's webhooks are server-to-server and HMAC-signed instead. A Python verifier that fails closed.

n8n durable agent message queue: replays and Sume idempotency keys
n8n 2.42 lays a durable agent message queue foundation. A queue that can redeliver means a paid Sume call needs a stable idempotency_key per message.

Audit narration before posting a Short: flag 'here we see' lines
YouTube is reported to discount voice-over that only describes the screen. Transcribe a clip with Sume video inspect and flag describing lines first.

Poison Sume webhook events: park them in a table, return 2xx
A webhook your handler can never process will be retried up to 10 times. Store the raw body in a dead-letter table, return 2xx, and replay it later.

Prove a voiceover read the approved script: the transcript receipt
A source-bound Sume TTS job carries a transcript receipt with the revision, sentence IDs and a SHA-256. It proves the text sent, not how it was pronounced.

Quota job error vs 402 insufficient_credits: where each appears
A 402 insufficient_credits means the submit was refused; a quota job category means an accepted job later failed. How to tell them apart and what to do next.

Read the TTS Router catalog in Python: price per 1M from list micros
Sume's TTS Router catalog publishes list micro-dollars per character; billing is list x 1.25. A Python script prints price per 1M and per 1,000 characters.

Recraft V4 on Sume returns WebP only: convert to PNG or JPEG in Python
Recraft V4 on Sume outputs WebP and takes no references. A Pillow converter for PNG or JPEG, with transparency flattened onto white for JPEG delivery.

Sume run webhook 3xx redirect: a failed attempt, not a delivery
Sume does not follow redirects on run webhooks, so a trailing-slash 301 fails every attempt. How to find it with a no-follow probe and register the final URL.

Sume SDK wait timeouts: 20 min, 10 min, and the 90-minute run
subscribeFormatRun waits 20 minutes, waitForRun 10, waitForJob 20, yet a run lives up to 90. Which clock fires first and how to resume after a timeout.

Keep a source log for Shorts cut from long video: CSV from video trim
A source log shows which long video, timestamp and edit produced each Short. Build one from video trim results using actual_start_seconds.

Split one voiceover into 40 scene tracks: two timeline audio jobs
Timeline audio split takes up to 20 ranges per job. Forty scene tracks from one voiceover is two split jobs, $0.02, with ranges built from cue times in Python.

Stippled AI graphics turn to gray mush when resized: a downscale test
A dotted AI graphic can lose most of its contrast when downscaled. A Pillow test of nearest, bilinear and Lanczos on a stipple, and what to request instead.

Streaming transcripts: burn only final text into clip captions
MAI-Transcribe-2-Streaming returns partials in about 100 ms, then settled text. Burned-in captions need the final text. Filter it and pass it to Sume as cues.

Test two caption looks on one Reel with source_caption_id
Restyling captions with source_caption_id reuses the first caption job's video and word timings, so no second transcription runs. Billing stays one render each.

Try-on double click: one Idempotency-Key per shopper and garment
Stop a double-clicked Try on button from running a Sume Format twice. Derive the Idempotency-Key from shopper, garment and version, and read the 200 replay.

Typed try-on results: output_schema with a video URL and your SKU
Bind an output_schema to a Sume try-on run to get the video as a typed field, and keep your SKU outside it because identifiers do not round-trip.

Two workers, one order: Idempotency-Key from order id and version
Two queue workers pick up the same order and both submit to Sume. Build the key from order id plus version so duplicates collapse and edits still create a run.

Undo for AI image edits: keep a version chain of every saved result
Generative edits have no undo button. Download each result, hash it, record its parent and prompt, and walk the chain back. Python, no database.

Empty webhook secret in staging: fail closed at boot, not per request
An unset SUME_COM_WEBHOOK_SIGNING_SECRET makes an HMAC over an empty key that anyone can forge. Refuse to start, then accept either entry during a rotation.

WhatsApp video: H.264 High profile with B-frames fails on Android
WhatsApp Cloud API says H.264 High profile with B-frames is unsupported on Android and recommends Main or Baseline. What Sume trim does and does not promise.

Which limit stopped my agent: 402, queue_full or spend cap
Six different walls look alike from an agent loop. A diagnosis table that tells wallet, run spend cap, queue, request rate, scope and provider credits apart.

YouTube Shorts originality checklist: run it before you upload
A pre-upload checklist from YouTube's monetization pages, plus a Python preflight that checks length and orientation from a Sume video inspect probe.

Fan out four Omni Flash clips in parallel and poll the jobs
Submit four Gemini Omni Flash requests at once on Sume, store each job id, poll status with backoff, then join the clips with Timeline.

got maxRetryAfter and 429: rate_limited vs queue_full on Sume
got retries 429 and honors Retry-After up to maxRetryAfter. Sume sends 429 for rate_limited and for queue_full, which need different waits. Here is the split.

got does not retry POST by default: enable it safely with Sume
got retries GET, PUT and DELETE but not POST. To retry a Sume paid submit, add POST to retry.methods and send one Idempotency-Key reused on every attempt.

GPT Image 2.5 cost per image by quality: the token math on Sume
Sume's docs: GPT Image 2.5 output is $30 per 1M tokens. At 1024x1024, xhigh is $0.09366 and max is $0.21072, before input tokens and Sume pricing.

Hatchet durable event wait: let a Sume webhook wake the task
A Hatchet durable task can wait for an event instead of polling. Send Sume's signed terminal webhook into that event, and keep a status read as the fallback.

Hatchet durable tasks: checkpoint a Sume job id and never pay twice
A Hatchet durable task replays from its last checkpoint after a crash. Make the Sume submit step safe with one Idempotency-Key, then wait on the job id.

Home Assistant response_variable: read a Sume job id and status
Home Assistant rest_command returns status, content and headers in response_variable. Here is how to pull the Sume job id from it and branch on the status read.

Home Assistant rest_command 10-second timeout and Sume async jobs
rest_command times out at 10 seconds by default. Sume sync waits cap at 30. Submit with mode async, take the job id, and poll in a second command.

Inso CLI in CI: lint and export a Sume OpenAPI copy in Insomnia
Inso CLI can lint an OpenAPI spec and export one from an Insomnia collection, failing a build on errors. Use it to guard your committed copy of the Sume spec.

Iterate AI video prompts one change at a time on Omni 360p
Change one element at a time and draft at Omni 360p. A run log, a 6-run budget and Sume requests that keep each attempt comparable.

kling-3 on Sume: generate_audio true or false, and what changes
kling-3 has an audio toggle; MiniMax H3 and Omni audio is always on. The catalog lists separate audio-on and audio-off list rates.

Kubb for the Sume OpenAPI spec: Zod schemas and SWR hooks
Kubb parses an OpenAPI spec once and feeds plugins for TypeScript, Zod and SWR. Here is how that maps to Sume's 3.0.3 spec, jobs and the polling stop rule.

Node-RED http request: node headers overwrite msg.headers (Sume key)
Node-RED's http request node lets node-configured headers overwrite msg.headers. Keep Sume's one credential header in the node, per-call headers in the msg.

Node-RED http request node: submit a Sume job and branch on statusCode
Node-RED's http request node returns payload, statusCode and headers. Wire a Sume submit, branch on 202 vs errors, and keep the job id for the status read.

openapi-typescript on the Sume OpenAPI JSON: types only, one command
npx openapi-typescript takes a URL or file and writes a .d.ts. Generate Sume job and error types from the 3.0.3 spec with no runtime code in your bundle.

Price an AI video before you submit it on Sume: three ways
Read pricing_skus from the models endpoint, check the Videos panel Create estimate, or compute rate x seconds x 1.25. Worked examples.

Restate durable handler: submit a Sume job once, then poll safely
Restate stores completed steps and resumes after failure. Make the Sume submit one stored step, then poll the returned job id without a second charge.

Scalar API Reference for the Sume OpenAPI JSON, with a Try It key
Scalar renders an OpenAPI document as an interactive reference with a test client. Point it at the Sume spec, and keep the Bearer key out of the page source.

768p on seedance-2.5 returns 400: use 720p, or pin a MiniMax id
Sume's resolution list is per model. seedance-2.5 takes 480p, 720p and 1080p; 768p exists on the MiniMax H3 ids and H3 Max Recast, and kling-3 has no 480p.

SWR refreshInterval as a function: poll a Sume job and stop
SWR accepts a function for refreshInterval that receives the latest data. Return Sume's next_poll_after_seconds while running and 0 once terminal is true.

SWR refreshWhenHidden is false: a hidden tab stops polling Sume jobs
SWR stops polling in a hidden tab by default, but a Sume job keeps running and billing. Store the job id and resume the poll on focus instead of resubmitting.