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.

Cloud Tasks batch delete GA: a deleted task is not a canceled Sume job
Cloud Tasks batch delete reached GA on 2026-09-30. Deleting queued tasks stops submits that never ran; a Sume job already accepted needs its own cancel call.

Cloudflare Access 302 to login is not a Sume webhook delivery
Strict service token auth returns 401 or 403 instead of a 302 login redirect, but Sume never sends a service token. What a 3xx on your webhook URL costs you.

Cloudflare Access strict mode: token headers on every Sume poll
Strict service token auth issues no CF_Authorization cookie, so a Sume job poller behind Access must send its token every time. Triage 401, 403 and Sume errors.

Fabric audio under 10 MB: how many seconds of wav and mp3 fit
Fabric lip-sync takes Sume-hosted audio under 10 MB, 300 s max. Stereo wav hits the size cap near 56 s; 128 kbps mp3 would reach 625 s, so length binds first.

Five Sume video submit errors and which ones to retry
insufficient_credits, idempotency_conflict, queue_full, rate_limited and provider_capacity_exceeded each need a different response. What to do, in a table.

GitHub App ghs_ tokens are now ~520 characters: check Sume calls
GitHub's new installation tokens are about 520 characters, not 40. What breaks in a workflow that also calls Sume, and why Sume takes one credential header.

Goose 1.52 recipe consent before extensions: a Sume MCP recipe
Goose 1.52 asks for recipe consent before session/new spawns extensions, and caps recipe size. What to put in a recipe that uses Sume's MCP server.

Inngest 1.45 returns 400 for unknown v2 fields: treat a Sume 400 alike
Inngest v1.45.0 rejects unmapped REST v2 request fields with HTTP 400. A Sume 400 invalid_request is the same fix-the-request signal; do not retry it.

MCP Python SDK 2.3 max_sse_event_size vs Sume's 256 KiB result cap
MCP Python SDK 2.3.0 adds max_sse_event_size. Sume caps a tool result at 256 KiB, so a normal Sume result fits well under any sane SSE limit.

MCP TypeScript SDK 2.3 maxToolInputElements: Sume tool arguments
MCP TypeScript SDK 2.3.0 adds maxToolInputElements on McpServer. A server-side cap on array size; here is how it relates to Sume's tool arguments.

How many video jobs can I send now? The in-flight budget, worked
Concurrency 100, queue 500, 30 processing and 10 queued gives a new in-flight budget of 60 on Sume. Why the 450 wave hint is a hint, not your limit.

No queue position or ETA for a Sume video job: what to show users
Sume exposes queue counts and remaining capacity, not a per-job queue position or ETA, and has no queue expiry option. What a video UI can say honestly instead.

Pydantic AI ToolCallJudge: check a Sume paid call before it runs
Pydantic AI 2.53.0 adds ToolCallJudge to assess tool calls before execution. Pair it with Sume's dry_run and max_spend_usd on paid calls.

Python 3.15 json array_hook: freeze a Sume job result
Python 3.15 adds array_hook to json.load and json.loads. Pair it with frozendict to hold a completed Sume job result as deeply immutable data you can share.

Python 3.15 lazy import in a Sume webhook handler: what to defer
Python 3.15 adds the lazy import keyword. In a Sume webhook receiver with a 10-second attempt budget, defer only the modules the signature check does not need.

Python 3.15 UTF-8 default: still verify Sume webhooks on raw bytes
Python 3.15 makes UTF-8 the default for open() without an encoding. It does not change that a Sume signature covers raw body bytes, so verify before any parse.

Read twelve narration takes at once: jobs_result partial success
Over MCP, jobs_result takes up to 20 job ids and returns one ok-or-error entry each. How to read a wave of TTS takes when one is still running.

Report a failed Sume video job: share the request id, not the URLs
A failed video job needs a request id and a job id for support. What Sume says is safe to share, what to redact, and how to pull both from an error body.

Retake one narration line: why reusing the key returns 409
Resubmitting a changed TTS script under the same Idempotency-Key returns 409 idempotency_conflict, and an identical retry returns the original job. Key naming.

Submit 20 music takes at once: queued is normal, queue_full is not
Sume accepts music jobs as queued while the queue has room, then returns 429 queue_full. Default accepted-job capacity by plan, from 6 on Free to 120 on Scale.

Sume hides provider names and task ids: what to debug with
Sume job responses and events are provider-neutral: no vendor task ids or raw URLs. The fields to debug a video job with instead.

Sume video sync submit: timed_out and capacity_exhausted flags
A sync submit returns 2xx with a job id even when the wait runs out. What the sync object says and what to do next.

A teammate's music job id returns 404 with your API key: why
An API key reads only jobs its own member created in the workspace; anything else is 404 not_found. How to share a track or narration job with a teammate.

Temporal Standalone Activity heartbeats: resume polling a Sume job
Heartbeats signal liveness and checkpoint progress for retries. Put the Sume job_id in the heartbeat so a retry resumes polling instead of paying again.

