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.

Notion MCP 20 calls per 10 seconds: poll Sume jobs less
Notion MCP allows 20 search and 20 data source query calls per connection every 10 seconds. Use a Sume webhook so job polling does not compete for them.

OpenAI Agents SDK 0.20 httpx2 MCP headers: Sume API key
With a custom MCP HTTP client in Agents SDK 0.20, send the Sume key as an Authorization Bearer or x-api-key header. httpx2 only matters if you built the client.

Agents SDK mcp.Client mode auto against Sume's MCP server
With MCP Python SDK v2, the Agents SDK probes the newest protocol and falls back to initialize. Sume's hosted server still serves initialize with 2025-11-25.

Agents SDK approve_unsafe_replay with Sume paid calls
approve_unsafe_replay resends a model request, not a Sume tool call. Sume paid and write tools need a stable idempotency_key; keep it fixed on a repeat.

OpenRouter 402 with credits left vs Sume 402 on reserve
OpenRouter can return 402 with a positive balance when the in-flight budget is full. Sume's 402 means the estimate could not be reserved. Telling them apart.

OpenRouter audio/speech returns bytes; Sume TTS returns a job
OpenRouter's /audio/speech streams raw audio bytes. Sume's TTS Router returns a job id and a media URL, so a byte-stream client needs a poll step.

OpenRouter base64 input_audio vs Sume STT 1.0 audio_url
OpenRouter transcription takes base64 audio inside the JSON body. Sume STT 1.0 takes an audio_url instead, so you host the file and send a link.

OpenRouter Batch API vs Sume async jobs: which for video?
OpenRouter's Batch API is for text and embeddings with a 24 hour window. For video files, Sume returns a job id per request: async, sync, or webhook mode.

OpenRouter batch custom_id vs one Sume Idempotency-Key per job
OpenRouter's Batch API needs a custom_id unique within each batch. Sume has no batch envelope for these submits: give each job its own Idempotency-Key.

OpenRouter batch 24h window and expired vs Sume queued jobs
OpenRouter batches use a 24-hour completion window and can end as expired. Sume jobs have no queue expiry option today: a queued job waits, or you cancel it.

OpenRouter batch DELETE 409 vs Sume cancel 409 after start
OpenRouter returns 409 when you DELETE an in-flight batch. Sume returns 409 job_generation_already_started on cancel once generation starts. Handle both.

OpenRouter batch has no results download; Sume has a URL per job
OpenRouter batch results come inline on GET /batches/:id with no download endpoint. Sume returns a result_url per job and a batch result read over MCP.

OpenRouter batch results kept 30 days; Sume media URLs don't expire
OpenRouter deletes batch inputs and results 30 days after creation, then returns 410 Gone. Sume job results use durable media.sume.com URLs that do not expire.

OpenRouter batch statuses vs Sume job statuses mapped
OpenRouter batches go validating, in_progress, finalizing, completed. Sume jobs go queued, processing, then completed, failed or canceled (one L). Table.

OpenRouter errors after HTTP 200 vs Sume: 2xx means the job exists
OpenRouter can send an error as an SSE event after a 200. Sume has no SSE transport: a 2xx means the job exists, and failures show up on the job record.

OpenRouter weight_exceeds_budget: never retry; Sume queue_full
OpenRouter's weight_exceeds_budget 402 will not clear on retry; in_flight_budget_exhausted will. Sume splits the same way: queue_full retries, 402 does not.

Pipedream 750-second timeout: poll loop or Sume webhook?
Pipedream paid plans allow 750 seconds per run. Submit the Sume video job, then finish in a second workflow triggered by the webhook not a long poll loop.

Retool resource block 10-minute limit and Sume async jobs
Retool async resource blocks stop at 10 minutes. Submit the Sume job in async or webhook mode, return the job id, and finish in a separate step or workflow.

Rime Arcana retired: use Coda; Sume TTS Router model_not_found
Rime retired Arcana on 2026-08-15 and serves arcana ids with Coda. Sume's TTS Router fails unknown model ids with 400 model_not_found; check the catalog.

Rime Coda 180 s audio limit vs Sume TTS 1200 s limit
Rime Coda 1.0.5 uses a 180-second maximum audio duration. Sume TTS 1.0 fails audio past 1200 seconds with tts_duration_exceeded; join parts for longer audio.

Seedance 2.5 duration -1: auto length vs Sume integer duration
BytePlus Seedance 2.5 accepts duration 4-30 or -1 and ratio adaptive. Sume documents duration as integer seconds and per-model aspect ratios. How to map it.

Seedance 2.5 mov output for editing and extension, and Sume MP4
BytePlus recommends mov (H.264, yuv444p) as input and output for Seedance 2.5 editing and extension. Sume Timeline and Video filter return MP4. What to plan.

Seedance 2.5 reference video limits: 200 MB, 24-60 fps
BytePlus caps one Seedance 2.5 reference video at 200 MB and 24-60 fps, audio at 2-30 s. Check your files, then see what Sume's docs list for the model.

Seedance asset:// ids vs Sume reference URLs
BytePlus Seedance takes asset://<asset ID> for preset digital characters and authorized assets. A Sume request takes image_url objects with HTTPS URLs instead.

