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.

AI video models with no aspect_ratio option: Recast, Genjutsu, Grok
Three Sume video rows reject aspect_ratio: H3 Max Recast, Higgsfield Genjutsu and Grok Imagine Video 1.5. What sets the output frame instead, and what to send.

Astro API route for Sume webhooks: export const prerender = false
An Astro endpoint can receive Sume job webhooks if it is rendered on demand. Set prerender false, read the raw body, and verify the sume-v1 signature.

Bruno collection that polls a Sume job until it is terminal
Use bru.setNextRequest and bru.sleep in a Bruno post-response script to poll a Sume job's status route with a bounded attempt count, then fetch the result.

Caption design colors: hex, rgb, rgba, transparent only, else 400
Sume's caption design.colors accepts hex, rgb(), rgba() or transparent and rejects other CSS with a 400. Fields, examples and a safe validator.

Claude Code .mcp.json oauth.scopes: mcp:read first, mcp:write later
Claude Code's .mcp.json oauth block takes a space-separated scopes string that overrides discovery. Start Sume at mcp:read and widen to mcp:write when needed.

Cloudflare Agents addMcpServer for Sume: streamable-http and headers
Connect a Cloudflare Agent to Sume's hosted MCP server with addMcpServer, an explicit streamable-http transport and a bearer header, and keep jobs resumable.

Count TTS characters like Sume: JS string length, emoji and Hangul
Sume TTS counts characters as JavaScript string length, so an emoji counts as 2. A short Python function counts UTF-16 units to predict the limit and cost.

Cursor mcp.json ${env:NAME} for Sume's API key: no secret in the repo
Cursor's mcp.json interpolates ${env:NAME} in headers. Keep Sume's API key in an environment variable, send one credential, and know the fixed OAuth redirects.

eBay Media API video upload: 150 MB, MP4, and the LIVE status
eBay's Media API takes a listing video in two calls: createVideo with the exact byte size (max 150 MB), then uploadVideo as MP4. Prep the file with Sume.

Gemini CLI settings.json httpUrl, timeout and includeTools for Sume
Gemini CLI's MCP entry takes httpUrl, headers, a 600000 ms timeout and includeTools. Set up Sume's hosted server with a read-only tool list and one credential.

How many characters is one minute of TTS audio? 1,200 s math
A vendor rule of thumb says a minute of speech is 750-800 characters. Here is what that means for a 1,200-second Sume TTS job and its 20,000-char cap.

Which Sume image models take no output_format? Soul and Ideogram 4.5
Soul and Ideogram 4.5 publish an empty output_format list on Sume: omit the field. Recraft V4 lists webp only; the other 16 rows take png, jpeg and webp.

LangChain4j StreamableHttpMcpTransport: protocol detection for Sume
LangChain4j probes the MCP protocol on connect, which costs one round trip. Pin protocolVersion and set timeouts before pointing it at Sume's hosted MCP server.

LiteLLM /mcp-rest/tools/call: test Sume tools without an LLM
LiteLLM exposes REST routes to list and call MCP tools with no model in the loop. Use them to smoke-test Sume's read tools and gates before an agent sees them.

LRC lyrics file from an AI music track: Sume STT segments in Python
YouTube accepts .lrc lyric files. A short Python script turns STT sentence segments from a generated song into [mm:ss.xx] lines. Check results before upload.

MiniMax H3 Max in TypeScript: submit, poll and download with fetch
A TypeScript script under 30 lines: submit a minimax-h3-max job on Sume, poll until completed, save the MP4. Status values and the 409 on failed jobs.

Gaps between joined MP3 clips: priming padding and Sume's wav default
Joined MP3 clips can leave tiny gaps because each file carries priming padding. Sume Timeline audio defaults to sample-exact wav. When to use mp3.

Music API sync mode: wait_timeout_seconds 0-30, timed_out means poll
Sume music jobs accept mode sync with wait_timeout_seconds from 0 to 30. If sync.timed_out is true the job is still running; poll, never resubmit.

Music API metadata field: tag tracks by campaign, not sent to provider
Sume's Music Router stores a metadata object on the job and does not send it to the provider. How to tag generations by campaign, brief or scene for audits.

OpenAI Agents SDK client_session_timeout_seconds with Sume jobs_wait
In the OpenAI Agents SDK for Python, client_session_timeout_seconds sets the MCP read timeout. Set it above Sume's 55-second jobs_wait cap, or 0 to disable it.

OpenAI Agents SDK max_retry_attempts and Sume paid calls
The OpenAI Agents SDK can retry MCP list_tools and call_tool. A retried Sume create must repeat its idempotency_key or you pay twice; set max_spend_usd too.

Debug an MCP OAuth handshake in Postman against Sume's server
Postman can step through an OAuth 2.1 MCP handshake. Use it to find where a Sume connection breaks before you blame the agent client.

Seedance 2.5 price calculator in Python: tokens to dollars
A 20-line Python function that turns Seedance 2.5 resolution, aspect ratio and seconds into the Sume billed price, checked against two known amounts.

Sentry Vercel AI integration records inputs and outputs by default
Sentry's Vercel AI integration records inputs and outputs by default when genAI collection is on. Check what Sume tool calls and results put in spans.