Temporal Activity ID Reuse Policy vs a Sume Idempotency-Key
Temporal's Activity ID Reuse Policy covers closed Standalone Activities; Sume's Idempotency-Key covers a retried submit. Why one does not replace the other.

Temporal Standalone Activity Start Delay: a scheduled Sume submit
Start Delay holds only the first Activity Task; retries follow the Retry Policy. A delayed Sume submit needs one stable Idempotency-Key for every attempt.

Trigger.dev 4.6.3 error cause chains: log the Sume code and request id
Trigger.dev v4.6.3 shows thrown error cause chains in the dashboard, CLI and alerts. Wrap a failed Sume call so the cause carries error.code and request_id.

Sume video callback not verifying? Compare the secret fingerprint
Every Sume job webhook carries x-sume-webhook-secret-fingerprint. Compare it with the dashboard, accept two signatures in rotation, refuse an empty secret.

Walmart Sponsored Videos: 15-minute upload URL, wait for AVAILABLE
Walmart's Sponsored Videos API gives an upload URL that expires in 15 minutes and needs about 30 minutes to process. How to stage a Sume clip for it safely.

Retry by error code, not by 5xx: Sume's 502 is your input
Sume's 502 attachment_fetch_failed means fix your URL, not retry. A retry policy keyed on status and code, with a table of which create errors repeat safely.

Editing an image five times with AI: keep PNG between passes
Each JPEG save adds error that stays in every later edit. A Pillow test of PNG against JPEG over five passes, and the format to request from Sume.

Amazon Sponsored Brands video: Sume fps 24-30 fit; 60 and 4K do not
Amazon lists 23.976 to 30 fps and 1280x720, 1920x1080 or 3840x2160. Sume trim offers 24, 25, 30 or 60 fps and stops at 2160 per edge. Which settings line up.

App Store app preview audio: stereo AAC 256 kbps, check the track
Apple wants stereo AAC at 256 kbps and 44.1 or 48 kHz in an app preview. Use Sume audio detach to read channels and rate, and trim to keep the AAC track.

Benchmark TTS latency yourself: submit to finished file in Python
Vendors quote 45 ms or 150 ms; your pipeline waits for a file. A Python harness that times Sume TTS jobs from submit to a finished state, with p50 and p95.

Did the AI edit touch pixels outside the mask? Check it in numpy
BFL promises edits that leave the rest unchanged. Verify that claim on any model's output with a numpy diff outside your edit box, in about 15 lines.

claude plugin install --config: setting a bundled MCP server
Claude Code 2.1.285 added claude plugin install --config for bundled MCP server settings. What to put there for a Sume plugin, and what never to.

Cloudflare portal Code Mode policy vs Sume script_run
Both shrink tool-call overhead, in different places. What Cloudflare's portal Code Mode policy controls and when Sume script_run is the other half.

Cloudflare MCP portal logs: telling Sume read and paid calls apart
Portal logs record tool activity and Logpush exports it. Which Sume tool names mean spend, so a SIEM rule can flag them without reading arguments.

Join more than 20 voiceover lines: two-level timeline audio concat
Timeline audio concat takes 1 to 20 parts. A 120-line script needs six group joins and one final join, seven jobs, $0.07. A Python planner and offset math.

Find dead air in a Reel: sentence segments and silence split
Sume video inspect splits a transcript into sentence segments at pauses of 0.2 to 3 s. Use the gaps between segments to find dead air before you trim.

FLUX 3's element table as app state: run it on Sume with job metadata
Keep a FLUX 3 style element table in your own app, build each Sume edit from it, and tag every job with the table version through the metadata field.

FLUX 3 Image's New, Anchor and Move elements as Sume edit prompts
BFL's FLUX 3 Image tags every box as New, Anchor or Move. Sume has no box field, so here is how each tag maps to a prompt, a mask or a two-pass edit.

GPT Image 2.5 custom size for a 4:5 post: why 1080x1350 is rejected
Custom image_size on Sume's gpt-image-2.5 needs both edges as multiples of 16. 1080 and 1350 are not, so use aspect_ratio 4:5 or 1088x1360 and crop.

GPT Image 2.5 on Sume: the largest legal size for 21:9, 3:2 and 4:5
Both edges a multiple of 16, max edge 3840, ratio up to 3:1, under 8.29 MP. A short script finds the biggest legal size: 3840x1648 for 21:9, and 4:1 is out.

GraphQL mutation for a Sume video submit: return the job id
Wrap a Sume video submit in a GraphQL mutation that returns the job id at once, then expose status as a query. No resolver should wait on a clip.

Hedged requests on a paid video API: same key, one job
Can you hedge a slow Sume submit to cut tail latency? Only with the same Idempotency-Key. Why a second key is a second bill, and what 409 in use means.

Hide the seam in an AI image edit with a feathered composite in Pillow
A hard-edged paste of an AI edit leaves a visible line. Blur the mask a few pixels so the edit fades into the original. Short Pillow script and settings.

Idempotency-Key over 255 characters: hash long business keys
Sume accepts Idempotency-Key values up to 255 characters. Keep readable keys when short and fall back to a prefixed SHA-256 for long ones. Runnable Python.