Seedance video URL: 24 hours, 100 downloads, and Sume artifacts
BytePlus keeps a Seedance 2.5 video URL for 24 hours, at most 100 downloads. What that means, and how to read and save a Sume job's hosted video artifact.

Supabase Edge Function 400 s wall clock vs a Sume video job
Supabase Edge Functions cap wall clock at 150 s on Free and 400 s on Paid. Do not wait on a video: submit in one function and receive the webhook in another.

Supabase Edge Function secrets: 100 per project, 2 for Sume
Supabase allows 100 secrets per project. A Sume webhook receiver needs two: your API key and the webhook signing secret. Names, rules and what to verify.

sync-3 lip sync takes 10-15 min: async job and webhook pattern
Sync lists sync-3 at about 10-15 minutes for a 30 s video. Do not hold a request open: submit async, take a terminal webhook, and keep polling as a backup.

Sync lip sync output: H.264 crf 17, HDR to SDR, alpha removed
Sync re-encodes lip sync output to H.264 at crf 17, turns HDR into SDR and drops alpha. Here is that next to what Sume returns for avatar video.

Sync sync_mode bounce, cut_off, silence, remap vs Sume lengths
Sync offers bounce, cut_off, silence and remap when audio and video lengths differ. Sume has no such option: trim or split audio to the accepted window.

Synthesia dubbing file size limit: 5 GB or 2.5 hours
Synthesia dubbing accepts uploads up to 5 GB or 2.5 hours, 4K, in .mp4, .webm or .mov. Sume's limits sit at the audio stage: a 10 MB audio_url and 300 s.

Synthesia rejected status: moderation, error, and your handler
Synthesia marks a moderated video rejected, separate from error. Sume reports content_policy_rejected as a public_reason; an unfunded run is a 402 instead.

Synthesia video.completed webhook: the download URL is time-limited
Synthesia sends video.completed and video.failed, and its download URL is time-limited. Sume sends job.completed, job.failed and job.canceled with durable URLs.

Take It Down Act 48-hour removal for AI video apps and URLs
The FTC enforces a 48-hour removal duty on covered platforms. If your AI video app serves generated MP4s from durable public URLs, here is what to plan for.

Per-task cost in the API response: Runway vs Sume usage.cost
Runway task responses carry a credit cost, estimated while running and final on completion. On Sume, read usage.cost on the job, a USD billable amount.

Threads API: wait about 30 seconds before publishing a container
Threads suggests waiting on average 30 seconds after creating a media container before threads_publish. Poll the container status, like a Sume job poll.

TikTok brand_organic_toggle vs brand_content_toggle on AI video
Set brand_organic_toggle for your own business, brand_content_toggle for a paid partnership, and is_aigc for AI video. How to carry the flags with each clip.

TikTok rate_limit_exceeded: 6 requests a minute per access_token
TikTok Direct Post allows 6 requests a minute per user access_token and returns 429 rate_limit_exceeded past it. Space publishes; Sume limits only generation.

TikTok spam_risk_too_many_posts vs reached_active_user_cap
Two daily TikTok 403s: spam_risk_too_many_posts is the per-user API post cap, reached_active_user_cap is your client quota. Hold videos till tomorrow.

TikTok unaudited_client_can_only_post_to_private_accounts
TikTok returns a 403 when an unaudited client posts to a non-private account. Test with private posts until the audit passes; Sume only supplies the file.

TikTok url_ownership_unverified with a media.sume.com URL
PULL_FROM_URL needs a TikTok-verified domain or prefix, so a media.sume.com URL fails with 403. Upload the bytes with FILE_UPLOAD or host a copy on your domain.

TikTok PULL_FROM_URL times out after one hour: keep the URL live
TikTok pulls a PULL_FROM_URL file at up to 100 Mbps and times out one hour after it starts. The URL must stay live; a Sume durable URL has no expiry.

Veo 3.1 latency is 11 seconds to 6 minutes: set your poll to match
Google lists Veo 3.1 request latency from 11 seconds to 6 minutes at peak. Poll with a deadline over 6 minutes; Sume's video docs poll every 30 seconds.

Veo 3.1 videos are stored 2 days: download them, and what Sume does
Google says Veo videos are stored for 2 days, and referencing one for extension resets the timer. Save the file early; Sume jobs return Sume-hosted artifacts.

Wan 3.0 at 30 fps, HappyHorse at 24: set Timeline output.fps
Alibaba lists Wan 3.0 at 30 fps and HappyHorse 1.1 at 24 fps. Joined in Sume's Timeline, a differing output.fps resamples sources and warns; omit it to match.

X animated GIF limit: 15 MB, 350 frames, and the MP4 alternative
X allows an animated GIF up to 15 MB and recommends 1280x1080 and 350 frames or fewer. Sume makes MP4 video, not GIF, so attach a short MP4 instead.

X API 403 "not allowed to post a video longer than N minutes"
The 403 means the clip exceeds the posting account's cap: 20 minutes by default, 125 for Premium or verified. Cut the video to that cap before you post.

X API paid_partnership true: disclose a sponsored AI video Post
Set paid_partnership true in POST /2/tweets to label a Post as paid promotion on X. Sume returns the video file; your own call creates and flags the Post.