Spring AI MCP client request-timeout 20s vs Sume jobs_wait
Spring AI's MCP client defaults request-timeout to 20s, shorter than a 50s Sume jobs_wait. Raise it with a customizer or keep waits short and re-issue them.

STT sentence segmentation: unpunctuated speech split on silence
Sume STT 1.0 segmentation mode sentence returns gapless sentence segments, splitting unpunctuated runs on silence. Options, boundary_lead_ms and caveats.

Sume video pricing fields: list_basis and billable_margin
How to read the pricing object on a Sume video model: per second, by resolution, or per 1,000 video tokens, and why to read billable_margin, not hard-code 1.25.

SvelteKit +server.js endpoint to verify a Sume webhook signature
A SvelteKit +server.js POST handler gets a Fetch Request, so request.text() gives the raw body Sume signs. Verify the HMAC, then handle job.completed.

Timeline audio concat limits: 20 parts, 1,800 s, one channel layout
Timeline audio concat accepts 1 to 20 parts, outputs up to 1,800 seconds and needs one channel layout. Limits, refusal codes and a request that works.

Hook and full cut from one track: overlapping Timeline audio splits
Timeline audio split ranges may overlap, up to 20 per job at $0.01. Cut a 15-second hook and the full track from one song or voice-over in a single call.

TTS volume 0.5 to 2: set narration gain before mixing with music
Sume TTS 1.0 generation_config.volume runs from 0.5 to 2 alongside speed 0.6 to 1.5. How to set narration level before you mix with a music bed.

VS Code chat.mcp.autostart newAndOutdated: Sume's first run
VS Code can start MCP servers automatically when their config changes. Learn the autostart modes and the trust dialog before you add Sume's hosted server.

How much balance does a full Sume queue hold? By plan
A full Pro queue of 24 Seedance 2.5 clips at 720p holds $208 of wallet balance; Scale's 120 holds $1,040. Reserve by plan.

WebVTT cue text cannot contain --> : clean Sume STT segments in Python
WebVTT forbids the arrow sequence inside cue text and wants 3-digit milliseconds. A short Python script turns Sume STT sentence segments into a valid .vtt file.

Which Sume image models accept the quality parameter?
Only five Sume image rows list quality: ChatGPT Image 2, both ChatGPT Image 2.5 ids, Ideogram V3 and Ideogram 4.5. Every other row returns 400 if you send it.

YouTube Analytics creatorContentType: split Shorts from long-form
The creatorContentType dimension separates SHORTS from VIDEO_ON_DEMAND in YouTube Analytics API reports. How to use it on clips you generated with Sume.

YouTube captions.update costs 450 units: replace a caption track
captions.list costs 50, captions.update 450, captions.insert 400. Plan how many Sume-made caption files a 10,000-unit day can replace on your Shorts.

YouTube videos.insert resumable upload for a large MP4 (Sume file)
Use uploadType=resumable for a big Sume-made MP4: start a session, send 256 KB-multiple chunks, and resume after a 308 instead of re-sending the file.

YouTube videos.list processingDetails: poll a Short until processed
After videos.insert, poll videos.list with part=processingDetails to see processingStatus and progress. It costs 1 unit and works only for the video's owner.

Zod z.toJSONSchema io: "input" for a Sume request body schema
Zod's z.toJSONSchema outputs the output type by default. Pass io: "input" to describe what a client may send, and note which Zod types cannot be represented.

ADK 2.11 abort_signal and /run_sse cancel: Sume job keeps billing
Google ADK 2.11.0 can abort a run and cancels /run_sse on disconnect. A Sume job started by that run is not cancelled by it.

ADK 2.11 tool nodes pause for approval: gate Sume paid tools
Google ADK 2.11.0 tool nodes can pause for user approval via RequestInput. Use it so a Sume paid tool call waits for a person before it spends.

Audio detach in sync mode: 30 seconds, then a 202 you poll
Audio detach defaults to async. With mode sync it waits up to 30 seconds for a 200, or returns 202 to poll. Why a timeout is not a failure and how to retry.

Bun.cron() for Sume jobs: an OS scheduler is not a job store
Bun 1.4 adds Bun.cron(), OS-level scheduling. Use it for a Sume reconcile pass over stored job ids, not as the place that remembers which jobs exist.

Bun 1.4 fetch request compression: should Sume API calls use gzip?
Bun 1.4 can compress fetch request bodies. Sume's docs do not describe compressed requests, so leave it off and send media as public HTTPS URLs.

Cancel a queued music take: only before generation starts
Sume cancels a queued music job, but once generation starts the API returns 409 job_generation_already_started and the job runs on. Who can cancel it.

Claude Agent SDK 0.2.160: background wait ceiling, Sume video job
Claude Agent SDK Python 0.2.160 keeps stdin open until background subagents go idle, ten minutes by default. Why a Sume video job can outlast that.

Claude Code 2.1.288 hooks fail closed: a Sume spend guard script
Claude Code 2.1.288 now blocks a tool call when a PreToolUse hook can't match or serialize input. A small guard script for Sume paid calls.