
Captions misspell your brand name: fix it with authored cues
Sume video captions have no custom dictionary field. Pass cues with your own spelling and speech-to-text is skipped, so the brand name prints as written.
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

Sume video captions have no custom dictionary field. Pass cues with your own spelling and speech-to-text is skipped, so the brand name prints as written.

Music Router rejects duration and duration_seconds. Ask for the length in the prompt, then fix the exact output length with Timeline 1.0 audio.duration_seconds.
Inline captions on an avatar video are rejected when the estimated duration is over 60 seconds, the same cap as the job. Split long scripts into jobs.

Sume's video filter allowlists chromakey and colorkey, but an MP4 holds no alpha, so a key must be composited inside the graph. Not AI background removal.

A pinned mcp_tool_listing holds the Sume tool list fetched for one session scope. Sume's list depends on mcp:read vs mcp:write and never pushes list changes.

Claude Code 2.1.274 names the missing permission on a 403 insufficient_scope. For Sume, a read-only grant lacks mcp:write: re-authenticate and turn Write on.

Claude Code 2.1.285: a tool with _meta anthropic/alwaysLoad false stays deferred under a server alwaysLoad. What that means for Sume's tool set.

Claude Code 2.1.286 fixed API 400s when a tool returned an object, number or boolean. Sume tools return text content blocks, errors too.

Claude Code 2.1.285 stops background Bash after 30 minutes by default (2 h max). A Sume render is a job id, so poll it with jobs_wait slices, never resubmit.

Claude Code on Bedrock, Vertex and Foundry now negotiates MCP 2026-07-28 by default. The opt-out env vars, and the versions the Sume server accepts.

Claude Code 2.1.286 fixed a repeated MCP auth reminder in headless runs. Sume OAuth tokens last one hour with no refresh, so unattended runs should use a key.

Claude Code 2.1.281 stops a locked macOS keychain from dropping stored MCP OAuth tokens. A Sume token lasts one hour with no refresh grant.

Claude Code 2.1.280 lets CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH change the 2,048-character cap. Sume's instructions are long; use tools_schema.

Claude Code 2.1.284 refuses claude mcp add when managed settings limit MCP servers to plugins. What the Sume remote URL needs from your admin.

Claude Code 2.1.286 fixed connectors showing no tools after a server dropped an older handshake. Sume answers 2025-03-26, 2025-06-18 and 2025-11-25.

Claude Code 2.1.283 saves images from MCP tools to a file. Sume tool results are text with a media.sume.com URL, so keep the URL as the durable reference.

Claude Code 2.1.286 credits an MCP server for calls made while it was still connecting. Sume spend is a separate number: read it with usage_get.

The auto policy evaluates each MCP tool call server-side. Sume has no paid scope, so pair auto with dry_run, max_spend_usd and a scope-limited session.

Opus 5.5 returns 400 for tool_choice any or tool. Use auto, then steer to generate_image with instructions and tools_schema, and keep dry_run before paid calls.

Codex 0.158.0 makes MCP and Code Mode input schema budgets configurable. Sume keeps tool descriptions short and shows fewer tools to a read-only session.

Sume's video filter cannot load a .cube LUT because lut3d is not allowlisted. Per-channel curves with lutrgb or lutyuv are the supported way to grade.

Deepgram Flux can switch numerals on mid-stream for PINs and phone numbers. Sume STT is a batch job with fixed provider settings and no numerals flag.

Deepgram widened Flux TTS speed to 0.5-1.5 in 0.05 steps on 2026-08-31. Sume TTS accepts generation_config.speed from 0.6 to 1.5, plus a deprecated enum.

Devin Desktop 3.10.35 uses MCP servers an ACP client passes in session/new. Pass Sume's streamable HTTP URL and an API-key header, not editor config.

ElevenLabs added cascade_timeout_seconds (2-15 s) for Speech Engine retries. Sume's wait_timeout_seconds is a different knob: a 0-30 s HTTP wait on a job.

ElevenLabs added a cursor-paginated phone number endpoint. Sume list routes use keyset pages: pass next_cursor back as cursor until has_more is false.

ElevenLabs Flows template runs can send a terminal result to a webhook, and webhook targets now need type all or ids. Sume sets the callback per job.

ElevenLabs now emits is_final_audio_for_turn after every byte, even for MP3. Sume marks boundaries differently: sentence segments, sliced only for wav or raw.

ElevenLabs lists eleven_turbo_v2_5 as deprecated and suggests eleven_flash_v2_5. Sume's TTS Router pins an explicit catalog id, so list the ids first.

Voice Design now returns 409 while a preview generation is in progress; ElevenLabs says retry. On Sume, reuse an Idempotency-Key only for the same payload.

Meta's Stories API says a story's photo or video cannot have been used in a published post. Make the story variant a new file with a Sume job, not the old URL.

Timeline 1.0 refuses fades that are too long: each edge fade is 0 to 5 seconds and fade in plus fade out must not exceed the output length.

fal bills WebSocket sessions via x-fal-billable-units headers. Sume has no such header: cost is a per-job ledger row you read back by job or run.

Sume's video filter allowlists ffmpeg's lenscorrection, so barrel distortion from a wide action-cam clip can be corrected by coefficients you choose and test.

BFL says FLUX.2 accepts JSON-structured prompts. On Sume, prompt is a plain string, so JSON goes in as text; other fields are typed.

BFL serves klein LoRAs through -finetuned endpoints with finetune_id. Sume rejects provider-specific parameters, so use reference images instead.

BFL separates input moderation from output moderation and adds a Moderation Reasons array. Sume groups refusals under content_policy_rejected.

BFL's safety_tolerance runs 0 (strictest) to 5 on FLUX.2, default 2. Sume has no such dial: it returns 400 unsupported_parameter.

A Format run takes up to 30 images in attachments[], type input_image, by public HTTPS URL or asset_id. Video and audio attachments are not supported today.

Google's September 18 changelog limits Gemini 2.5 models to users who already used them. New projects are pointed to 3.5 Flash-Lite or 3.8 Flash.

Google names gemini-3.8-flash-lite-tts as the replacement for the 3.1 preview TTS model. What that changes for you, and what stays fixed on Sume TTS.

Gemini 3.8 Flash TTS went GA on Sep 22. On Sume, speech is a job: submit async, store the job id, poll the status URL, and never resubmit while it runs.

Gemini 3.8 TTS unary requests return WAV with a RIFF header. Sume TTS 1.0 defaults to mp3 at 44100 Hz, so ask for wav when your pipeline needs it.

Gemini 3.8 TTS speaks its text field verbatim, so style goes in speech_metadata. On Sume, keep the transcript clean and put delivery in generation_config.

Gemini's rate-limits page lists a 2GB input file limit and 20GB file storage under Batch API limits. Sume takes public HTTPS URLs instead of uploaded files.

Gemini Batch API allows 100 concurrent batch requests and a 2GB input file. Sume bulk runs queue up to 100 Format runs with concurrency 1 to 16.

Gemini rejects a lowercase image_size such as 1k; use an uppercase K. Sume's images API takes a resolution tier, and only values the model lists.

Omni 1.1 Flash can render between two keyframes, including looping clips. On Sume, Omni takes image_url plus end_image_url; frame_images covers other models.

Google chains Omni 1.1 Flash extensions with previous_interaction_id. Sume has no such field: each request is its own job, and an edit takes a video_url.

Sume TTS can return pcm_mulaw or pcm_alaw at 8000 Hz in wav or raw containers. Gemini 3.8 TTS does it with audio/mulaw and audio/alaw mime types.

Gemini voice design returns a persistent voice_ id from a text prompt. Sume TTS accepts only a voice UUID or voi_ library id, and rejects other shapes with 400.

OpenAI says to omit input_fidelity for gpt-image-2 because inputs run at high fidelity. Sume lists no such field and rejects unlisted parameters with 400.

OpenAI returns moderation_blocked with moderation_details. On Sume, policy refusals are grouped under content_policy_rejected. What to read and when to retry.

OpenAI returns revised_prompt on the image generation call. A Sume POST /v1/images response has data[].url and usage, with no revised prompt field.

OpenAI says not to auto-retry image_generation_user_error without changing the prompt or inputs. On Sume, retry 429 with backoff; failed images are not billed.

OpenAI's gpt-transcribe accepts multiple expected input languages. Sume STT takes one optional language_code hint or auto-detect. What to send for mixed audio.

xAI lets you request base64 instead of a temporary URL. Sume returns Sume-hosted, signed URLs in data[].url, not inline base64, for x-ai/grok-image.

HeyGen sends 429 with a Retry-After header in seconds. Sume sends 429 rate_limited with retry-after when present, and a separate 429 queue_full.

HeyGen's POST /v3/assets caps files at 32 MB, URLs included. Sume has no asset step: requests take public HTTPS URLs, and oversized bodies return 413.

HeyGen audio_asset_id takes MP3 or WAV up to 32 MB. Sume's Fabric audio_url must be on the Sume media host and at most 10 MB. What each rule means.

HeyGen's pages say 30 minutes per audio-to-video request and 10 minutes for avatar audio input. Sume's Fabric route caps duration_seconds at 300.
HeyGen caps avatar script text at 5,000 characters. Sume has no character cap in its docs: it accepts scripts estimated at 4-60 seconds inclusive.

HeyGen download_failed means a media URL was not public, mismatched or corrupt. Sume returns image_not_fetchable or input_media_unreachable for similar cases.
HeyGen type image animates a PNG or JPEG with a script and voice_id, no avatar setup. Sume does it with image_url plus audio on the Fabric route.

HeyGen returns code insufficient_credit with HTTP 402. Sume returns insufficient_credits, plural, also 402. Match on the exact string and the status.
HeyGen POST /v3/avatars type prompt takes up to 1000 characters and an aspect_ratio. Sume creates a text-only avatar with a Prompt input on avatar-1.0/generate.

HeyGen lets an agent provision a key with stripe projects add heygen/api. Sume keys are created in the dashboard, workspace-scoped and shown once.

HeyGen studio videos allow 50 scenes and 30 minutes per scene. Sume multi-scene video_inputs share one 4-60 second window and one resolved avatar.

Luma counts requests in a sliding 60-second window and returns 429 if RPM or concurrent jobs fails. Sume returns 429 rate_limited: back off, reuse the key.

Luma caps active generations per API client and answers 429 when full. Sume ties concurrency to your plan and queues extra jobs until queue_full.

Luma Agents API video URLs are presigned and expire after 1 hour. On Sume, a completed job is fetched with your API key from the /content endpoint.

Luma's X-Request-Id echoes your header or is generated. Sume sends x-sume-request-id on every response; quote it, plus error.code, when you contact support.

Luma extends video from one prior generation id as start or end frame. Sume docs describe frame_images with first_frame or last_frame, a new job per clip.

Luma pitches the Ray3.2 API for pipelines and render farms. On Sume, wire an async video job with callback_url, Idempotency-Key and a request id to log.

On Luma Ray 3.2 a video edit takes its aspect ratio from the source and ignores the field; reframing needs a target. Sume edits through video_url.

In Timeline 1.0, raise the voice with audio.gain_db (-60 to 12) and lower the music bed with soundtrack.duck_db (0 to 20). Ranges and refusal codes.

@mastra/mcp 2.0.0 drops the legacy handshake and speaks MCP 2026-07-28 only. The Sume server defaults to 2025-11-25, so pin the version you test.

Gemini's Batch API trades up to 24 hours of turnaround for higher rate limits. Sume has no batch tier for images: send async or webhook jobs per request.

A durable OpenAI Agents API session continues across turns; a Sume render is a separate job. Keep the job id in the session and re-read it, never re-create.

openai-agents-python v0.20.0 keeps MCP error content with structured output. Sume tool failures arrive as isError text with code, message and http_status.

openai-agents-python v0.20.0 serializes non-text MCP blocks as JSON. Sume tool results are text blocks, with media delivered as URLs inside the JSON.

Set the MCP retry backoff ceiling low enough that a Sume 429 with retry-after is honored first, and never retry a paid create without its idempotency key.

OpenAI project keys can now carry an expiration date and orgs can cap lifetime. Sume documents no expiry field: rotate by minting a replacement key.

OpenAI's async tool calling lets the model keep working while your tool runs. For a slow Sume render, return the job id fast, then wait in slices.

OpenAI fixed an image-encoding bug and advised retrying affected workflows. On Sume, a replayed idempotency key returns the original; use a new key to rerun.

OpenAI's docs list mutual TLS and workload identity federation. Sume authenticates API calls with one API key header and signs webhooks with HMAC.

OpenAI admins can allow only service-account keys. On Sume, service-account keys cannot create Format runs or bulk queues; use a user-issued key.

Sume has no auto zoom switch. Use a crop op for a fixed punch-in or the allowlisted zoompan filter in a video-filter graph; there are no keyframes.
remove.bg allows 500 images per minute at about 1 MP, less for larger inputs. Sume limits requests per minute per key and sends retry-after on 429.

remove.bg's API has bg_color and bg_image_url. Sume RMBG 1.0 takes only an image_url and returns a PNG with alpha, so the new background is a second step.

remove.bg has crop, roi, crop_margin, scale and position. Sume RMBG takes an image_url only and rejects other fields, so cropping happens before or after.
remove.bg does not support PNG above 10 megapixels; use WebP or ZIP up to 50 MP. Sume RMBG returns PNG with alpha and caps compressed input at 20 MiB.

remove.bg's API has a type parameter and an X-Type header. Sume RMBG 1.0 has no foreground-type hint: send an image_url and Sume selects the model.

Runway now fails requests for gen3a_turbo and gen4_aleph. Avoid the same break on Sume: read /v1/videos/models instead of hard-coding ids.

Runway's enterprise usage export lists credits per generation. On Sume, GET /v1/usage returns USD ledger rows per workspace, filterable by job_id.

Runway takes a 1080p ratio like 1920:1080. Sume takes two fields instead: resolution 1080p plus aspect_ratio 16:9, and rejects size on v1.

Runway's extend mode needs promptText and no ratio. Sume has no extend flag: continue a clip with a first_frame image or a Video Router video_url edit.

Runway's Seedance 2.5 text-to-video can omit promptText when a reference is given. On Sume the video `prompt` field is required, so send a short one.

Runway says never retry SAFETY or ASSET.INVALID failures, retry INTERNAL ones with a delay. The same triage on Sume: 429 with retry-after, new keys for runs.

Synthesia added a Billing API endpoint for credit usage. Sume's equivalent is GET /v1/usage: reservations, captures and refunds, filterable by run or job.

TikTok's photo post endpoint takes up to 35 public image URLs by PULL_FROM_URL and a photo_cover_index. How to plan the generated-image batches that feed it.

Set is_aigc to true on a TikTok photo post of generated images to add the AI-generated tag. auto_add_music is direct post only. And the audit rule.

TikTok's photo post API caps the title at 90 UTF-16 runes and the description at 4000, unlike video posts. How to count them and where Sume fits in.

In Timeline 1.0, soundtrack.fade_out_seconds fades only the music bed (max 10 s). output.fade_out_seconds fades the whole render (0 to 5 s). Which to use.

Timeline 1.0 transitions are capped at 1 second and 50 percent of the shorter neighbouring clip. Longer ones return transition_too_long. What to do instead.

A render that opens on black usually has a fade or a late first clip. Timeline 1.0 refuses a first start other than 0 and any first-segment transition.

WhatsApp accepts AAC, AMR, MP3, M4A and OGG (Opus, mono) up to 16 MB. Sume's audio detach returns mp3 or wav, so mp3 fits; ogg needs another tool.

WhatsApp video messages take MP4 or 3GP up to 16 MB, H.264 video and AAC audio only. See what Sume's exact trim outputs and what you still check yourself.

WhatsApp media IDs from the API expire after 30 days, webhook IDs after 7, and a media URL works for 5 minutes. Keep your own durable source, not the ID.

Video inspect returns probe facts, stills and optional STT. The FAQ ties Article 50(3) to emotion recognition; the inspect docs list no such output.

Section 1 of the EU Code is for providers marking AI output; Section 2 is for deployers labelling deepfakes. A team shipping API video starts with its own role.

Nova Reel's start_async_invoke writes output.mp4 to your S3 bucket and needs IAM. A Sume job returns a result_url and durable media.sume.com links.

SB 1000 recasts the California AI Transparency Act: no user threshold, a disclosure verification tool, no manifest option. What Sume's docs list.

The compact-2026-09-04 beta swaps old messages for a signed compaction block. Keep Sume job ids and keys outside it; re-read with jobs_status.

fal returns content_policy_violation as a non-retryable 422. Sume's closest job error category is generation_rejected: inspect events and fix the input.

fal says to allow fal.run, queue.fal.run and the falrun.com backups. For Sume, allow api.sume.com and media.sume.com; webhooks come to your own HTTPS host.

fal returns generation_timeout as a 504 typed error. Sume has a generation_timeout category; the documented action is to poll status or retry later.

Sume's status endpoint returns a queue-shaped status field with IN_QUEUE, IN_PROGRESS, COMPLETED, FAILED and CANCELED, mapped one-to-one onto sume_status.

fal marks retryable errors with X-Fal-Needs-Retry. Sume signals retry through error category and code, retry-after on 429, and the same idempotency key.

fal retries queued requests; X-Fal-No-Retry turns that off. On Sume you keep retries and make them safe with an Idempotency-Key on every paid submit.

FFmpeg 8.1 adds D3D12 H.264/AV1 and Vulkan ProRes encoding. Sume compiles ffmpeg server-side and rejects codec and crf fields, so you cannot pick an encoder.

FFmpeg 8.1 lists new drawvg and vpp_amf filters. Sume video-filter only runs allowlisted filters and refuses unknown names with unknown_filter.

Firefly Custom Models trains subject or style models you call by asset ID. Sume offers no image model training; use up to 16 input references.

Firefly's Upscale API enhances resolution at 2x, 4x or 6x. Sume exposes upscaling as the image_upscale_create MCP tool: a paid job you poll.

Fish selects drama-3-preview with a model header. Sume TTS Router takes a required model id from its catalog, and unknown ids fail with 400 model_not_found.

Gemini splits project-level static webhooks from per-request dynamic ones. Sume has only the per-job kind: pass webhook_url on each submit call.

Gemini dynamic webhooks use asymmetric JWKS-signed JWTs. Sume signs the raw body with a shared-secret HMAC SHA-256 and a timestamp. How each verifies.

Gemini's Interactions API returns the image on interaction.output_image. Sume's /v1/images returns data[].url, or a 202 job envelope. Check the status code.

Gemini background interactions can resume a dropped stream from the last event. Sume has no stream to resume: poll status_url and read events_url snapshots.

Gemini Omni returns large videos as a URI you poll until ACTIVE. Sume results are durable media.sume.com URLs with no ACTIVE state and no expiry to manage.

Runway's Gemini Omni Flash video-to-video edit accepts up to 5 reference images. On Sume, a video_url edit cannot be combined with any reference field.

Gemini suggests background=false, store=false, stream=false for synchronous video. Sume sync mode waits at most 30 seconds, then you poll status_url.
Gemini TTS stores at most 200 voices per project for a year. On Sume you list avatars and use one whose voice.status is ready, with no stored-voice quota.

Gemini static webhooks return the signing secret once at creation. Sume's secret can be read again from the dashboard or GET /v1/webhooks/signing-secret.

Gemini webhooks send a snapshot with pointers to results. A Sume job.completed webhook already carries the media.sume.com artifact URL, so no second fetch.

gpt-realtime-2.1 works only on v1/realtime, not Chat Completions or Batch. Sume TTS 1.0 is an async job you poll, which suits narration, not live talk.

On xAI, pinning a first frame with image takes <IMAGE_0> and references start at <IMAGE_1>. Sume Omni tags are <IMAGE_REF_0>, 0-based by list order.

In xAI video extension, duration is the added seconds only: a 10s input plus duration 5 returns 15s. Sume has no extend on Omni; chain clips from a last frame.

xAI's extension page accepts a source video as a public URL, base64 data URI or file_id. Sume's video fields take public HTTPS media URLs only.

HeyGen needs videos:write to create and videos:read to poll. Hosted Sume OAuth has mcp:read and mcp:write, no paid scope; spend is wallet admission.

HeyGen Assets library folders are app-created, flat, and usable as folder_id destinations. Sume takes media as public HTTPS URLs, with no folder step.

HeyGen brand glossaries now take do_not_translate_terms and forced_translations for video translation. Sume has no glossary field; handle terms in your text.

Ideogram's ad-localizer takes one language per call and an exact_copy mapping. On Sume you send the ad as a reference and spell out the copy in the prompt.

Ideogram returns images directly unless async or webhook_url is set, then you poll /v2/generations. Sume blocks up to 30s, then returns a 202 job.

Ideogram's quickstart says image URLs expire, so download what you keep. Sume returns Sume-hosted signed URLs in data[].url. Where each result lives.

Ideogram layerize returns positioned text blocks plus a text-free base. Sume's images API returns flat Sume-hosted signed URLs, with no layer output.

Ideogram 4.0 magic_prompt auto, on or off controls prompt rewriting. Sume has no passthrough parameters in v1, so that switch is rejected.

Ideogram's material-swap tool takes up to 4 masks and material images. Sume's images API has one optional mask_url plus up to 16 references.

Ideogram endpoints take an optional seed for repeatable results. Sume's image schema has seed, but no model advertises it, so it returns 400.

Edits now exports up to 15 minutes on iOS. Sume trim and audio detach also top out at 900 seconds of output, from a source up to 1800 seconds.

Instagram Edits compares up to 3 reels by views and watch time. Sume video inspect adds what the clips contain: probe facts, stills and an optional transcript.

Edits adds 15 in and out effects on iOS. A Sume timeline compiles six transition types, capped at 1 second and 50% of the shorter neighbour.

Edits keeps several versions of one project. Sume queues up to 100 Format runs as variants with a concurrency window of 1 to 16 and a key per batch.

A 524, 522, 523 or 525 on jobs_wait is a transport failure, not a job result. Re-issue jobs_wait on the same ids or read jobs_status once. Never resubmit.

The MCP roadmap lists DPoP finalization, but Sume's hosted MCP issues mcp_at_ bearer tokens sent in the Authorization header, valid for one hour.

ETag-versioned MCP tool results are a roadmap idea. In Sume, idempotency_key is write dedup, not a cache validator; job reads are separate read tools.

Human-presence attestation is only a roadmap topic. Sume separates people from automation by credential: OAuth consent in a browser, or an API key.

MCP TypeScript SDK 2.2.0 treats .localhost hosts as loopback for token endpoints. Sume's redirect check allows http only on localhost and 127.0.0.1.

For a large MCP tool set, list first and fetch one contract second. Sume has tools_list for visible tools and tools_schema for a single tool by name.

MCP has no single error standard across surfaces yet. Here is how Sume's named outcomes map to retry, re-auth, or stop in a hosted MCP client.

Give a sub-agent a Sume token granted only mcp:read and it sees read-only tools, so it can inspect jobs and assets but never submit a paid generation.

MCP's roadmap names Workload Identity Federation. Sume's hosted MCP advertises only the authorization_code grant, so headless workloads use an API key.

Modal web endpoints return a 303 redirect after 150 seconds. Sume returns 202 with status_url and result_url, so a client polls and follows no redirects.

OpenAI keeps image edit state with previous_response_id in the Responses API. On Sume, each /v1/images call stands alone: re-send the image as a reference.

How to read supported_parameters enum and range descriptors before sending an image request, and what Sume does with a parameter a model does not list.

OpenRouter's video guide points to a webhooks cookbook. On Sume, pass an HTTPS callback_url, verify x-sume-webhook-signature, retry with Idempotency-Key.

Replicate bills a canceled prediction for run time, not an aborted one. Sume cancels only before generation starts, then returns 409.

Replicate lets webhook_events_filter pick start, output, logs and completed. Sume webhooks send terminal job events only, so there is no filter to set.

Replicate suggests a query param like customId on the webhook URL. Sume bodies carry request_id and job_id, and job_id is the receiver's idempotency key.

Runway's Model Router has allow and deny lists plus per-modality credit ceilings. Sume has no lists: pin a catalog id, or send sume/auto and accept its pick.

Shopify's Catalog API can now filter by media type: image, video or model_3d. A product only matches video if it has one, so render a product clip.

Spotify converts HDR (Rec.2100) uploads to SDR Rec.709. A Sume exact trim re-encodes to yuv420p and has no colour fields, so tone-map before you trim.

Spotify upmixes mono to stereo, downmixes 5.1, and rejects multi-channel. Sume audio detach offers only channels source or mono; it cannot mix to stereo.

sync-3 accepts JPEG, PNG and WebP stills. Sume's docs set URL rules instead: a fetchable public HTTPS image, with private and signed URLs rejected.

Sync Labs batch takes 20 to 500 lip sync generations in one JSONL file on Scale and Enterprise. Sume bulk runs queue 1 to 100 Format runs with a 1 to 16 window.

Sync Labs allows 100 POST /v2/generate and 600 GETs a minute. Sume has a per-plan requests-per-minute budget; read ratelimit headers and retry-after.

AI Gateway caps the persisted video start request at 300 KiB and answers inline base64 with 413. On Sume, send public HTTPS URLs; 413 is payload_too_large.

AI Gateway's poll option sets intervalMs (5000) and timeoutMs (600000). Sume jobs return next_poll_after_seconds, and your client owns the deadline.

experimental_startVideo returns once the job is accepted and can call a webhookUrl. On Sume, send mode webhook with webhook_url and keep polling as backup.
Vimeo recommends square pixels (1:1). Sume's video filter allowlist includes setsar, setdar and scale, so a filtergraph can set the sample aspect ratio.

QwenCloud lists smart duration and adaptive aspect ratio for Wan 3.0. On Sume you send an integer duration and an aspect_ratio the model supports.

Wan 3.0 lists a sound toggle at QwenCloud. On Sume, generate_audio defaults to the model's audio capability and some models reject false.

YouTube accepts 48 and 50 fps and says to upload at the recorded rate. Sume's trim and Timeline output.fps conform only to 24, 25, 30 or 60.

YouTube says deinterlace 1080i60 to 1080p30 before upload. Sume's video-filter allowlist names no deinterlacer and refuses unknown filters.

YouTube asks for MP4 with moov first and no edit lists. Sume's keyframe trim is a stream copy; exact re-encodes. The docs do not state moov placement.

YouTube now lists Opus and Eclipsa Audio beside AAC-LC for uploads. Sume audio outputs are wav (pcm_s16le) and mp3 only; neither is Opus or Eclipsa.

YouTube recommends 8 Mbps for 1080p SDR at 24 to 30 fps and 12 Mbps at 48 to 60. Sume rejects codec and crf fields and exposes no bitrate setting.

YouTube lists H.264 High Profile, 4:2:0 and progressive scan. Sume's exact trim re-encodes with libx264 and yuv420p; profile, GOP and CABAC are not fields.

Sume does not publish an A2A agent card. It has a hosted MCP endpoint and Agent Completions with one model, sume-agent. Which door fits, and when.

Akool says talking photo image, video and voice resources are valid for 7 days, so save them early. Sume media URLs do not expire; archive by need.

Alibaba Model Studio maps Sora 2, Veo 3.1 and Kling 3.0 to happyhorse-1.1 models. Which of its targets are Sume catalog ids, and how model: sume/auto fits in.

In an ant apply agent file, declare the Sume server by name and URL, https://mcp.sume.com/mcp. The API key belongs in a vault, never in the committed file.

Argil takes mp3, wav and m4a uploads up to 50 MB. Sume's Fabric route takes a Sume-hosted audio URL up to 10 MB; H3 Max lip sync wants 5-14.8 seconds.

AssemblyAI's Sync API returns a short-clip transcript in one POST. Sume STT mode sync waits up to 30 seconds, then returns the job id to poll if not done.

AssemblyAI's launch post frames its Sync API for short clips. Sume STT 1.0 takes duration_seconds from 1 to 600 and reserves one minute if you omit it.

BFL caps concurrent requests at 24 (6 for flux-kontext-max). Sume treats concurrency as a dispatch limit: extra jobs queue until you hit 429 queue_full.

BFL raises on 402 and backs off on 429. Sume splits the same way: 402 insufficient_credits is a stop, 429 queue_full or rate_limited means wait and retry.

BFL says to always poll the polling_url it returns. Sume's job envelope carries status_url and result_url for the same reason: follow them, do not build URLs.

BFL says webhook users need no polling_url change. On Sume, webhook mode still returns status_url, so verify the signed callback and keep polling as a backup.

Content Credentials 2.3 shows clearer edit history such as resizing, markup and redactions. Sume trim and filter return a new MP4; inspect never makes one.

Cartesia's accent field is for multilingual voices only and works independent of locale. Sume's TTS request has no accent field: pick a voice id and language.

Cartesia says to feed an Instant Voice Clone up to 60 seconds of audio on sonic-3.6. Sume's TTS API does not take reference audio; it takes a voice id.

From Agent SDK 0.3.286 an omitted permissionMode can start in auto mode. Sume's idempotency_key and scope checks run server-side whatever mode you pick.

After rewind_conversation or a priority-now message, the MCP call is handled client-side. A submitted Sume job has its own id: find it with jobs_list.

Switching off an MCP server in Claude Code SDK sessions removes its tools for new calls. Sume jobs already submitted keep running until you read or cancel them.

Claude Code 2.1.283 stopped reporting success when the config could not be written. After claude mcp add for Sume, confirm with mcp list and mcp_health.

Cloudflare Workflows can delete up to 100 instances per deleteBatch call. Delete only after the Sume job reaches a terminal event, and keep the job id first.

Colossyan posts finished or failed to your callback, or you poll every 5 s. Sume webhooks are terminal-only, so keep status_url polling as a backup.

Colossyan can size a scene to the actor's speech. In Sume avatar videos you set voice.duration per scene, silence beats need it, and the total stays 4-60 s.

Colossyan swaps {name} placeholders from dynamicVariables. Sume's avatar endpoint has no such field: fill the script yourself, one idempotent job per recipient.
Creatify custom avatars are built from a lipsync_input MP4 plus a consent video. On Sume, a photo input with an image_url creates a reusable avatar handle.

Cursor lets any skill be a custom mode pinned in the chat. Install the Sume skill with sume skills install; the mode cannot waive idempotency_key or MCP scope.

Cursor /goal keeps an agent on one objective. The goal text is no budget: bound Sume spend with generation_spend_cap_usd, max_paid_calls and dry_run.

D-ID's translation result_url is valid for 24 hours, so store the file or re-fetch it. Sume media.sume.com URLs do not expire. What to save and when.

ElevenLabs Audio Reference guides Music v2/v2.5 with a track of about 30 seconds. Sume Music 1.0 takes a text prompt and one optional public HTTPS image URL.

ElevenLabs speech to text accepts files up to 3 GB and 10 hours in standard mode. Sume STT 1.0 reserves up to 10 minutes per job, so cut long recordings.

The Commission says you can still sign the AI-content transparency code after 27 July 2026; that date only set the initial list. Which section fits an API team?

Meta's Reels Publishing API allows 30 API-published posts in a 24-hour moving period, enforced on video_reels. Here is how to split a 100-item Sume queue.

Error 1363127 means the Reels video is under the 540 x 960 minimum. Facebook recommends 1080 x 1920; in Sume use the 720p or 1080p tier in 9:16, not 360p.

Error 1363129 means the average frame rate is outside 24-60 fps. Conform the file to a fixed 24, 25, 30 or 60 fps with Sume Video Trim or Timeline, then retry.

FLUX.2 has no ControlNet input: BFL says to pass a pose or layout as a reference image. On Sume use image_urls or input_references; unlisted fields get a 400.

BFL returns one 429 for exceeded account rate limits. Sume splits 429 into rate_limited (back off) and queue_full (wait for a job to finish or cancel one).

How to code the handler: BFL returns a Moderation Reasons array in details. A failed Sume job returns an error category and next action, not a reasons array.

BFL says to poll the polling_url it returns on api.bfl.ai and its EU and US hosts. Sume has no region choice: you poll the status URL in the job envelope.

Gemini 2.5 access is limited to past users but not deprecated. Read the model list at runtime instead of hard-coding ids; Sume exposes /v1/catalog for that.

Gemini Omni Flash has no system instructions, temperature, top_p, stop sequences or negative prompts. Put negatives in the prompt; Sume has no such fields.

Google's Omni task field takes text_to_video, image_to_video, reference_to_video, edit or extend. On Sume the fields you send pick the mode; extend is absent.

Gemini API voice replication needs a 10-30 second source_audio and a consent_audio from the same speaker. Sume's TTS call takes a ready voice id instead.

Gemini replicated voices: stored voice_ ids keep 1 year with 200 per project; stateless voicekey_ values last 7 days. What Sume's TTS voice id accepts.

In a sandboxed GitHub Copilot app session, allow api.sume.com, mcp.sume.com and media.sume.com outbound; send the Sume key as a header, not a git credential.

GitHub's built-in GITHUB_TOKEN cannot redeliver webhooks. For Sume job webhooks, a jobs:write API key calls POST /v1/jobs/{job_id}/webhook/redeliver instead.

Google Play says apps that generate content with AI need in-app reporting or flagging that works without leaving the app. What that means for an AI video app.

Codex retires GPT-5.5 on October 14, 2026. A Sume server entry names no model, and Agent Completions only accepts sume-agent, so check your own settings.

HeyGen's brand_glossary_id changes synthesized speech only; captions keep the original spelling. Sume has TTS pronunciation_dict_id and a caption stage.
HeyGen builds a stored brand kit from a website URL with POST /v3/brand-kits. Sume has no kit object: you pass product, scene and avatar inputs per request.

Ideogram's describe endpoint returns a structured json_prompt with optional bounding boxes. The Sume docs list no such route; pass the image as a reference.

Ideogram says image URLs expire, so download what you keep. Here is what to persist after an Ideogram call, and what to store from a Sume image job result.

Ideogram caps uploads per endpoint at 10MB, 25MB or 50MB, multipart only. Sume takes public HTTPS image URLs and lists 413 and 415 errors for bad bodies.

Ideogram Reframe with Nano Banana 2 resolves aspect_ratio to the closest 1K size the model supports. Sume maps WxH on Nano Banana to the native aspect_ratio.

Ideogram's remove-background can return HTTP 200 whose body holds error and status_code. Check the body, not just the status. Sume reports failures on the job.

Ideogram's Topaz Bloom 2 upscale takes an optional prompt. Sume's image upscale takes image_url and upscale_factor only, with no prompt field. Request shapes.

Ideogram rejects a Topaz Text Refine upscale if the output exceeds 8192px on a side. Work out the largest source per factor; Sume's upscaler takes 1 to 4.

The IETF Idempotency-Key draft expired 18 April 2026 and uses 422 for a reused key; Sume returns 409 idempotency_conflict for a different body.

The IETF RateLimit draft defines structured RateLimit-Policy and RateLimit fields. Sume sends plain ratelimit-limit, -remaining, -reset and retry-after.

Instagram limits API-published posts to 100 in a moving 24-hour period, checked at content_publishing_limit. A Sume bulk queue also tops out at 100 items.

Instagram's publishing error table lists 'Maximum number of sponsors exceeded. Limit is 2 per post.' and 'Cannot tag yourself as sponsor.' How to prevent both.

LMNT's site says it has shut down. If you move to Sume TTS 1.0, voice ids do not carry over, language must be set for non-English text, and text caps at 20000.

LTX's /v1/extend is 1080p only, adds 2-20 seconds, needs 73+ input frames. Sume has no extend call here: chain clips with frame_images, then join in Timeline.

LTX's KeyframeInterpolationPipeline has no API endpoint. On Sume, frame_images accepts first_frame and last_frame on models that report support in the catalog.

LTX's POST /v1/retake regenerates one time region of a video. Sume's video edit takes a whole clip, so trim the bad section, edit it, and rejoin it.

LTX frame counts must satisfy (F-1) % 8 == 0, so 30 frames is invalid. On Sume you send whole seconds and read the allowed set from the catalog, not frames.

Luma presigned video URLs expire after 1 hour but the generation id does not. For Sume, store the job id and re-read the job instead of keeping a video URL.

Luma's video.loop fails with duration 10s, hdr or end_frame. Sume has no loop flag; models with first and last frame inputs can take one image for both.

Luma's video_reframe outpaints a source of 10 seconds or less, with no 1080p for 9:16 or 3:4. Sume crops a hosted clip instead of generating new edges.

Sume's legacy MCP batch must hold one class of work: jobs_status reads, jobs_wait waits, or other tools. A mixed array gets 400 -32600. Here is how to split it.

The 2026-07-28 MCP spec asks clients to send application_type in dynamic registration. Sume's /oauth/register reads redirect_uris and other named fields.

Sume's hosted MCP URL is https://mcp.sume.com/mcp with no trailing slash. The server registers that exact path, so write it as documented; skip redirect flags.

MCP 2026-07-28 removes the GET stream endpoint. Sume's remote MCP already answers GET /mcp with 405 and Allow: POST, so send every message as an HTTP POST.

MCP 2026-07-28 requires one JSON-RPC message per POST. Sume still takes legacy batches of 1 to 4 on the 2025-03-26 shape and returns 400 -32600 otherwise.

Sume remote MCP answers a disallowed Origin header with 403 forbidden_origin. A request with no Origin, like curl or a server SDK, is not checked this way.

MCP 2026-07-28 moves resource-not-found from -32002 to -32602. Sume's hosted MCP advertises tools only, so resources/read gets method-not-found -32601.

The MCP 2026-07-28 spec can mirror tool parameters into Mcp-Param headers via x-mcp-header. Sume takes idempotency_key as a tool argument in the JSON body.

MiniMax H3 treats first/last frames and reference roles as mutually exclusive. On Sume, frame_images takes precedence over input_references. Which to send.

MiniMax H3 caps images at 30 MB, reference video at 50 MB and the request at 64 MB, and says to use public URLs. A pre-flight list, and how Sume takes URLs.

Runway's Model Router can fall back to another model at its concurrency limit. Sume instead accepts the job as queued on the same model until a slot opens.
The revised NO FAKES Act adds counter-notice, a research exemption and streaming-music fixes. A plain summary read against avatar, face-swap and music routes.

Notion now puts additional_data.retry_after in 429/529 bodies. Sume sends a retry-after header on rate_limited. One small helper can read both.

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.

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.

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.

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 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'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 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'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'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 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 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 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 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 batches go validating, in_progress, finalizing, completed. Sume jobs go queued, processing, then completed, failed or canceled (one L). Table.

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 added us. and eu. in-region base URLs on 2026-09-09. Sume documents one host, api.sume.com, and no region-pinned base URL or ZDR toggle.

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 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 cloud workflows list concurrency 100 and burst 200. Sume bulk runs take 1-100 items at concurrency 1-16, so one bulk call fits a Retool budget.

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

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.

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.

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.

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

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

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.

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 suggests waiting on average 30 seconds after creating a media container before threads_publish. Poll the container status, like a Sume job poll.

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

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

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

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.

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.

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

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.

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.

X's chunked upload now uses POST /2/media/upload/initialize, append and finalize. Download the finished Sume video, then run the three calls yourself.

X lists DM video (dm_video) at 140 seconds and 512 MB by default. Cut a clip to length with Sume video-trim, which takes 0.2 to 900 seconds.

X requires AAC Low Complexity audio, mono or stereo, with H264 High Profile and YUV 4:2:0. What Sume's exact trim keeps and re-encodes, and what it leaves.

X video must be 32x32 to 1280x1024, 60 fps or less, ratio 1:3 to 3:1. Read literally, a default 1080x1920 Timeline file is over; conform with video-trim.

videos.insert lists status.containsSyntheticMedia, a boolean on the videos resource. Sume returns the file; you set the flag in your own insert call.

YouTube's videos.insert page lists 100 calls per day in a Video Uploads quota bucket. Size a Sume bulk queue of up to 100 Format runs to fit that day.

Azure batch synthesis accepts up to 10,000 text inputs in a 2 MB JSON body. Sume TTS 1.0 takes one transcript of up to 20,000 characters per job.

Azure says half of batch outputs finish in 10 to 20 seconds and 95% within 120. Sume TTS sync mode waits at most 30 seconds, then hands you a status URL.

Azure writes word timings as AudioOffset and Duration in milliseconds, in a separate file. Sume returns words[] with start and end seconds on the job result.

Azure says the Long Audio API retires April 1, 2027 in favor of batch synthesis. Sume TTS 1.0 handles long text as async jobs capped at 1,200 seconds of audio.

Sume's video filter allowlists vibrance, with intensity from -2 to 2 and a default of 0. A small positive value lifts muted color; a negative one mutes it.

Deepgram answers 413 when Aura text passes 2,000 characters. Sume TTS 1.0 accepts 1 to 20,000 characters per request, with a separate 1,200-second audio cap.

Deepgram lists English, Spanish, German, French, Dutch, Italian and Japanese for Aura. Sume TTS takes a language field per request, matched to the voice.

Deno now retries fetch transport errors only on reused connections. That cuts duplicate POSTs, but a paid Sume submit still needs an Idempotency-Key.

Sume's video filter allowlists median, which replaces each pixel with the middle value of its neighbours. Radius runs 1 to 127; start at 1 and compare.

Sume's video filter allowlists colorlevels. Raising the output black point (romin, gomin, bomin) lifts pure black to dark gray for a faded, matte look.

Sume's video filter allowlists colortemperature, a Kelvin value from 1000 to 40000 with a default of 6500. Warm or cool a clip and mix it in part.

Google lists 5,000 total bytes per request and says multi-byte characters such as ja-JP count toward it. Sume TTS 1.0 counts characters: up to 20,000.

Google lists per-minute request quotas by voice type: Chirp 3 at 200, Studio 500, Standard 1,000. Sume TTS is limited by workspace concurrency on your plan.

Google Vids lets you change caption font, position and animation. Sume's caption overrides cover colour, size, placement, phrasing and motion, not a Latin font.

OpenAI lists the snapshot gpt-image-2.5-flare-2026-09-08. Sume documents catalog slugs, so send openai/gpt-image-2.5 and check /v1/images/models for ids.

OpenAI limits Flare to 5 images per minute at Tier 1 and 250 at Tier 5. Sume applies plan concurrency, queue capacity and 429 codes instead. Both tables here.
GPT Image 2.5 caps pixels at 8,294,400. A square tops out at 2880x2880; 3000x3000 (9,000,000) is rejected. OpenAI calls sizes above 2560x1440 experimental.

Hookdeck now forwards binary and gzip bodies byte for byte. Read the raw bytes before parsing and verify the Sume sume-v1 signature over them.

Hume lists a voice description field; acting instructions are coming soon. Sume TTS 1.0 has generation_config: emotion text, speed 0.6 to 1.5, volume 0.5 to 2.

Hume's TTS overview lists 5,000 characters per utterance and MP3, WAV or PCM output. Sume TTS 1.0 takes 20,000 characters and mp3, wav or raw containers.

Inngest's default is four retries after the first attempt, five in all, and side effects are not exactly-once. Give the Sume submit an Idempotency-Key.

Map Sume HTTP errors to Inngest: NonRetriableError for 400, 401, 402 and 404, and RetryAfterError with the retry-after header on a 429.

Sume's video filter allowlists chromahold, which keeps one key color and turns the rest gray. Set color, similarity and blend, then check the graph for free.

AWS says each model and tool call becomes a durable step that is not repeated after an interruption. Here is how to shape a Sume submit as that step.

LLaDA-Image (6B, Apache 2.0, released 2026-09-04) is a download, not an API id. Sume does not list it; use a catalog model with a text-in-image prompt.

Google's Lyria 3.5 page says batch, Flex and Priority inference are not supported. Sume accepts many music jobs and queues them past your concurrency.

Google says Lyria results vary between calls. Sume's music API has no seed. How to keep the take you like and generate a few to choose from.

Microsoft's MAI-Image-2.6 and 2.6-Flash launched 2026-09-04 in Foundry preview. Sume's image catalog does not list them; check GET /v1/images/models.

Microsoft says MAI-Voice-2.1 covers 23 languages and matches a voice from a short clip. Sume TTS takes a ready voice id or avatar, not reference audio.

Microsoft lists MAI-Voice-2.1-Flash at about 45 ms and MAI-Voice-2.1 at about 550 ms. Sume TTS 1.0 is non-streaming: a job with a poll URL or webhook.

Make now retries an AI Agent run once on a fallback connection. Keep the Sume Idempotency-Key out of the model's hands so a retried run cannot bill twice.

Ming-Image-0.1-Design-Layer decomposes a flat design into RGBA PNG layers. Sume's Image API returns finished images, so build layers from transparent elements.

Ming-Image-0.1-Design is an open 6B design model. Sume's image catalog does not list it, so send a listed model id such as openai/gpt-image-2.5 for posters.

Gemini's image docs list 21:9 among ten ratios. Sume's Nano Banana Pro and Nano Banana 2 catalogs include 21:9 too; GPT Image 2.5's list does not.

CVE-2026-94486 let a malicious page read source snippets from next dev. Keep the Sume API key in an env var, server-side, and log request ids not headers.

Seven Next.js advisories shipped September 30 in 16.3.8 and 15.5.27. None names Route Handlers, so upgrade, then re-run a signed Sume test delivery.

OpenAI lists MP3, Opus, AAC, FLAC, WAV and PCM for speech output. Sume TTS 1.0 has three containers: mp3, wav and raw, with set sample rates and encodings.

Polly's StartSpeechSynthesisTask writes audio to your S3 bucket and can notify an SNS topic. Sume TTS returns a status URL, or a signed webhook on completion.

Polly returns speech marks instead of audio when you ask for them: sentence, word and viseme metadata. Sume TTS returns words[] timings on the same job result.

Polly SynthesizeSpeech accepts 3,000 billed characters and cuts audio at 10 minutes. Sume TTS 1.0 accepts 20,000 characters and 1,200 seconds of audio per job.

The Postgres minor release changed legacy pgcrypto ciphers. Its listed changes never mention hmac(), so a Sume sume-v1 signature check in SQL still works.

Sume's video filter allowlists drawgrid. Set width and height to iw/3 and ih/3 for a thirds grid. The grid is burned in, so it is a proof file.

Sume's video filter allowlists tblend. In difference mode each frame is blended with the previous one so static areas go dark and movement lights up.

Sume's video filter allowlists split, gblur and blend, enough for a dreamy glow: blur a copy, then screen it over the original at partial opacity.

Sume video filter allowlists smartblur, which blurs but keeps outlines. No face detection, so it softens the whole frame; tune radius, strength threshold.

Sora's reusable Characters left with the Videos API. Sume has no saved character; send the same reference images with each request to wan-3.0 or minimax-h3.

Sora's guide polled every 10 to 20 seconds for queued, in_progress, completed, failed. Sume's jobs read pending, in_progress, completed, failed, cancelled.

Sora's remix, then its edits endpoint, went away with the Videos API on 2026-09-24. On Sume, send video_url and an edit prompt to gemini-omni-flash-1.1.

Sora's Videos API let you extend a clip up to 6 times, 120 seconds in all, and shut down 2026-09-24. On Sume, chain 30-second clips and join them in Timeline.

Video trim, audio detach and video inspect accept a source up to 1,800 seconds. Video filter, Timeline compose and video frames stop at 300 seconds.

A fetch wrapper passed to createSumeClient must not add Authorization. Sending it with x-api-key returns 401, because Sume accepts only one credential.

Generated Sume SDK operations return { data, error, response } and never throw. In Trigger.dev or Inngest, throw yourself or a failed run looks successful.

Temporal's Conflict and Reuse policies dedupe Activity IDs inside Temporal. They never reach Sume, so a paid submit still needs its own Idempotency-Key.

Standalone Activities default to at-least-once retries. Maximum Attempts 1 gives at-most-once, but a Sume Idempotency-Key lets you keep retries safely.

Trigger.dev cancel stops the task and its child runs. A Sume job that already started generating cannot be cancelled, and still bills. Store the job id.

Hand the browser a Trigger.dev read-only public token for one run while the task holds the Sume key. The Sume key never leaves the server.

Trigger.dev retries any uncaught throw. Use catchError to skip Sume errors that cannot succeed, and read the retry-after header on a 429.

A Trigger.dev replay starts a new run with the same payload. Derive the Sume Idempotency-Key from that payload, not a random id, or a replay bills twice.

Sume's video filter allowlists edgedetect and negate. Edges come out as white wires on black; negating gives dark lines on white. Modes: wires, colormix, canny.

Vercel's CDN no longer caches Vary: Cookie responses. For a route proxying Sume job status, send Cache-Control private and honor next_poll_after_seconds.

Vidu says movement_amplitude has no effect on its q2 and q3 models. Sume has no motion-strength field at all; you steer motion in the prompt.

Vidu Q3 accepts 1 to 16 seconds. On Sume the shortest clip is 2 seconds on wan-3.0, 3 on Gemini Omni Flash, 4 on Seedance, Kling and Grok, 5 on MiniMax.

Vimeo's September 2026 Page theme hides black bars on non-16:9 videos. To remove them from the MP4 itself, render the frame with Timeline fit and output size.
VS Code wants an extension icon of at least 128x128, with 256x256 for retina displays. Generate 1024x1024 with GPT Image 2.5 on Sume and downscale to 256.

Next Gen Zaps loop past 500 items. A loop of paid Sume submits hits per-minute write budgets and accepted-job capacity first, so size the wave from your plan.

Put the paid Sume submit after Zapier's new human-reply pause, and key it from the approved record so a double click or a resume cannot submit twice.

Sume's video filter has one input, but split, crop, scale and overlay are allowlisted, so a zoomed copy of one region can sit in a corner of the same frame.

Amazon's createMedia answers 201, 200 or 409 on retry. Pair it with one Sume Idempotency-Key per asset so a retried submit never bills twice.

Amazon A+ video media moves through PENDING_PROCESSING, PENDING_REVIEW and AVAILABLE. Two clocks run: finish the Sume job first, then poll Amazon.

Amazon says A+ getMedia's mediaUrl is non-permanent. Re-fetch it, and keep your own copy of finished Sume clips by downloading from the content URL.

A+ updateMedia upserts video descriptions by locale, one of title or descriptions per call. Sume's caption language is only a speech-to-text hint.

Anam states a 99.9% uptime SLA for Cara-4. Sume documents what a failed avatar job exposes, category and retryability, and refunds the reservation.

AssemblyAI's disfluencies: true raised filler-word recall from 49.7% to 76.3%, English only. Sume STT has no such flag, so check words[] on your clip.

AssemblyAI's format_text: false returns spoken form, 'one hundred' not 100. Sume STT has no formatting toggle; its request is a closed schema.

AssemblyAI will route unpinned async requests to Universal-3.5 Pro; pin speech_models to stay put. What changes, and why Sume STT has no model to pin.

AssemblyAI fixed a bug that sent Urdu to Universal-3.5 Pro, which covers 18 languages. How a language hint behaves on Sume STT, and what to check.

Tune burned-in caption animation with design.motion: enter_seconds, exit_seconds, emphasis_in_seconds and emphasis_out_seconds, set per caption request.

Sume video captions let design.phrasing set max_words (1-12), max_chars (4-60) and pause_seconds (0.05-3) per phrase. Not supported on punch or tiktok-green.

Move burned-in captions up or down with design.placement.anchor_ratio, and set a separate landscape_anchor_ratio. A fraction of frame height, per request.

Sume's editorial-emphasis caption style is a left-aligned two-line card where the phrase-final word drops to a second line at about twice the size.

Set burned-in caption size, weight and outline per request with the six `design.typography` fields on POST /v1/video-captions. What each does and what fails.

Cartesia's 2026-08-14 API version drops already-deprecated fields; pinned integrations keep running. Pinning on the vendor side, and Sume's explicit model enum.

Cartesia Sonic 3.6 adds a normalization field set to auto, off or a locale code. Sume TTS has no such field, so write dates and numbers out in the transcript.

Claude Code 2.1.286 stopped MCP errors from printing a credential after Bearer. Update, then sweep old logs and rotate any Sume key that appeared there.

Codex 0.156.0 refreshes MCP credentials after an OAuth discovery 503. To see if it came from Sume, curl its two well-known metadata URLs.

Deepgram Flux TTS rejects some control combinations and caps speed at 1.15 with a pause. The error codes, the rules, and Sume's 0.6 to 1.5 speed range.

Deepgram Flux TTS now takes inline IPA overrides in Early Access. Sume TTS takes a pronunciation_dict_id instead. How the two approaches differ in practice.

Flux TTS allows up to 8 pause markers of 500 to 3000 ms per request, batch only. Plan a script around that limit and see what Sume gives you for pacing.

Deepgram Self-Hosted release 261001 removes Whisper support and asks you to move to Nova-3 first. What it means for Sume STT, which has no model to migrate.

Sume audio detach returns WAV (pcm_s16le, sample-exact) by default or MP3 at 128 kbps. Pick WAV for speech-to-text and timeline use, MP3 when file size matters.

Audio detach fails detach_start_past_source when range.start is past the probed duration. It differs from audio_detach_range_empty. Check duration first.

ElevenLabs CLI v1.0.0 turns every API operation into a subcommand. For Sume audio, script curl against /v1/jobs and join clips for $0.01 flat per job.

ElevenLabs Flows generations report pending, generating, completed and failed. Sume jobs use async, a 30-second wait cap and terminal-only webhook events.

ElevenLabs Music v2.5 plan chunks reach 6,132 characters, up to 30 lines of 200. Sume Music takes one 5000-character prompt and rejects duration fields.

fal retries failed queue requests on new runners, up to 10 attempts. Sume's docs put retries with the caller, guarded by an Idempotency-Key.

fal exposes error_type in the body and X-Fal-Error-Type as a header. Sume puts category, stage and code in the error body; the request id is also a header.

In FastMCP, pass your Sume API key as a plain string to auth, with no Bearer prefix. The client adds the header; send only one credential.

FLUX 3 Image at resolution 4k can take several minutes, so poll. Sume blocks up to 30 seconds, then returns 202 with a job envelope to poll.

FLUX 3 Image defaults aspect_ratio to auto: the first reference sets the shape, or 1:1 with none. On Sume, omitting the field is not the same as auto.

FLUX 3 Image grounding defaults to true and can search the web and images before generating. Sume lists no such field; pass references to set the target.

FLUX 3 Image has one endpoint and no mode field: add images to edit, restyle or combine. On Sume you send input_references to an edit-capable model.

FLUX 3 Image polls through Pending, Reasoning, Generating and Ready, and stops on four terminal states. Map them to Sume's queued to completed statuses.

FLUX 3 Image's result.sample is a signed URL that expires after 1 hour. Download it at once; Sume returns Sume-hosted signed URLs in data[].url instead.

FLUX 3 Image returns 422 for an unknown field, a blank prompt or a small reference. Sume returns 400 unsupported_parameter. Map the status codes in your client.

Moving to gemini-3.8-live: thinking_level unsupported, async function calling by default, proactive audio always on. Where Sume's audio jobs fit instead.

image_enabled=true on GeneratePMaxDraftCampaign returns IMAGE_ENABLED_GENERATE_PMAX_NOT_SUPPORTED in Ads API v25.2. Leave it false and add your own images.

When goose retries an MCP HTTP call to Sume, the same idempotency_key keeps a paid generate call a dedup, not a second job. Check status before resubmitting.

HeyGen's scenes endpoint returns a typed composition. Sume's video inspect returns probe facts and stills for one hosted clip, not typed scenes.
HeyGen's liveavatar-gpt-live-demos repo is a real-time avatar starter. Sume renders avatar video as jobs: submit async, poll or webhook, then fetch the MP4.

HeyGen now creates templates over the API and binds variables by element_id. Sume has no stored template object; send ordered video_inputs on each request.

HeyGen returns 409 stale_edit_version when a template edit is out of date. Sume's 409 is idempotency_conflict: one key reused on a different payload.

Ideogram 4.5 returns 402 or 429 with reject_reason inflight_limit and a fast or slow queue. Sume queues jobs first, then returns 429 queue_full.

Ideogram 4.5 quality defaults to medium with source images and high without, and very_low needs sources. Sume's quality enum is catalog-gated.

Ideogram 4.5 size takes auto, source or WIDTHxHEIGHT; source needs source images. Sume's size is a tier shorthand; use aspect_ratio auto to match a reference.

Ideogram 4.5 takes up to 5 source images, 25 MB each; the first is edited and multipart is required. Sume takes public HTTPS URLs as input_references.

Meta raised the Creator Marketplace Discovery API cap to 5,000 calls per user per hour from 1,000. Sume's creator search has its own per-key budget.
fal lists MP3, OGG, WAV, M4A and AAC audio for Kling Avatar v2. Sume Fabric takes an audio_url plus a still; here is how the two inputs compare.

Krea 2 exposes creativity as a tunable request parameter. Sume has no creativity field and rejects it with a 400.

Krea's retired Kling endpoints send Deprecation and Sunset headers, then 410 Gone. Here is how to detect that in code and which Sume aliases still work.

After LangChain 1.4.3 repairs an invalid tool call, Sume may still return an isError result, such as tool_not_found with a hint. Keep the same idempotency_key.

The LTX-2 Community License lists models trained on Outputs as Derivatives that must ship under the same license. What the text says and what it leaves open.

Luma uni-1 takes up to 9 image_ref images, or 8 for image_edit because the source uses a slot. Sume ceilings come from each model's catalog entry.

Luma uni-1 output_format is png or jpeg, and the model picks one from the prompt if you omit it. Sume lists formats per model; set it explicitly.

Luma uni-1 accepts web_search: true to look up visual references before it generates. Sume has no such field and returns 400 unsupported_parameter.

Luma Variants lets you regenerate any preview that is not right. On Sume a repeated Idempotency-Key replays the old job, so a redo needs a fresh key.

MAI-Transcribe-2 gives every word a start and end time. Sume STT always returns words[] as { word, start, end } in seconds, with no flag to turn it on.

Mastra MCP 2.1.1 accepts tool inputs in JSON Schema 2019-09. Sume builds its tool inputs as plain object schemas, and tools_schema returns each contract.

Sume answers an MCP OPTIONS preflight with 204 and lists authorization, content-type, idempotency-key, mcp-session-id and x-api-key for listed origins.

MCP error -32000 is implementation-defined. Sume returns it only when its MCP work budget is full; a client's own connection closed text is a different thing.

In MCP Inspector's custom headers, send either x-api-key or Authorization: Bearer with your Sume key, never both. Sume rejects a request carrying both.

Inspector 2.8.0 can suppress the standalone GET notification stream. Sume's MCP endpoint answers GET /mcp with 405 and Allow: POST, so turn it off.

The MCP 2026-07-28 revision removes ping. Sume's hosted server still answers a ping request with an empty result on the versions it speaks.

Python SDK 2.2.0 hands back any 403 that is not insufficient_scope. Sume's forbidden_origin is an HTTP 403; insufficient_scope is a tool result.

Python SDK 2.2.0 stops the OAuth flow when protected resource metadata returns 5xx or 429. Curl Sume's two metadata URLs to confirm they return 200.

MCP Python SDK 2.2.0 follows redirects only within the endpoint's origin. Sume answers POST on https://mcp.sume.com/mcp and on the host root directly.

Python SDK 2.2.0 adds validate_token_resource for servers. A Sume OAuth token's resource audience is https://mcp.sume.com/mcp; confirm it in the metadata.

MCP 2026-07-28 adds an optional extensions field to client and server capabilities. Sume's initialize reply advertises only tools, with listChanged false.

MCP 2026-07-28 lets inputSchema use any JSON Schema 2020-12 keyword. Sume builds tool inputs as closed objects; fetch one with tools_schema.

Sume's tools/list returns one array in registry order with no cursor. Key your tool-list cache on credential and scope, and refetch when either changes.

MCP 2026-07-28 says list endpoints no longer vary per connection. Sume's tools/list still varies by credential: OAuth read, OAuth write or an API key.

The H3 Fun ControlNet 2.0 card snaps frames down to the largest 17n+5 at fixed 24 fps. Sume takes whole-second durations instead. Worked frame math.

Loading the v1 5-block config on the 2.0 checkpoint drops control_blocks.5~9 without an error. Use the post_norm config. Sume rejects bad fields with a 400.

The MiniMax H3 license only encourages a 'Powered by' notice, but IV.2 requires 'MiniMax H3' on the UI of commercial products. Plus a Sume overlay plate.

Section V.3 of the MiniMax H3 license bars using the Works or their Outputs to improve any other AI model. What the clause and Model Derivatives say.

Muse Voice Transcribe wants mono 16-bit PCM at 24 or 16 kHz. On Sume, audio-detach with 16000 Hz and mono makes the STT input wav from a hosted video.

Muse Voice Transcribe streams audio over one WebSocket and returns cumulative partials. Sume STT is a job: wait up to 30 seconds, then poll status_url.

Agents SDK 0.22.1 fails closed on empty tool arguments. Sume's no-argument tools take {}, while paid tools need idempotency_key and cannot run empty.

A hosted MCP tool name that differs only in - or _ gets a tool_not_found result with a Did you mean hint; a scope-hidden tool returns insufficient_scope.

OpenAI plans to shut down reusable prompt objects and v1/prompts on Nov 30, 2026. For media work, a Sume Format is a saved recipe you call by name.

OpenRouter's Security Center flags idle keys and missing limits. For Sume, rotate by replace, verify, revoke, and use per-call max_spend_usd and key budgets.

Pika hands agents copy-paste setup text. Sume documents /v1/videos field-for-field with OpenRouter, bare model ids and a models endpoint to read first.

The Qwen Research License requires Built with Qwen or Improved using Qwen when outputs train a distributed model, and bars Qwen as a derivative's main name.

QwenImage21Pipeline runs Qwen-Image-2.1 locally on a GPU. Sume has no 2.1 id: a hosted call is one POST /v1/images with a listed model. Side-by-side.

Sharing Qwen-Image-2.1 weights or a LoRA needs the license copy, modified-file notices and a Notice file; disputes go to the Hangzhou courts. Clause summary.

Genjutsu takes 4 to 30 second sources. For a longer clip on Sume, cut ranges with video trim, restyle each range, then join them with Timeline.

Runway's ASSET.INVALID covers any unacceptable input media. Sume separates validation errors from fetch failures, and one 502 is still your input to fix.

Runway says not to show SAFETY failure codes to users. On Sume, show your own text keyed on code; keep message, request_id and details in logs.

Runway's INTERNAL.BAD_OUTPUT.01 may succeed after prompt fixes. Sume's equivalent step: inspect job events, fix the input, and send a new request.

Runway says to add a delay for INTERNAL or null failure codes but gives no number. Sume's errors carry retryable and retry_after_seconds fields.

Runway's guide says strong references drive quality. On Sume, add the checks the docs list: public HTTPS URLs, per-model reference types, 3-second video refs.

A Runway Recipe returns a task you poll at GET /v1/tasks/{id}. A Sume generation returns a job: read status, fetch the result, never treat queued as failed.

Runway does not refund credits for SAFETY.INPUT failures. Sume's docs describe one rule for failed jobs: the reservation is released or refunded.

Runway says not to retry THIRD_PARTY.UNAVAILABLE immediately. On Sume, generation_unavailable means retry later; provider_capacity_exceeded keeps the key.
Synthesia's Interactive Avatar API runs on a LiveKit plugin with your own LLM and STT. Sume offers job pieces: TTS, speech to text and still-plus-audio clips.

Tavus added disclosure_type, verbal_disclosure and visual_disclosure for EU AI Act use. Sume has no such setting; authored caption cues can burn a line of text.

Tavus can write recordings to S3, GCS or Azure Blob. Sume returns finished files as media.sume.com artifact URLs, delivered by webhook or job result.

Sume Timeline audio concat needs a parts array and refuses a top-level url or ranges. Each operation accepts its own keys; mixing them returns a stable code.

Sume Timeline audio split needs a top-level url and 1 to 20 ranges. A range with end at or before start is refused; each segment gets its own audio_url.

Sume Timeline compose length comes from the video layer, capped at 300 seconds. Asking for more than the file clamps with a warning and the job still succeeds.

Sume Timeline compose probes both URLs: image.url must be a still, video.url a video. Failing either refuses the request; off-host URLs need an import first.

In Sume Timeline compose a horizontal split takes top or bottom and a vertical split takes left or right; a mismatch is a 400, compose_image_region_wrong_axis.

A silent video in Sume Timeline compose is a compose_video_has_no_audio warning, not a failure. Audio passes through when present; Timeline supplies it later.

Sume Timeline compose defaults to the video layer's own frame rate. Set output.fps to a different rate and it warns output_fps_resamples_sources.

Sume Timeline compose overlay places a still with position top, center or bottom, width_ratio 0.05 to 1 (default 0.9) and margin_ratio 0 to 0.45 (default 0.05).

A stream-copy trim cannot resize: output width, height and fps fail video_trim_output_requires_exact. Pick a goal below and the call that fits it.

Video trim refuses a range with end at or before start, or longer than 900 seconds, as video_trim_range_empty. Cut a long source in 15-minute ranges.

A video-filter crop needs width and height of at least 0.05 and a rectangle inside the frame; anything else returns video_filter_crop_out_of_bounds.

A dim amount of 0 is refused: the range is above 0 up to 1, and 0 or above 1 returns video_filter_amount_out_of_range. Check the program free before you encode.

A Sume video-filter filtergraph is capped at 2048 characters and 32 named filters. Past either, or with an unknown filter, you get invalid_filtergraph.

Sume video-filter refuses stream specifiers like [0:v] in a filtergraph because the server wraps the input and output. Internal labels such as [a] are allowed.

Sume video-filter accepts at most 8 ops. A ninth returns video_filter_too_many_ops; move extra pixel work into the filtergraph, which has its own caps.

In Sume video-filter, ops[].op must be dim or crop. Another name returns unsupported_filter_op; an extra key on a valid op returns unsupported_filter_op_field.

Video frames fails duration_out_of_range for a source over 300 seconds. Cut a range under 300 seconds with video trim first, then extract frames from it.

If one instant fails to extract, video frames returns that entry with url null and the job still finishes ready. Filter the null entries and ask again for them.

Sume video frames turns fps into mid-bin timestamps (0.5/fps, 1.5/fps, and so on), caps the result at 24 frames, and accepts fps above 0 up to 2.

Video frames returns jpeg by default or png for lossless inspection, at the source size unless you set max_edge. Pick png when the stills feed an upscaler.

X redefined video_total_views as 100% in-view for 3 seconds plus manual plays. What that means for your first 3 seconds, and how to check and re-cut them.

The X Articles API has POST /2/articles/draft and a publish call, with optional cover media. Make the cover with a Sume image call, then upload it to X.

X allows JPG, PNG, GIF and WEBP images up to 5 MB on every account. Sume outputs png, jpeg or webp, with no target file size field in the docs.

Pick media_category by destination: tweet_video for Posts, amplify_video for Ads, dm_video for DMs. Wrong category uploads fine and fails at Post create.

X enforces media limits at upload and again at POST /2/tweets, by the posting user. Here is a pre-flight list and what Sume's inspect and trim cover.

X lists `subtitles` as a media_category for sidecar files. Sume burns captions into the picture and does not take SRT uploads. Pick the path that fits.

X needs Post video of at least 0.5 seconds; Sume video-trim allows cuts down to 0.2 seconds. Set duration to 0.5 or more for X, with the upper caps.

X recommends H264 High Profile at 30 or 60 FPS and 5,000 kbps. Sume trim cannot set bitrate or codec; you can conform fps and size, and audio stays AAC.

X rejects open-GOP video. Sume trim exact re-encodes with libx264 and yuv420p; keyframe mode stream-copies and may start a GOP early. No GOP setting exists.
X's advanced video spec needs 1:1 pixels and sizes from 32x32 to 1280x1024. Sume's video filter allows setsar, scale and format; check the graph free first.

YouTube recommends 128 kbps mono, 384 kbps stereo, 512 kbps 5.1 at 48 kHz. Sume audio-detach writes wav or a fixed 128 kbps mp3, so use wav for stereo.

YouTube recommends BT.709 for SDR uploads and unifies similar color matrices. Sume trim has no color-space field, so verify the tags with ffprobe.

YouTube recommends a closed GOP of half the frame rate and 2 consecutive B-frames. Sume video-trim has no GOP or B-frame field and rejects raw ffmpeg flags.

YouTube recommends 35-45 Mbps for 4K SDR at 24-30 fps and 80-160 Mbps for 8K. Sume's video router lists 4K on one model and sets no bitrate field.

YuE2 lets you supply an ABC score and edit it with an agent. Sume's Music Router has no score input; you steer structure with timestamps in the prompt.

List Sume's paid tool ids under disabled_tools in the Codex config.toml so the agent cannot call them, even on an API-key session that sees every tool.

Gemini CLI's trust setting bypasses every tool confirmation dialog. What that means for Sume's paid tools, and which Sume gates still apply.

Pin the Codex OAuth callback port for a remote Sume MCP login, and how the login flows from Codex to the Sume consent page on mcp.sume.com.

Run Sume next to another MCP server in the OpenAI Agents Python SDK: connect Sume over streamable HTTP, check it with mcp_health, and read tools_list.

Gemini CLI's MCP timeout defaults to 600,000 ms. Sume's jobs_wait holds at most 55 seconds per call: repeat it on wait_slice_expired, never resubmit.

ToolLoopAgent stops after 20 steps by default. How many jobs_wait calls a Sume video render needs, and the per-call guards to keep if you lift the cap.

Closing the AI SDK MCP client in onEnd ends the tool connection, not the Sume jobs already submitted. Track job ids, then read or cancel them.

Claude Code refreshes an MCP server's tools on list_changed and lets you reconnect from /mcp. After changing Sume's Write consent, verify with tools_list.

Turn the Sume server off in Codex with enabled = false instead of deleting it, and rotate the API key if it ever showed up in logs or chat.

An assistant turn in messages[] returns 400 invalid_request on Sume Agent Completions. Only system and user turns work; each call runs in a fresh thread.

Not yet. Every Agent Completion runs in a fresh thread, so a follow-up call cannot reuse thread_id. Pass earlier results back in the next request instead.

The model field on POST /v1/agent/completions accepts only sume-agent. Omit it for the same agent; any other value returns 400 invalid_request.

In @sume-com/sdk, waitForRun needs family: format, action or agent because a run id does not say which surface it belongs to. Use agent for Agent Completions.

Sume accepts an OpenAI-shaped response_format as an alias for output_schema on schedule runs. Sending both returns 400, and the schema must be strict.

On Sume's hosted MCP, catalog_list lists public API capabilities and can name ones with no MCP tool. tools_list is the session's real tool contract.

Sume MCP tool ids use underscores; a dotted alias such as tools.list is canonicalized on call. Retired aliases map to generate_image and generate_video.

The Music Router catalog endpoints list routable music model ids and a provider list price. Routable ids today: sume/music-auto, lyria-3.5, lyria-3-pro.

job.model echoes the id you requested; job.request.routed_model names the engine that ran, such as lyria-3.5. Read both fields on the job envelope.

An unknown model on POST /v1/music-router/generate fails with 400 model_not_found and a catalog_url. Use an id from GET /v1/music-router/models or omit model.

AWS raised Lambda's async timeout to 90 minutes on Managed Instances. A Sume job still fits best as submit, then poll or webhook, and sync waits stay 30 s.

Cloudflare Workflows on Workers Paid now keeps finished instance state 7 days by default. Save the Sume job id and result URL in your own store.

Cloudflare Workflows can stream instance events with subscribe(). Sume has no SSE stream for jobs: use a signed webhook, or poll status and the events snapshot.

Verify the Sume webhook signature in a Worker, then start a Workflow with ctx.exports and no workflows binding. Includes a short Worker handler.

Cloudflare lists 50,000 concurrent Workflow instances (Paid, April entry). Sume reports your own generation headroom; size fan-out by that formula.

GITHUB_RUN_ID stays the same on a re-run while GITHUB_RUN_ATTEMPT increments. Build the Sume Idempotency-Key from the run id so a re-run does not bill twice.

Cancelling a GitHub Actions run does not cancel a Sume job. Cancellation only works before generation starts, so store the job id and cancel it explicitly.

A Sume bulk queue holds up to 100 items, each with its own webhook. Compare that with Zapier's per-Zap webhook limit and know what Sume does on a 429.

Zapier says it may return 200 and delay webhook processing by minutes. Sume sees a delivered 200, so keep a status poll as the backup for run and job results.

Zapier lists the three most recent webhooks from the past hour. Use Sume's Send test to put a signed webhook.test sample there before a real run exists.

An Airtable automation script gets 50 fetches and a 30-second timeout. One Sume bulk-run request carries up to 100 items, so one fetch beats a per-record loop.

Airtable's When webhook received trigger cannot verify signatures and caps payloads at 100kb. Verify the Sume signature in a relay and forward a small object.

Pipedream limits HTTP trigger bodies to 512KB by default. Sume run webhooks can carry up to 1 MiB, so plan for a slim relay or the result_url fetch.

Pipedream HTTP workflows time out at 30 seconds by default. Sume sync waits up to 30 seconds too, so submit async and take the result by webhook or poll.

Retool Workflows authenticate webhooks with an X-Workflow-Api-Key header or query parameter. Sume documents no custom delivery headers: relay after verifying.

A Cloud Workflows callback URL needs the workflows.callbacks.send permission and a Bearer token. Sume webhooks cannot carry one, so relay after verifying.

n8n keeps waits under 65 seconds in memory and saves longer ones to the database. Poll a Sume job with next_poll_after_seconds, or switch to a webhook resume.

Vercel proxied rewrites to an external destination time out at 120 seconds with ROUTER_EXTERNAL_TARGET_ERROR. A Sume async submit returns at once.

Cloudflare D1 queries on Workers Free now fail past the daily row limits. Dedupe Sume webhooks on request_id, return a 5xx, and use redeliver after the reset.

Zapier, Airtable and Pipedream each publish a webhook intake limit. Compare them with a Sume bulk queue of up to 100 items and pick a receiver that fits.

Sume has no one-call filler remover. Transcribe with video inspect for word timings, then cut the clean ranges with video trim at $0.02 per job.

Avatar videos default to plus when quality is omitted. Sume's Beta face swap has no default: quality is required and takes standard, plus or max.

POST /v1/video-analyses answers 410 video_analysis_retired in Sume's dest environment. Stored rows stay readable; new clip inspection uses video inspect.

Sume's video analyses reject YouTube URLs with 422 unsupported_source. Import the video you own to media.sume.com first; rules for the other bad inputs.

Each scene in a stored video analysis has start and end seconds, summary, visual, shot type, on-screen text, confidence and keyframes. Field-by-field list.

Sume's video analysis takes max_scenes from 2 to 40 (default 24), warns past about 90 seconds and rejects past 300. Cost, runtime and polling advice.
Sume accepts as many paid jobs as concurrency plus queue allows: 6 on Free, 24 on Pro, 48 on Startup, 120 on Scale. Past that a submit returns 429 queue_full.

Premiere 26.5 added Paper Edit. To do the same by API, transcribe with sentence segments, pick the lines you keep, then render those ranges as a Timeline.

DaVinci Resolve 21 lists IntelliSearch. To find a spoken phrase in a clip by API, transcribe with video inspect and search words[] in your own code.

Descript's API lists Remove Filler Words as an Underlord edit. the Sume docs list no such op; here is how to cut um and uh yourself from words[] and a Timeline.

Descript's Center Active Speaker (Beta) follows whoever talks. Sume's video filter crop is one fixed rectangle per clip, so cut per speaker and crop each part.

Descript's API lists no rendered file download without publishing. In Sume, a finished timeline_render job result carries video_url; here is the poll flow.

Descript and Runway both ship MCP servers. The hosted Sume MCP exposes video_trim, video_filter, audio_detach, video_frames_create and the timeline tools.

Timeline 1.0 takes up to 20 gapless audio.parts slices with source_in and duration. Skip the timeline-audio job when the join is only for one render.

A Timeline 1.0 slot longer than its source renders with a soft warning, not a failure, and /plan cannot predict it. Read warnings[] and probe clips first.

The numbers that cap one Timeline 1.0 render: 1 to 200 video slots, 1 to 1800 s of audio, 20 audio parts, 12-slot single strategy and 8 chained fades.

Audio detach takes sources up to 1800 s but outputs at most 900 s. For a longer track pass range and detach in two calls. Errors included.

In Sume video-filter, ops[] (dim, crop; max 8) run before the filtergraph, which has its own 2048-character and 32-filter caps. Order matters for a crop.

DaVinci Resolve 21 lists H.265, MV-HEVC and AV1. Sume's exact trim re-encodes to libx264 yuv420p; keyframe trim copies the stream. Input support is not listed.

Adobe lists Match Source audio channels and sample rate in Premiere 26.5. Sume audio-detach keeps both by default: channels source, sample_rate omitted, wav.

Descript lists per-file size caps by plan (1, 10, 20, 50 GB). Sume's media routes cap by clip duration instead: 300 s or 1800 s in, up to 900 s out.

Descript Quick Design splits a script into moments with changing visuals. With Sume you map each scene to a Timeline video slot over a voiceover spine yourself.

video-trim takes an optional output {width, height, fps} that conforms on the way out, exact precision only. Width and height 256-2160, fps 24, 25, 30 or 60.

1080x1350 breaks GPT Image 2.5's multiple-of-16 size rule. 1080 is not a multiple of 16. 1088x1360 (exact 4:5) meets the listed rules. Per OpenAI and Sume docs.

OpenAI's API says the mask must contain an alpha channel. Sume's docs list a public HTTPS mask_url for GPT Image 2.5 edits but state no mask format rule.

OpenAI lists a moderation parameter (auto or low) for GPT Image 2.5. Sume's request table does not list it, so check the catalog before sending it.

OpenAI's model page lists Batch as unsupported for GPT Image 2.5. On Sume, submit many async or webhook jobs to /v1/images and collect the results.

Black Forest Labs says generated FLUX image URLs expire after 10 minutes. Sume returns Sume-hosted signed URLs; here is how to fetch and keep the file.

Image 1.0 takes mask_image_url with image_urls; POST /v1/images takes mask_url with input_references for GPT Image 2.5. Field names, models and limits.

Sume's Image 1.0 still accepts input_urls, n and format, but prefers image_urls, num_images and output_format. What each maps to and their limits.

Image 1.0 takes num_images 1 to 4. POST /v1/images takes n up to 10, with lower per-model ceilings. Which to use and how to read the real limit.

Image 1.0 accepts png, jpeg, jpg and webp. POST /v1/images lists png, jpeg, webp and svg, not jpg, so use jpeg there.

POST /v1/images defaults to sync and blocks up to 30 seconds; Image 1.0 lists async, sync, subscribe and webhook. Compare defaults and wait_timeout_seconds.

POST /v1/images returns usage.prompt_tokens, completion_tokens and total_tokens as 0 in v1. The billed amount is usage.cost in USD, metered per image.
On POST /v1/images, size is a resolution-tier shorthand and explicit pixels on size return 400. Custom pixels go in image_size or aspect_ratio.

The metadata field on Image 1.0 and POST /v1/images is stored on the job and not sent to the provider. Use it to tie jobs to your own records.

Sume's legacy /v1/image-router/generate and /v1/image-router/models routes still work but gain no new parameters. Use POST /v1/images and GET /v1/images/models.

Image 1.0 uses prompt only for text-to-image, prompt plus image_urls for edits or references, and adds mask_image_url for masked edits. Fields and URL rules.

A 429 with no retry-after can be a monthly spend cap, not a rate limit. What Anthropic's page says, and how Sume separates 402, 429 rate_limited and queue_full.

Anthropic says its limits replenish continuously; Sume's docs call ratelimit-reset the seconds until the window resets. How to pace a client for each.

Anthropic warns a sharp usage increase can trigger 429 acceleration limits. For Sume jobs, size each wave from generation_limits and the in-flight budget.

Google says Gemini rate limits apply per project, not per API key, so a second key adds nothing. What Sume's docs say about plan limits and how to read them.

Anthropic's Managed Agents limit creates and reads separately. Sume splits its per-minute budget the same way by plan, so polling cannot starve submits.

OpenAI recommends exponential backoff with random jitter on 429. A Python status poller that honors Sume's retry-after first and falls back to backoff.

Article 50 applies from 2 August 2026. Keep a per-file record of job id, request id and artifact URL from Sume, and know what the docs leave unsaid on marking.

C2PA 2.2 defines Content Credentials and a separate Soft Binding API. Sume's docs do not say a downloaded output keeps one, so check the delivered file.

The Sume CLI registers an asset in three write-gated steps and reads it back with download-url or download. Flags, the confirm gate and what stays private.

Sume generation fields take public HTTPS URLs directly. Localhost, private, non-HTTPS, signed URLs and wrong content types are rejected. When an asset id helps.

Sume CLI --agent mode redacts or summarizes URL-like and account fields where supported. What to still strip before pasting output into a ticket or chat.

A local wait that times out does not cancel a paid Sume job. Inspect it with jobs status, events and result, then download, instead of submitting again.

Safe to log: request ids, job ids, status and sanitized media metadata. Unsafe: API keys, signed URLs, raw private media URLs and excess user content.

The hosted installer verifies checksums.txt and will not overwrite another sume on PATH. To pin, swap latest for a release tag such as v0.1.6.

Sume's video duration is an integer and each model lists whole-second supported_durations. Ranges per model and how to pick one before you submit a job.

When a Sume video request carries both frame_images and input_references, frame_images wins and the job runs as image-to-video. What that means for references.

Video Router still works, but new integrations should use /v1/videos. Same catalog and job ids; the wire and image fields change. What the docs say changes.

Video 1.0 is a retiring alias for Video Router Auto. Two URLs take the same body, the public id is sume/video-1.0, and receipts report sume/auto.

In Video 1.0, reference_audio_urls (1 to 3 URLs) requires at least one reference image or video. Field limits for images, videos and audio references.

Video 1.0 still accepts the retired routing_preset values cost, speed, quality, grok and kling, but all of them run through Auto. How to pick a family instead.

To set a last frame on Video 1.0, send end_image_url together with image_url. The docs list the modes: text, first frame, start and end frames, references.

Sume's Auto family always generates audio for Video 1.0 requests, so the docs tell you to omit generate_audio. What the field does and where audio is optional.

Video 1.0 still reads first_frame_url and last_frame_url, but the docs prefer image_url and end_image_url. The rename map and one rule about the end frame.

Video 1.0 accepts duration and its alias duration_seconds. If you send both they must agree; the value is checked against the Auto serving family.

bitrate_mode is retained in Video 1.0's legacy request shape but Auto rejects it. Omit it, and note that Gemini Omni Flash 1.1 has no bitrate_mode either.

The metadata object on a Video 1.0 request is stored on the job as caller metadata and is not sent to the provider. Use it to tag jobs; the limits it has.

OpenRouter lists four video job states; Sume's /v1/videos lists five including cancelled, while /v1/jobs spells it canceled. Both status sets side by side.

OpenRouter sends video.generation.* events; Sume sends job.completed, job.failed or job.canceled with a signed body. What to change in a receiver.

On Sume every video model reports supported_sizes null, so a size parameter returns 400 unsupported_parameter. Send resolution and aspect_ratio instead.

OpenRouter lists seed for deterministic video generation. On Sume no v1 video model accepts seed: each reports seed false and the field is rejected.

OpenRouter lists provider passthrough configuration. Sume v1 runs one backend per model, so a non-empty provider.options returns 400 unsupported_parameter.

Leave resolution and duration off a sume/auto video request and Sume uses 720p and 8 seconds. The Auto envelope is 3 to 10 seconds at 16:9 or 9:16.

Video 1.0 accepts 720p (default) and 1080p from its legacy vocabulary and rejects 4k. For 4K send a sume/auto request to POST /v1/videos instead.

OpenRouter names video models org/slug, such as google/veo-3.1. Sume uses bare catalog ids like seedance-2 and never a provider prefix. How to port an id.

Activepieces Cloud caps a flow run at 10 active minutes. Submit the Sume job async, pause the flow, and resume on the result instead of polling in a loop.

A retried Activepieces subflow can re-run your Sume submit. Derive the Idempotency-Key from a stable input, not the attempt, so a retry returns the same job.

An Activepieces /sync webhook returns 408 when no response arrives in 30 seconds. Call Sume in async mode, which answers 202 with a job id at once.

Anthropic's docs list Authorization: Bearer first and call x-api-key a legacy fallback. Sume accepts either, but rejects a request that sends both with a 401.

The Commission's FAQ exempts assistive standard editing from AI marking. Sume's trim, filter, audio detach and timeline docs call themselves ffmpeg-only.

AssemblyAI added speaker_confidence (0 to 1) per word and utterance. Sume STT returns word start and end times only, with no speaker or confidence data.

Bluesky raised its video upload limit from 100 MB to 300 MB in June 2026, MP4 only. Fit a clip under it by trimming length and conforming size with Sume.

Claude Code --bare connects only MCP servers named on the command line. To use Sume there, name the server with an API-key header; no browser sign-in needed.

Claude Code 2.1.283 counts MCP server instructions as their own /context row. Sume returns instructions at initialize and keeps long guidance out of tool text.

Claude Code 2.1.284 waits up to 10 s for a connecting MCP server on resumed calls and 2 s on a non-interactive first turn. Sume tool calls hold at most 55 s.

If an MCP error or log exposed a Sume Bearer value, rotate the API key. An OAuth token is not an API key. Report issues with the request id, not the key.

Claude Code 2.1.285 reserves the MCP server name widgets in cloud sessions and on self-hosted runners. Sume's documented name is sume, so nothing to rename.

Claude Code 2.1.283 added MCP checks to claude plugin validate, including insecure URLs. Sume's hosted endpoint is https, so a plain entry has nothing to flag.

Codex lets you cap one MCP tool's output with output_token_limit. Sume tools return ids and media.sume.com URLs, not file bytes, so the cap can stay small.

OpenAI's computer use approves each new website origin, not spend. When such an agent calls Sume, the spend check is dry_run, max_spend_usd and the wallet.

Cloudflare publishes crawl.finished to Queues. Sume's crawl has no such event: wait on the job id, then read it with crawl_get. Steps and idempotency.

ElevenLabs STT accepts an edit instruction and returns edited_transcript. Sume's STT has no such field: it returns text and word timings to edit yourself.

Firecrawl scrape caches for 2 days by default (maxAge 172800000 ms). Sume's scrape has a boolean fresh, default false; fresh: true bypasses cached content.

Firecrawl's includePaths are regex on the URL pathname. Sume's include_paths are literal prefixes starting with /, max 10 items. How to rewrite one.

Firecrawl's crawl defaults to 10,000 pages. Sume's crawl takes limit up to 20 (default 10), so narrow with path prefixes and run several keyed crawls.

Firecrawl returns executeJavascript results in actions.javascriptReturns. Sume names it javascript_returns and bounds it; scripts max 4,000 characters.

Firecrawl's /map defaults to 5000 links and allows 100000. Sume's crawl_map takes limit 1 to 100, so pick URLs, then scrape them with crawl_scrape.

Firecrawl's /map has a sitemap option (skip, include, only) and includeSubdomains. Sume's crawl_map takes only url and limit, and maps one origin.

A synchronous crawl_scrape call has three deadlines: client abort at 35 s, MCP at 40 s, host watchdog at 45 s. Narrow the page or use crawl_site.

Firecrawl added a Question format to /scrape. Sume has none; ask with json_prompt (up to 2,000 characters) or json_schema under formats: [json].

Sume's crawl_scrape accepts up to 8 actions of four types: wait, scroll, click, executeJavascript. Firecrawl's write, press and pdf have no match.

Firecrawl scrape lists summary, branding, question and more. Sume's scrape accepts seven formats: markdown, links, html, json, screenshot, rawHtml, images.

Firecrawl's scrape timeout defaults to 60000 ms and goes to 300000. Sume's crawl scrape takes timeout_ms up to 30000, so send 30000 or less.

Firecrawl's /search takes limit up to 100 plus sources and tbs. Sume's /v1/firecrawl/search takes a query and limit 1-10, so scrape the hits you need next.

Firecrawl allows 60 s of waitFor plus wait actions combined. Sume's crawl_scrape allows 10000 ms combined, and the total must stay below timeout_ms.

Gemini's API now has agentic video understanding. Sume's video inspect is narrower: probe facts, 8 stills and optional STT you pass to your own model.

Google calls it Interpolation (first + last frame). On Sume you send image_url plus end_image_url to gemini-omni-flash-1.1 through the Video Router.

Google says Gemini 3.8 TTS covers Mexican Spanish and Quebec French. Sume's language takes a BCP-47 tag of 2 to 16 characters; dialect output is not promised.

Higgsfield says Genjutsu takes up to 30 reference photos. Sume's Genjutsu Motion Transfer row requires 1 to 8 images, so pick your best eight.

Genjutsu takes a 4 to 30 second source video. On Sume the duration field must equal the inspected length, rounded up. Probe it with video inspect first.

From 1 October 2026 GitHub Actions runs, checks and statuses follow the log retention setting (default 90 days). Store Sume job ids outside the log.

Cloud Tasks now sets retry parameters per task (GA 30 Sep 2026). When a task calls a Sume submit, send the same Idempotency-Key on every attempt.

OpenAI lists gpt-4o-transcribe-diarize for removal on Feb 26, 2027. Sume STT returns words and sentences with timings, but no speaker field.

xAI takes up to 4 timestamped keyframes for Grok Imagine video. Sume's grok-imagine-video-1.5 row takes one start image and rejects an end frame.

xAI's image API takes n from 1 to 10 per request. Sume's catalog code gives Grok a maximum of 1, so send one image per call and loop for more.

xAI allows 1 to 15 seconds for grok-imagine-video-1.5. Sume's catalog row allows 4 to 15, so a 2-second clip needs another id such as wan-3.0.

Inngest caps one step return at 4 MiB and run state at 32 MiB. Return the media.sume.com artifact URL from step.run instead of the video bytes.

Meta caps hashtag search at 30 unique hashtags per account per rolling 7 days and needs app review. Sume's instagram_search_hashtag is a bounded public read.

Instagram oEmbed is meant only for embedding, at up to 1,000 requests per hour. Sume's instagram_media returns media candidates for a post or reel URL.

LangGraph 1.2.12 adds response_schema to interrupt(). Use a typed approve, edit or reject reply with max spend to drive a Sume dry_run, then submit.

LlamaIndex v0.14.25 stops retrying failed function tools. Decide inside your Sume tool which errors are safe to retry, and return a status string.

Mastra 1.72.0 fences background tasks with leases. If a new owner restarts a Sume tool call, the same idempotency key returns the original job.

MCP 2026-07-28 says re-issue a broken request with a new request ID. On a paid Sume tool, keep the same idempotency_key so the retry is not a second charge.

Sume's hosted MCP OAuth access tokens last one hour and the server advertises only the authorization_code grant, so re-login or use an API key for long runs.

MCP 2026-07-28 documents traceparent in _meta. Sume's docs don't describe reading it, so correlate with the job id and x-sume-request-id instead.

The MCP roadmap lists push delivery for finished work. On Sume today, MCP agents wait in bounded jobs_wait slices; HMAC webhooks are a REST job feature.

Responses multi_agent runs 3 subagents by default and they share your tools. Sume accepts extra jobs as queued until queue_full; give each create its own key.

Next.js patched an Image Optimization SSRF via allow-listed remote URLs. Allow only media.sume.com for Sume images, and never raw provider hosts.

imageGenerationTool() takes action: 'generate' | 'edit' | 'auto' in openai-agents-js 0.18.0. To edit with Sume instead, wrap its image route as a function tool.

OpenAI Batch allows 50,000 requests per file with a 24h window. A Sume Format bulk run takes 1-100 items at concurrency 1-16, so chunk your file accordingly.

OpenAI removes whisper-1 on Feb 26, 2027. Sume's STT request names no provider model, takes a public audio URL, and caps reserved duration at 10 minutes.

OpenCode's remote MCP timeout is in milliseconds, default 5000, and covers fetching tools. Sume's jobs_wait holds up to 55 seconds per call, a separate limit.

Krea's H3 Max Turbo has prompt expansion modes. Sume's video model_params allowlist is empty in v1, so Wan 3.0 and H3 Max have no such switch.

response.steer does not cancel started tools. A Sume video job past its start runs to completion; jobs_cancel returns 409 job_generation_already_started.

BytePlus keeps Seedream image URLs for 24 hours, then clears them. On Sume, read data[].url or the job result URL and store that, not a provider link.

Gemini 3.5 Transcribe biases up to 1,000 custom terms. Sume STT has no vocabulary field, only a language_code hint, so fix names after transcription.

Stripe allows keys up to 255 characters. Sume generation keys are 1-255 printable ASCII and optional; crawl keys are required and capped at 200.

Telegram's sendLivePhoto video must be 10 seconds or less and 10 MB or smaller. Sume's video trim sets length and frame size; it has no byte-size target.

When Temporal cancels an activity, a Sume job may already be generating. Cancel returns 409 job_generation_already_started; let it finish and keep the artifact.

Temporal Cloud allows 2 MB per payload. Pass the Sume job_id and media.sume.com artifact URL through activities and signals, never video bytes.

Sume's TTS has no previous_text field. Keep a line seamless with one longer transcript, or join separate takes with a gapless Timeline audio concat.

The Research API takes start_date and end_date up to 30 days apart. Sume's tiktok_search_keyword takes one fixed date_posted value instead.

The Research API returns videos by decreasing ID unless is_random is true. Sume's order=play_count sorts a bounded 24-item sample, not a full ranking.

The Research API returns up to 100 videos per call (max_count). Sume's tiktok_search_keyword returns at most 24 items over 3 feed pages per call.

Video trim's output width and height are limited to 256-2160, so a 2560-wide 1440p clip cannot be conformed. Omit output and the source size is kept.

Vercel Functions cap request and response bodies at 4.5 MB. Do not proxy a generated video through one; hand the client the media.sume.com URL instead.

Vercel Pro and Enterprise allow 800s, with 1800s in beta. Sume still caps a blocking wait at 30s, so video jobs need a poll loop with its own deadline.

A Vercel Queues consumer that times out is redelivered, and maxDeliveries is unlimited by default. Reuse one Idempotency-Key per message so Sume bills once.

xAI's Grok Imagine video status values are pending, done, expired and failed. Sume uses pending, in_progress, completed, failed and cancelled. Port a poll loop.

OpenAI removed the Videos API on 2026-09-24. Map its seconds and size fields to Sume's duration, resolution and aspect_ratio; size returns 400 on Sume.
Sora's ?variant=thumbnail and spritesheet downloads went away with the API. On Sume, POST /v1/video-frames with at[] or fps returns durable still images.

Sora emitted video.completed and video.failed. Sume sends job.completed, job.failed and job.canceled with an x-sume-webhook-signature header. Map the handler.

Sora download URLs were valid for at most 1 hour. Sume returns unsigned_urls on completion and serves the file from GET /v1/videos/{jobId}/content.

Sora's input image was the first frame and had to match the video size. Sume uses frame_images plus aspect_ratio, and rejects size on v1 models.

On Sume, wan-3.0 reference videos total 15 seconds or less and need 16 fps or more, up to 5 clips. Check each clip with video inspect and trim to fit.

Genjutsu Motion Transfer on Sume needs exactly one source video plus 1 to 8 reference images. Text-only or malformed bodies are not valid. Request shapes below.

Runway's Enhance Frame Rate takes inputs up to 300 seconds at 1 credit per 2 seconds. Sume's Timeline sets output.fps to 24, 25, 30 or 60. Compared.

Yes. A job that ends in failure sends job.failed with a public error to the HTTPS callback_url you set on POST /v1/videos, signed like every Sume webhook.

OpenAI lists gpt-image-1 as shutting down October 23, 2026. On Sume, call POST /v1/images with openai/gpt-image-2.5 or sunburst, or sume/auto. Migration steps.

OpenAI removes gpt-image-1.5 and gpt-image-1-mini from its API on Dec 1, 2026. On Sume, send openai/gpt-image-2.5 and list ids with GET /v1/images/models.

OpenAI retires the chatgpt-image-latest alias on Dec 1, 2026. On Sume, pin openai/gpt-image-2.5 or send sume/auto, and read ids from GET /v1/images/models.

OpenAI put transparent backgrounds for gpt-image-2 in preview (png or webp). On Sume, the background parameter is listed for ChatGPT Image 2.5, not gpt-image-2.

OpenAI's changelog names the snapshot gpt-image-2-2026-04-21. Sume documents catalog slugs and bare aliases: send openai/gpt-image-2 or check /v1/images/models.

OpenAI lets jpeg and webp take output_compression 0-100. Sume's docs say it is not served in v1 and sending it returns 400 unsupported_parameter.

OpenAI applies the mask to the first of several input images. Sume forwards input_references in order with mask_url, so put the image to edit first.
OpenAI marks GPT Image sizes above 2560x1440 as experimental. Sume's 2.5 custom pixels accept up to a 3840 edge, so check the five size rules before you send.

Image 1.0 is a retiring compatibility alias for Image Router Auto. For new transparency work, call POST /v1/images and set background on a GPT Image 2.5 model.

Cartesia's locale field picks a regional accent such as en-GB on Sonic 3.6. Sume's TTS request has a language field only, so pick the accent via the voice.

Cartesia does not normalize ranges like 1999-2000 or fractions like 2/3. Sume sends your transcript literally, so write them as words before you submit.

Sume's TTS warns when a voice's language differs from `language`. No job or charge exists yet; after the user agrees, retry with `confirm_language_mismatch`.

Gemini added a Voices endpoint on 2026-09-22. Sume has no separate voices list route; list avatars and use one whose `voice.status` is `ready`.

Sume returns 400 `invalid_voice_id` for a voice name that is not a UUID or `voi_` id, before any job or credit. Copy an id verbatim or send an avatar.

Sume has no `/v1/audio/speech` clone. Its TTS is `POST /v1/tts-1.0/generate` or the Router, a job-based request authenticated with a Sume key.

Sume's Music Router accepts a prompt of 1-5000 characters. What to spend them on: a seven-axis brief, section markers and exclusions, in one positive prompt.

A song can outlast Sume's 30-second wait. The wait bounds the HTTP call, not the job, so submit async and poll the status URL, or use a webhook.

TikTok lets you disclose AI content with its AIGC label or your own clear caption, sticker or watermark. Burn a caption or add an overlay plate with Sume.

TikTok says disclosure isn't needed for small edits like color correction, reframing or cropping. See which Sume crop, fit and trim settings are those edits.

Set poll_attachment when creating a Reel container: two to four options, 3 days by default, Facebook Login only. What Sume prepares before that call.

Set is_comment_prompt_used to true on the media container to attach a comment prompt, then read replies from prompt_response. One add-on per media, no poll.

A media_publish call can succeed with the caption dropped. The response then carries config_issue CAPTION_NOT_ATTACHED. What it means and a burned-in fallback.

Requests to graph.instagram.com with a Facebook-Login-only parameter now return 400 naming it, instead of being ignored. How to read the error and fix the call.

Meta added a publishing error: the linked Facebook account is restricted and cannot publish video. What it blocks and how to post stills from a clip meanwhile.

Since 2026-07-30 Instagram omits media_url for video with copyrighted audio or reels with downloads off. Treat it as optional and import files you own.

Bluesky's app sets VIDEO_MAX_DURATION_MS to 10 minutes, and 1.132.0 removed the 10-minute gate. Trim longer clips with Sume video trim first.

Bluesky's app accepts video/mp4, video/mpeg, video/webm, video/quicktime and image/gif. For anything else, re-encode to MP4 with Sume video trim.

The 2026-07-28 MCP spec adds server/discover. Sume's hosted server does not implement it and answers -32601; read initialize and tools/list instead.

TypeScript SDK 2.2.0 follows nextCursor in listTools(). Sume's tools/list returns a tools array with no cursor, so the walk ends after one request.

MCP's 2026-07-28 spec adds subscriptions/listen for change notifications. Sume's hosted MCP answers POST only and declares listChanged false.

MCP Apps tools point at a ui:// resource for the host to render. Sume's hosted MCP lists plain tools, so a host shows the tool result, not an app.

MCP TypeScript SDK 2.2.0 adds expectedIssuer to machine-to-machine providers. Sume's OAuth is authorization_code only; headless agents use an API key.

Python SDK 2.2 rejects authorization server metadata whose issuer is not the server's origin. Sume's metadata sets issuer to the MCP origin.

Python SDK 2.2 closes stateful sessions idle for 30 minutes, then 404s. Sume's hosted MCP is POST-only; re-poll jobs_wait with the same ids, never resubmit.

In Claude Code auto mode a classifier reviews each action. On Sume's MCP, paid calls still need idempotency_key, and dry_run and max_spend_usd stay available.

Headless claude -p can route permission prompts to an MCP tool. For Sume paid jobs, keep idempotency_key stable and wait with jobs_wait in 55s slices.

Claude Code reads AGENTS.md when no CLAUDE.md exists. sume skills install writes to .agents/skills or .claude/skills, so check which one you got.

CLAUDE_CODE_DISABLE_WEB_FETCH turns off Claude Code's WebFetch tool. Sume's crawl_* tools come from an MCP server, so they are a separate path.

tool_input_guardrails on an Agents SDK MCP server can reject a call before it runs. For Sume paid tools, check idempotency_key and max_spend_usd.

Use require_approval with a tool_names list to gate Sume write tools by name, or connect with OAuth mcp:read so those tools are never visible.

AI SDK 7.0.123 adds optional SSE heartbeats for idle UI streams. Sume's jobs_wait is capped at 55s per call, so you still repeat it with the same ids.

AI SDK 7.0.126 clears tool approvals when addToolOutput runs. If a paid Sume call replays, a stable idempotency_key is what guards the create.

Gemini CLI 0.62 retains the OAuth refresh token on refresh. Sume's MCP token endpoint accepts only authorization_code, so expect a fresh sign-in, not a refresh.

Codex's opt-in instant_interrupt lets new input steer a running turn. A Sume job submitted earlier keeps running and billing; re-read it with jobs_wait.

Conversational attributes add richer context to product listings. Draft them per SKU as schema-bound JSON from a Sume Format run, then review before upload.

Loop one product reference through POST /v1/images to get the 1:1, 4:5, 9:16 and 1.91:1 Demand Gen image sizes, with notes on which pixel sizes are valid.

OpenAI now splits 429 slow_down (traffic ramping too fast) from 503 server_is_overloaded. Here is how each maps to Sume's 429 scope and 503 retry rules.

OpenAI now returns a slow_down 429 when traffic grows too fast. On Sume, pace paid submits to your plan's write budget and read ratelimit-remaining.

A 503 overload is safe to retry on Sume if you reuse the same idempotency key. Credit is reserved at submit and released if the job fails.

ElevenLabs lets enterprise service account keys carry TTS, music and dubbing concurrency limits. Sume has one plan-based limit and no per-key setting.

An MCP tool call spends the write budget once for the run it creates; a jobs_status poll spends none. Reads have their own, much larger budget.

curl 8.22.0 adds experimental RFC 9421 HTTP Message Signatures. A Sume webhook is not one: it is an HMAC over timestamp.body in a sume-v1 header.

Sume does not send webhook-id, webhook-timestamp or webhook-signature. It sends x-sume-webhook-* headers with a sume-v1 hex signature. Use verifyWebhook.

After a receiver outage, list completed jobs and POST /v1/jobs/{job_id}/webhook/redeliver one by one. Sume has no bulk cancel-before-cutoff call.

Sume run webhook bodies are capped at 1 MiB, and SNS now allows 1 MiB messages with MaximumMessageSize. Ack the webhook first, then publish.

Pending I/O now keeps a Durable Object alive without a client, but a Sume video job is better tracked by job id, status_url polling or a webhook.

Cloudflare now checks only a 64 MiB uncompressed Worker bundle. @sume-com/sdk has no runtime dependencies and runs on Workers; measure with a dry run.

Python Workers now accept ASGI frameworks. A FastAPI Sume receiver keeps the same rules there: raw body, constant-time HMAC compare, replay window, fast 2xx.

Sume's verifyWebhook runs on plain WebCrypto in Workers. The docs list no compatibility flag for it, so webcrypto_modern_algorithms is not a step to add.

Put Sume's verifyWebhook in the first step of a Supabase middleware pipeline: return 401 on a bad signature and handlers only see verified events.

Node 20 is gone from GitHub Actions runners. Sume's CLI is a native binary and the API is plain HTTPS, so a workflow step can call it with no Node version.

Sume's published OpenAPI document declares 3.0.3, not 3.2. Check that your generator reads 3.0.x before pointing it at api.sume.com/reference/json.

Sume has no polling endpoint with offset commits. Page GET /v1/jobs with starting_after, read each job's status, and keep your own cursor.

A scheduled Cloudflare Workflow that submits a Sume job should derive the Idempotency-Key from the tick, so a replayed step returns the same job.

Sume returns HTTP 402 with the code insufficient_credits when the balance is too low. The fix is adding funds, not sending a payment header.

Hookdeck's longer destination timeout does not change Sume's fixed 10-second attempt. Ack fast at the relay URL and give your handler its own time budget.

Sume has no special 410 handling and does not follow redirects. Any non-2xx, including 410 or 301, burns one of ten attempts. Here is the fix for each case.

Sume job webhooks give up after about 4.5 minutes of gaps, run webhooks after about 3 hours. Cumulative timings per attempt, then redeliver or poll.

Sume signs with both the new and old secret for 24 hours after rotation, so two receiver versions can run side by side. Upgrade the verifier first, then rotate.

Over MCP an agent can read job status, events and delivery status to see why a webhook did not arrive. Redeliver is a REST call that needs jobs:write.

Before filing a ticket for a Sume signature mismatch, compare the secret fingerprint header with the dashboard value. It is safe to paste into a ticket.

HeyGen's GET /v3/api_keys/self shows a key's name, scopes and expiry. On Sume, GET /v1/me verifies the key and returns non-secret account metadata.

HeyGen's edit_plan revises named scenes in one turn, up to 50 items. Sume has no in-place scene edit: regenerate preview stills, then render.
HeyGen's PATCH /v3/avatars/{group_id} stores a default_voice_id. On Sume, TTS can take an avatar_handle and resolve that avatar's ready voice.

HeyGen returns 409 request_in_progress for an in-flight retry. Sume returns 409 idempotency_conflict only when a key is reused for a different payload.

HeyGen's GET /v3/videos/{video_id}/scenes returns each scene's visuals and script. Sume job results return media.sume.com artifacts and scene previews.

Pass source_caption_id instead of video_url to re-burn a clip under a new style. Sume reuses the stored word timings, so speech-to-text runs only once.

Sume returns 400 caption_hangul_text_latin_style when Korean copy is sent to slam, punch or tiktok-green. Name a Hangul style such as black-outline instead.

Sume's font field on video captions is Hangul-only: sending it with slam, punch or tiktok-green returns 400 caption_font_requires_hangul_style.

Sume's design overrides change caption colours, weight, placement and motion per request, but punch and tiktok-green ignore them. Which styles accept design.

caption_no_speech means the clip has no audible speech. Sume's fix is next_action use_overlay_captions: send cues with text, start and end and skip ASR.

Sume audio detach writes wav as 16-bit PCM (pcm_s16le) by default. If your camera records 32-bit float, here is what that means and which options you get.

CapCut has no captions API in the pages we read. Sume's POST /v1/video-captions burns a white-on-black-outline look with style black-outline.

Sume's text to speech API doesn't stream audio chunks. It returns a finished file per job; split long scripts into sentence jobs to start playback sooner.

Sume's speech to text API isn't real time: it transcribes recordings of up to 10 minutes at a URL. Chunked recordings give near-live transcripts.

Text to speech in C#: POST the text and a voice with HttpClient, poll the job until it finishes, then stream the MP3 from its audio_url to a file.

Speech to text in C#: POST the audio file's URL with HttpClient, poll the job, then read the transcript and word timestamps from the JSON result.
A talking avatar in JavaScript: create it and send it a script from Node with the Sume SDK, wait for the job, then play the returned MP4 in React.

Pace Python API calls with an asyncio limiter set under the API's per-minute budget, keep polling on its own budget, and back off on 429 retry-after.

Promise.allSettled waits for every promise and reports each outcome; Promise.all rejects on the first failure. For paid API jobs, use allSettled.

Rate limiting refuses requests over a quota with a 429; throttling slows or queues the excess instead. What each one means for your client.

An API sandbox is a separate test environment with fake or free results. Sume has none, so test with its spec, free checks and spend caps.

HttpClient.Timeout defaults to 100 seconds per request and throws TaskCanceledException. How to set it, and why slow API jobs need polling instead.

Java's HttpClient has no request timeout unless you set one: connectTimeout on the client, timeout on each request, and HttpTimeoutException.

Python Requests has no default timeout: without timeout= a call can hang indefinitely. Set (connect, read) on every call, and keep it short for job APIs.

httpx retries only ConnectError and ConnectTimeout, via HTTPTransport(retries=n). For read errors, 429 and 503, write a loop that keeps one Idempotency-Key.

Go's http.Transport retries only network errors on reused connections, and a POST only with an Idempotency-Key header. Write the 429 and 5xx loop yourself.

Loop over a file with while IFS= read -r, build each JSON body with jq --arg, send it with curl --fail-with-body, and pace it under the API's rate limit.

A JSON to video API renders one MP4 from a document that says which clips play when, over which audio. How Sume's Timeline 1.0 does it, and costs.

Batch video processing by API is a loop: one edit job per file, each with its own idempotency key, collected by webhook. How it works on Sume, and costs.

Automate video editing in Python by calling an editing API with Requests: submit a caption, cut, or crop job, poll until it ends, chain the output.

Generate subtitles from Java with the JDK HttpClient: POST the video URL to a captions API, poll the job, then read the captioned video_url.

Burn subtitles into a video with FFmpeg's subtitles filter: -vf subtitles=subs.srt re-encodes the picture, and force_style overrides the font and colour.

Crop a video with FFmpeg's crop filter: -vf crop=w:h:x:y keeps a w×h area whose top-left corner is at x,y; leave out x and y to crop the centre.

Fade a video in and out with FFmpeg: fade=t=in and fade=t=out on the picture, afade on the sound, with the fade-out starting at the length minus its duration.

Change a video's frame rate with FFmpeg's fps filter: -vf fps=30 drops or duplicates frames and keeps the running time. How -r and framerate differ.

Add a watermark image to a video with FFmpeg: pass the logo as a second input and use overlay=W-w-10:H-h-10 for the bottom-right corner.

Increase volume in FFmpeg with -af volume: volume=2 or volume=6dB, with -c:v copy so the video isn't re-encoded. Check headroom with volumedetect first.

Remove an image background in Python: POST the image URL with requests, poll the job, then save the transparent PNG. A full script and the price.

Remove an image background from Node.js: call a background-removal API with fetch on your server, poll the job, and save the transparent PNG.

It depends on the tool: the training answer sits in its terms' content license and its privacy policy's use section. What to search for, and what Sume's say.

Some may; the privacy policy is where to check. How to read its sale and sharing sections, and what Sume's policy says it collects and shares.

Delete your data from an AI tool in two steps: delete the account, then send a deletion request for stored files. How it works on Sume, and its limits.

No AI tool can promise perfect security. Check who processes your inputs, who on your team sees them, who can open outputs, and how keys are kept.

An AI vendor risk assessment adds training, model providers and spend to a SaaS review. The questions, and where Sume's public pages answer them.

Some API keys expire and many last until revoked. Sume keys have no expiry date in current code, so rotation is on you. How and when to rotate.

An API uptime SLA promises a monthly availability percentage and credits if missed. Sume's terms offer none; how to build around that.

Generate a HeyGen API key in its API dashboard, send it as X-Api-Key to api.heygen.com, check it with GET /v3/users/me, then create a video.

HeyGen's API v1 and v2 stay operational until October 31, 2026 and retire on November 1. The warning headers, and the v3 call for each v2 call.

Replicate's API allows 600 prediction creates and 3,000 other requests per minute. Low credit and no card tighten it; over the limit you get a 429.

fal.ai limits how many requests run at once, not requests per minute: 2 for a new account, rising with credit purchases to 40 self-serve.

Kling's API limits concurrent tasks by resource package, not requests per second. Over the cap, a create fails with HTTP 429, code 1303.

Runway's API has no requests-per-minute limit. Usage tiers cap concurrency per model, generations per 24 hours and monthly spend.
In HeyGen's v3 API, avatar_id is a look id from GET /v3/avatars/looks, and voice_id comes from GET /v3/voices or the look's default voice.

fal hosts FFmpeg as model endpoints: merge videos, merge audio and video, extract a frame, compose tracks. Called with a fal key, priced per second.

Higgsfield's API is asynchronous: submit to a model endpoint, keep the request_id, poll or take a webhook, download. Billing and limits explained.

Sume's Agent Completions run in a fresh thread every time and do not accept thread_id to continue one. Format runs continue with previous_run_id instead.

Generate a still with POST /v1/images, then pass its URL as first_frame to POST /v1/videos. The two calls, the URL rule between them, and what each reserves.

A short Python script that sends a prompt to Sume's Music Router, polls the job and saves the audio. Runs with httpx and asyncio.

Sume's music API rejects a non-empty negative_prompt with HTTP 400. What the error looks like and how to write exclusions in the prompt instead.

Submit a music job with mode webhook and a public HTTPS URL, verify the signed callback, and keep polling as a backup. Headers, events and retries.

In AI SDK 7, createMCPClient takes an http transport with a url and headers. Point it at https://mcp.sume.com/mcp, load client.tools(), and close in finally.

stopWhen: isStepCount(5) limits AI SDK steps, not spend. For paid Sume MCP tools, pair it with max_spend_usd, dry_run and an idempotency_key.

Set headers.Authorization to Bearer plus your Sume API key on the AI SDK http transport, and send only one credential header. An OAuth token is not an API key.

Sume's docs describe no audit-log endpoint. Job records, the usage ledger and request ids give a trail, but not which API key made a call.

Sume keeps a public changelog, newest first, with a version, a date and short notes. It does not mark breaking changes, so also watch the retiring list.

Sume answers 502 attachment_fetch_failed when it cannot fetch an image URL: unreachable host, hotlink protection, or a non-2xx reply. Why retrying fails.

Audio detach fails with detach_source_has_no_audio on a silent clip. Probe has_audio with a video inspect that skips frames, then detach only clips with sound.

Sume's Video Router docs give sume/auto a 3 to 10 second clip range at 16:9 or 9:16, default 8 seconds at 720p. For 30 seconds, pin seedance-2.5 or join clips.
On a Sume avatar video, a failed caption stage does not fail the job: the clean video_url still arrives with captions.status set to failed. What to do next.

Sume queues extra generation jobs instead of rejecting them. The per-plan concurrency and queue table, the 429 queue_full case, and how to size an image batch.

Sume has no one-call dubbing route. Chain audio detach, STT 1.0, your translation, TTS 1.0 and Timeline audio into a dub. Routes, limits and the $0.01 steps.

If script_text mismatches the speech, POST /v1/video-captions fails with script_alignment_mismatch or script_alignment_failed. Simplify or omit it.

An ask rule in Claude Code settings prompts every time a named MCP tool runs, even if an allow rule matches. Rules for Sume's paid tools and their limits.

Use claude --bare -p with --mcp-config and --allowedTools to call Sume's hosted MCP tools in CI; read mcp_server_errors so an unloaded server fails the job.

A PreToolUse hook that never fires on an MCP tool usually has a matcher problem: a bare server name, a plugin's scoped name, or a missing .*. Fixes for Sume.

An exclusive managed-mcp.json fixes the MCP servers Claude Code may use. What to put in it for Sume's hosted server, and what Claude Code 2.1.282 added.

Claude Code 2.1.283 fixed MCP progress notifications dropped on background calls. Sume's docs describe bounded jobs_wait slices instead of a progress stream.

Claude Code 2.1.282 makes mcp_tool hooks on blocking events wait for their MCP server. With Sume, the check to run there is a dry_run cost preview.

After resuming a Claude Code session, a first MCP call could fail with No such tool available. Claude Code 2.1.284 waits up to 10 seconds. The Sume side.

Claude Code 2.1.283 can put MCP tool output on an OTEL span when OTEL_LOG_TOOL_CONTENT=1. With Sume, check that output for signed URLs and keys first.

A PreToolUse hook that lets dry_run previews through, denies paid Sume MCP calls with no max_spend_usd, and asks you before the rest. Script and settings.

Claude Code 2.1.281 stopped connecting one MCP server twice when a plugin or connector spells its URL differently. What it means for Sume's single MCP URL.

Put a Sume MCP server in one subagent's mcpServers field so video and image tools stay out of the main chat. Frontmatter for both routes, plus limits.

Claude Code 2.1.281 added MCP URL-mode elicitation, a browser flow a server can request. Sume's browser step is OAuth consent, a different mechanism.

A skill's allowed-tools field pre-approves tools for one turn and does not restrict the rest. How to list Sume's job tools and leave paid ones prompting.

Define a generate_video tool with input_schema, run it against Sume's /v1/videos when Claude Sonnet 5.5 returns tool_use, and return the job id as tool_result.

When a Sume REST call fails inside your Claude tool loop, send the error back as a tool_result with is_error true and say what to try next. Code and table.

A Cursor scheduled run can call Sume's HTTP API to start a saved schedule run. The three prerequisites, the request, and why a skipped run still returns 200.

Cursor Projects lets a coordinator delegate to subagents. If they share a Sume MCP connection, spend gates sit on each call: idempotency keys, dry runs, caps.

Cursor's self-hosted machines run agents on hosts you pick. Sume's key rule is short: trusted servers, CI secret stores or your own machine, never chat.

ElevenLabs quotes about 150 ms to first speech for Eleven v4 Turbo. Sume's text to speech returns a finished file per job, so pre-render lines you can predict.

Thinking of moving text to speech off ElevenLabs? Sume's TTS is an async job API with Sonic ids on a router. The contract points to check before you switch.

ElevenLabs Dubbing v2 is a project-based API with editable transcripts. Sume has no dubbing route; here is how its STT, TTS and audio-join steps map on.

ElevenLabs added Music v2.5 API support on 2026-09-14 with composition plans. How a plan differs from Sume's prompt-only music route with no duration field

Sume's Enterprise rate limit is contracted, not self-serve. Until a number is provisioned, an Enterprise key gets the Scale row, plus 20 concurrent jobs.

Sume's docs list no CSV export, but GET /v1/usage returns ledger rows as JSON. Convert them with jq, and keep captured rows separate from refunds.

Retry a failed run: the same Sume Idempotency-Key returns the old failure. Use a new key, or continue with previous_run_id to keep finished clips.

Moving a fal Seedance 2.0 call to Sume: the path becomes a bare model id, image_urls become input_references, and seed, auto ratio and auto duration go.

FLUX.2 edits from several reference images. Black Forest Labs' API takes up to 8; Sume's flux.2-pro catalog row lists up to 10 input_references.

BFL released six Agent Skills for FLUX 3 video direction on 2026-08-07. Sume ships its own skill through the CLI. Where each installs and what it cannot do.

BFL's FLUX MCP server gained generate_video and enhance_video on 2026-08-11. Sume's hosted MCP has its own generate_video and video_upscale_create tools.

A Format run body over 4 MiB answers 413 payload_too_large. Shrink input, send media by URL, and tell it from attachment_too_large and a null payload.

Every Sume Format run has a generation spend cap. Send generation_spend_cap_usd to set it: up to 500, null runs at 500, 0 is rejected. What happens at the cap.

Judder on a joined video comes from resampled frame rates. Sume's Timeline warns output_fps_resamples_sources when a source rate differs. How to read it.

Declare a function for Gemini 3.8 Flash, run it against Sume's /v1/videos when the model returns a functionCall, and reply with a functionResponse with job id.

Gemini CLI v0.59.0 added SSRF prevention to MCP OAuth metadata discovery. Sume publishes metadata at two public HTTPS URLs; how to confirm both from a shell.

Gemini CLI v0.59.0 filters mcpServers in restricted mode. If Sume is missing in an untrusted folder, trust is the cause; then tell it from an OAuth issue.

OpenAI says GPT-6 Astra supports Chat Completions but its tool calling requires Responses. Use the Responses mcp tool for Sume, not a chat.completions loop.

Sume publishes no per-model image time for GPT Image 2.5, only a 30-second wait budget. A short curl script times your own prompts by quality and size.

Arena leaderboards rank images on other people's prompts. Here is a blind three-way test of Flare, Sunburst and GPT Image 2 on yours, with one script on Sume.

Sume accepts background auto, transparent or opaque on the two GPT Image 2.5 ids only. What opaque does, what a bad value returns, and which models reject it.

GPT Image 2.5 on Sume advertises png, jpeg and webp. Asking for svg returns a 400 that lists the accepted formats. How to check and what to do for vector art.

GPT Image 2 stays selectable on Sume. Moving to 2.5 means a new model id and new limits: six quality values, 16 references, mask_url. Old requests keep working.

To get a 4K image from GPT Image 2.5 on Sume, send image_size 3840x2160 to POST /v1/images and be ready for a 202 job response. Request, cost, and polling.

Edit a photo with GPT Image 2.5 on Sume: send the image in input_references, describe the change, and set aspect_ratio to auto. Up to 16 references per call.

When GPT Image 2.5 takes longer than 30 seconds on Sume, POST /v1/images returns 202 with a job. Poll the status URL, then read the result, or use a webhook.

GPT Image 2.5 on Sume takes an optional mask_url for edits. OpenAI says the mask needs an alpha channel and only guides the edit. The request and the limits.

To make several edits to one picture with GPT Image 2.5, feed each result back as a reference. What fal says Sunburst preserves, and what to check each round.

On Sume, GPT Image 2.5 takes n from 1 to 4 images per request, billed per image. How to ask for several versions and what a 202 means for a larger n.

OpenAI serves GPT Image 2.5 on images/generations and images/edits. On Sume both become POST /v1/images. How the fields map and what returns instead of base64.

GPT Image 2.5 on Sume returns png, jpeg or webp through output_format. Which to pick for transparency and speed, and what output_compression does on Sume today.

A runnable Python example for GPT Image 2.5 on Sume: async httpx, POST /v1/images, read data[].url, and stop cleanly on a 202 job. Copy, set the key, run.

GPT Image 2.5 on Sume accepts up to 16 reference images per request, six more than GPT Image 2. How to label each image's job in the prompt and what to check.

Sume returns GPT Image 2.5 results as signed URLs, not base64, and its docs give no lifetime. Download each file when the call returns. Node example.

GPT Image 2.5 on Sume accepts background transparent. OpenAI says transparency needs png or webp output. The request, the catch, and when to use another route.

A 400 unsupported_parameter from Sume's image API means the model does not list that field. Which GPT Image ids accept quality, mask_url and background.

xAI's remote MCP tool works with grok-4.7 on the Responses API. Point server_url at Sume's hosted MCP, restrict allowed_tools, and cap spend on the Sume side.

Both are 409s on a Sume Format run create. idempotency_key_in_use is a concurrent duplicate you resend; idempotency_conflict is a changed body you must fix.

Replaying an Idempotency-Key on a Sume run create returns the original receipt with idempotency_hit true. How to spot a replay, and what a new body does.

Ideogram's API has character reference. Sume lists ideogram/ideogram-v3 with input_references, low, medium, high quality; no character reference is documented.

On Sume the quality field takes low, medium or high for Ideogram V3, and those map to TURBO, BALANCED and QUALITY. Omit it and BALANCED runs. Price is flat.

Sume's image API takes provider.only and provider.order but lists one endpoint per model, slug sume. Which routing fields do anything, and the 400 for the rest.

Sume's image API does not stream partial images yet: stream true returns 400 streaming_not_supported. Submit async, read events, or use a webhook.

image_not_fetchable means Sume could not fetch or mirror your input image. Check it is a public HTTPS image URL, then retry or send the request id to support.

Sume lists google/imagen-4-ultra with a resolution of 1K or 2K (default 2K) and google/imagen-4-fast with none. Both are text-only, with a flat price per image.

Set is_ai_generated=true when you create the media container and Instagram's API records your AI self-disclosure. Carousels take it on the parent only.

Publish an Instagram trial Reel by API with trial_params.graduation_strategy set to MANUAL or SS_PERFORMANCE. Trial Reels reach non-followers only.

GET /v1/jobs/:id/result answers 409 job_not_completed until the job completes. Poll status for terminal, read failures from the job record, and never resubmit.

MiniMax H3 Max lip sync on Sume takes 5 to 14.8 s of audio. For a longer line, use VEED Fabric up to 300 s, or split the audio into ranges and sync each piece.

The 2026-07-28 MCP revision is out and Claude Code speaks it. Sume's hosted server negotiates 2025-03-26, 2025-06-18 and 2025-11-25, not 2026-07-28.

On Sume the MCP endpoint POST is a read, a tool call spends write budget once for the run it creates, and a jobs_status poll over MCP spends no write budget.

The 2026-07-28 MCP spec requires Mcp-Method and Mcp-Name headers on HTTP requests. How Sume counts MCP calls against its rate limits.

MCP 2026-07-28 lets a server return input_required and the client retry with inputResponses. Sume's paid confirmation is two calls with dry_run instead.

Sume's MCP OAuth resource audience is https://mcp.sume.com/mcp, its authorization server is the MCP origin, and the token is not an API key.

The 2026-07-28 MCP spec deprecates Roots, Sampling and Logging. Sume's hosted server declares only tools, so a client calling it has nothing to migrate.

No. Sume's hosted MCP server has no task handles. A paid create returns a job id, and you poll it with jobs_status or jobs_wait, then read jobs_result.

The 2026-07-28 MCP spec adds ttlMs and cacheScope to tools/list. Sume's tool list depends on the session's scopes, which is why caching it per session matters.

Sume's MCP endpoint answers an MCP-Protocol-Version it does not support with HTTP 400 and code -32600. Here is what the 2026-07-28 spec tells a client to do.

MiniMax lists 4–15 seconds for H3, but Sume's docs and pricing code start at 5 seconds. Send 5 or more, and trim to 4 afterwards if you need it.

MiniMax H3 renders natively at 768p, not 720p. Sume refuses resolution 720p on H3 and H3 Max and tells you to use 768p. The accepted values per id.

MiniMax H3 makes six aspect ratios, from 21:9 to 9:16. Which ones Sume accepts, where adaptive is allowed, and how frame images set the ratio.

ComfyUI documents three MiniMax H3 workflows with local model files; a hosted API returns a job. The limits that change between the two, from the docs.

MiniMax H3 fills the motion between an opening and a closing image. On Sume send frame_images with first_frame and last_frame; ratio, length and price rules.

MiniMax H3 models multiple shots natively. Write [Shot 1] labels or timecoded blocks in the prompt; syntax from the vendor guides and a Sume request.

The MiniMax H3 prompting rules that change output: give each reference a job, write timecodes, say what to avoid, and stay under 7,000 characters.

A runnable Python example for MiniMax H3 on Sume: POST /v1/videos, poll the job until completed, then download the clip from unsigned_urls. Uses httpx.

The MiniMax H3 reference-to-video limits and the errors Sume returns when you cross them. Counts, clip lengths, the audio-only rule and image price.

MiniMax H3 lists V2V motion transfer. Send a motion video and character images as references on Sume, write each reference's job, and mind the limits.

MiniMax H3 accepts up to 3 audio clips as references. How to write the prompt, the limits Sume enforces, and the rule that audio cannot be the only reference.

Sume accepts mode subscribe but it is an alias of sync: one 30-second wait, no event stream. For a fal-style long wait, submit async and poll status.

A video model router API on Sume is one field: model set to sume/auto on POST /v1/videos. Request, polling, MCP and legacy routes, and when to pin a model.

ElevenLabs added optional waveform data to music generation. Sume's music result has no waveform field, so compute peaks from the audio artifact with ffmpeg.

n8n 2.40 added Force Tool Call on First Iteration to AI Agent v3. If Sume MCP is the tool, the first call is real: what a session can reach and the gates.

n8n 2.40 keeps custom headers on MCP registry remotes through OAuth token refreshes. With Sume, do not add an API-key header on top of an OAuth bearer token.

Google says Nano Banana 2 spans 512px to 4K. On Sume you pick a tier with resolution: 512, 1K, 2K or 4K. The default, and why 4K can return 202.

OpenAI's Agents API takes MCP servers at session setup. Give it Sume's mcp.sume.com/mcp URL and an API key, and gate paid calls with idempotency_key.

OpenAI says to stream output or use webhooks to learn when an agent finishes or needs input. Sume sends one agent.run.terminal webhook per run, never on cancel.

OpenAI added admin controls to restrict API key creation on 2026-09-15. Sume keys are workspace-scoped with fixed scopes and rotate by replacement.

On Sume, 429 queue_full means no accepted generation capacity is left, rate_limited means request volume, and full concurrency leaves the job queued.

A Sume 429 rate_limited names its budget in error.details.scope, read or write. Reads get forty times the write number. Headers to pace on and what to back off.

Reference ingest reads on-screen text at source resolution, returns lines with boxes, spans and confidence, and flags low-confidence lines instead of guessing.

Break a reference video into shots with an API: POST /v1/reference-ingest returns frame-exact cuts, keyframes and a labeled strip for one clip, unbilled.

Reference ingest reports audio.silent at a -60 LUFS gate, speech presence and beats, so you know whether to keep, replace or add a soundtrack before a remix.

A scheduled Action's spend cap defaults to $1.00 when unset. A per-run generation_spend_cap_usd is clamped to the smaller value. null lifts the ceiling.

A Seedance 2.0 request on Sume fails with 400 unsupported_parameter, 400 unsupported_capability or 404 model_not_found. What triggers each and the fix.

fal's Seedance 2.0 pages list aspect_ratio auto. Sume's seedance-2 advertises six fixed ratios and refuses others, so send 16:9, 9:16 or another listed value.

fal lists Seedance 2.0 reference-to-video at up to 9 images, 3 videos and 3 audio clips, 12 files in all. On Sume the API enforces the 12-file total. Details.

Create a Sume API key, POST to /v1/videos with model seedance-2.5, poll the job and download the file. One curl request, the auth rules and the fields to set.

Sume's docs say video generation takes 30 seconds to several minutes. Poll GET /v1/videos/{id} every 30 seconds or pass callback_url for a signed webhook.

What BytePlus's ModelArk tutorial documents for Seedance 2.5 (task types, drafts, rate limits, retention) and which concepts exist in Sume's video API.

Sume's Seedream calls run with the provider safety checker on, with no switch for it. What a refused generation returns, whether it is billed, and what to do.

POST /v1/timeline-1.0/compose stacks a still and a video into one MP4 (a half-banner), or overlays the still. Layout keys, limits and the flat price.

Sume STT 1.0 takes an optional language_code such as ko; omit it and the language is auto-detected. When to pin Korean, when to omit it, and how TTS differs.

A Sume 503 provider_capacity_exceeded means the provider queue is full. Docs say retry later with the same key; code replays the refusal, so use a new key.

Branch on the HTTP status, then on error.code. Use retryable, retry_after_seconds and next_action to decide on a resend. Never match on message.

Sume never discloses which family ran a sume/auto video: the response echoes sume/auto. What the docs say, why not to infer it, and how to pin a model instead.

Sume rejects a request that carries both Authorization: Bearer and x-api-key with 401 and 'Send only one API key credential.' Neither header wins. Fix it.

Sume tries a webhook up to 10 times. Job webhooks use a fixed 30 s gap; run webhooks back off with jitter up to an hour. What happens next, and how to replay.

Looking for a music generator you can call from code? What Sume's Music Router takes in, returns and does not do, so you can decide if it fits.

Looking for a Suno API? Sume does not list Suno, but the Music Router takes a prompt and returns audio. Request shape, async polling, limits and fixed price.

Vendors retire music models and Sume's Music 1.0 is retiring gradually too. Call the router, log job.model and routed_model, and pin ids so changes are visible.

When a Sume sync request returns before the job ends, the job still runs. Read sync.timed_out and sync.capacity_exhausted, then poll status_url, not a resubmit.
Sume's talking avatar video takes quality standard, plus (default) or max. What each means, the other output fields, and how the preview relates to final tier.
Sume's avatar video accepts an estimated 4 to 60 seconds per job, for scripts, scenes, previews and inline captions. Where it applies and what to do outside it.

Sume's docs describe no watermark option for talking photo clips. They do fix the inputs: a still, Sume-hosted audio under 10 MB, 1-300 s or 5-14.8 s by route.

A Sume run charges the workspace its API key belongs to. A team key spends the team wallet; a personal key on a team Format is refused with 403.

Sume's trending video search takes six windows, from yesterday to all-time. Which to pick for a spike versus a steady trend, and what each default is.

Pass a two-letter region such as KR, US or GB to Sume's trending video search to scope results to one country. Browse across US, GB and KR is not in production.

Set soundtrack.duck_db (0 to 20) on POST /v1/timeline-1.0/render so the music dips under your voiceover spine. It needs a real spine; silence mode is refused.

Set audio.mode to silence and a duration_seconds on POST /v1/timeline-1.0/render to join clips with no audio file. Which fields are illegal there, and pricing.

Timeline 1.0 refuses more than 8 adjacent fades with too_many_chained_transitions. Insert a hard cut. Also transition_too_long, transition_not_frame_aligned.

Timeline 1.0 defaults to a 1080x1920 MP4. Set output width, height and fps, and pick fit cover, contain, stretch or blur for clips that do not match the frame.

Sume TTS 1.0 has two limits: 20,000 characters in, 1,200 seconds of audio out. Over the audio limit it fails with tts_duration_exceeded and captures no credit.

Sume TTS 1.0 returns gapless sentence segments; with wav output each gets its own audio_url, ready to drive a lip-sync clip. Request shape and the 5 s catch.
Sume TTS 1.0 defaults to mp3 at 44100 Hz and 128 kbps. If the audio will be joined, sliced or muxed into video, ask for wav; mp3 adds padding at every edge.

Send model sume/auto to POST /v1/videos and Sume picks the family. The response echoes sume/auto and never names the model. When to pin a model instead.

Sume rejects a top-level field it does not know with 400 unknown_parameter and names the likely one. Why webook_url and thread_id fail, and the fix.

Veo 3.1 personGeneration is allow_all for text-to-video, allow_adult for image modes, and allow_adult only in some regions. Sume has no such field.

verifyWebhook in @sume-com/sdk is async. Without await, a Promise is truthy, so your signature check never rejects. The await, raw body and replay rules.

POST /v1/video-filter/check runs the same validation as the encode with no job and no credits. See what it returns and what it cannot promise about the encode.

unsupported_media_source means video_url is not on the Sume media host. Import the clip first; which Sume video endpoints need a hosted URL and which don't.

The video trim API returns video_trim_range_conflict when a body has both end and duration. Send start plus exactly one of them; other range errors explained.

Write a Wan 3.0 prompt as a shot list with sound cues, and set length and size in request fields. What to put in the prompt and what to send to Sume's wan-3.0.

Long Wan 3.0 clips take minutes. Pass callback_url on POST /v1/videos and Sume posts a signed webhook when the job ends, so you don't have to poll wan-3.0.

A short Node.js script that submits a Wan 3.0 job to POST /v1/videos, polls until it completes and saves the MP4, with no SDK. It uses the wan-3.0 model id.

A short async Python script that submits a Wan 3.0 job to POST /v1/videos, polls until it finishes, and saves the MP4. It uses httpx and the wan-3.0 model id.

wan-3.0 on Sume rejects seed and size rather than ignoring them. Use resolution and aspect_ratio instead. Why the 400 happens and how to fix the request.

A canceled Sume job sends job.canceled, but a canceled run sends no webhook at all. Which surface you called decides it; how to detect a cancel by polling.

A Sume run receipt over 1 MiB arrives with payload null and a payload_too_large error. The run did not fail; fetch the receipt from result_url. Handler steps.

Sume does not follow redirects on webhook deliveries: a 3xx is a failed attempt, not a delivery. Point webhook_url at the final URL, not a hop.

On Sume run webhooks, dedupe on the envelope request_id, which equals run_id and repeats on every retry. Order by created_at; request_id cannot.

Fixed delay retries at even gaps; exponential backoff doubles them. Sume uses fixed for job webhooks and backoff for run webhooks: how long each keeps trying.

One Sume verifier covers run and job webhooks. Route on event and answer 204 for unknown types so a new event never becomes a 500 and a retry storm.

When a Sume webhook signature will not verify, compare x-sume-webhook-secret-fingerprint with the dashboard fingerprint. It is safe to paste into a ticket.

After you rotate a Sume webhook signing secret, deliveries carry two signatures for 24 hours. What the header looks like and how to redeploy safely.

Send test posts a dummy webhook.test payload to a URL you type. Redeliver re-sends a real terminal event and does not use one of the automatic 10 attempts.

A Sume run webhook can say status OK while output is null. The run completed and billed; outcome is degraded and output_error says why. How to branch on it.

OpenAI's Agents API keeps durable sessions; Sume Agent Completions return a 202 receipt to poll or receive by webhook. Where each fits, and how they differ.

Alternatives to fal.ai and Replicate for AI video: Kling's and Runway's APIs, Higgsfield, and Sume, compared on price unit, models, API shape and limits.

A text to video API takes a prompt and returns a job id, not a video: poll it or take a webhook, then download the file. Fields, flow and prices.

Text-to-video invents every frame from words; image-to-video starts on your picture and animates it. How they differ, and how one request does both.

A video API lets code make, edit or deliver video over HTTP. The five kinds, what each one takes and returns, and how to tell which one you need.

An AI model aggregator sells many labs' models behind one API key, one request shape and one bill. What you gain, what you give up, and what to check.

An AI model router picks which model serves each request, so your code sends one id. How that differs from pinning a model, and the control you trade.

An API is the contract: routes, fields and errors. An SDK is a library in one language that calls that API for you. What an SDK adds, and when to skip it.

In the asynchronous request-reply pattern, the server accepts work with a 202 and a status URL, and the client polls or takes a callback until it's done.

Rate limit headers report your request budget: the window's limit, what's left, and when it resets. What each means and how a client should pace itself.

Return 201 Created when the resource exists by the time you respond, and 202 Accepted when the work will finish later. How 200, 201 and 202 differ.

A 504 from an API means a proxy stopped waiting for the server. Your request may still be running, so check before you resend. How to avoid 504s.

fal and Replicate both run many models behind one async API. fal bills per output and recommends its queue; Replicate bills most models by time.

fal is a developer platform billed per output; Higgsfield is a creative suite with apps and an agent that also sells an API. How they compare.

Yes. Runway's developer platform has an HTTP API with Node and Python SDKs: start a task, poll it, read the output. Models, routers and costs.

An edit decision list (EDL) is the ordered list of edits that rebuilds a cut: source, track, transition, and timecodes. An example and its JSON form.
The Creatify API makes avatar videos from text or audio, Aurora talking videos from a photo and audio, and ads from a URL, billed in plan credits.

Arcads has a public API: Basic auth with a client ID and secret, then a brand, a folder and a script, one generate call, and a poll for the video URL.

Use OAuth when a person signs in from Claude, Cursor, or another client; use an API key header for scripts, CI, and headless runs with no browser.

A remote MCP server can't read your disk. A tool gets only the arguments your client sends, so the file must sit at a URL the tool accepts.

VS Code allows 128 enabled tools per chat request. Claude Code has no fixed cap and defers MCP tools. Cursor's MCP docs name no number.

Claude Code caps MCP tool output at 25,000 tokens by default. Raise it with MAX_MCP_OUTPUT_TOKENS, or make the tool return less data.

Call a text to speech API from Java: choose a voice selector and an audio format, POST the text, wait for the job, then write the MP3 to disk.

Host the image where anyone can fetch it over HTTPS without a login: a public storage object, a public bucket URL, or your own site. Then test it.

Zero data retention means a provider stores nothing after it answers. Async AI video APIs can't: the video is a stored file. What Sume keeps, and why.

Synthesia's API docs make a video in four steps: a Legacy (v2) key, POST /v2/videos, poll until complete, then download from a time-limited link.

Serverless inference means calling a hosted AI model over HTTP with no servers of your own. Providers bill for compute time or for each output.

You need a GPU for AI video only if you run the model yourself. A hosted video API needs none: your code sends HTTPS and downloads an MP4.

Build your own AI video generator from a front end, a small backend and a video model API. You don't train a model; your backend holds the key.

An asyncio Semaphore caps how many coroutines run a block at once. For paid API jobs, hold it from submit to the final status and size it to your limit.

p-limit runs at most n promise-returning functions at once. For paid AI jobs, wrap the submit and the wait, not just the POST, and set n to your limit.

A circuit breaker stops calling a failing API: after repeated failures it opens and fails fast, then lets a trial call through. A Python version.

A dead-letter queue holds messages that failed processing too many times, so they stop looping and can be inspected. Which AI job failures go there.

httpx times out after 5 seconds of network inactivity by default. How to set connect, read, write and pool timeouts for slow AI API calls.

Create a Kling AI API key in the developer console, copy it once, and send it as a Bearer token. Legacy endpoints use an Access Key JWT instead.

fal runs 1,000+ models from many labs and bills video per second or per video. Runway's API offers its own Gen-4.5 and more, billed in $0.01 credits.

A Higgsfield API key is a key ID plus a secret made in Higgsfield Console, sent together in one Authorization: Key header from server code only.

A local MCP server runs on your computer and talks over stdio; a remote one runs elsewhere and is reached by URL over Streamable HTTP. How to choose.

SSE is MCP's older, deprecated HTTP transport; Streamable HTTP replaced it with one endpoint that takes every message as a POST. Which to choose.

MCP tools are called by the model, resources are attached by the app, and prompts are picked by the user. What each one is for, and how to choose.

Test an MCP server with the MCP Inspector: connect, sign in or add an auth header, list tools, and call a read-only one. Postman and curl work too.

MCP error codes are JSON-RPC codes. What -32700 to -32603 mean, why -32001 is a client-side timeout, and how a failed tool call differs from both.

A stateless MCP server keeps no session between requests. What Mcp-Session-Id does, what 2026-07-28 removed, and where state goes instead.

An MCP JSON config lists servers by name: a command for local ones, a URL and headers for remote ones. Why the key names differ between clients.

An MCP tool call result has a content array, optional structuredContent, and isError. What goes where, how images travel, and how errors look.

An MCP tool description is the text a model reads to pick and call a tool. What the spec says, where Claude Code cuts it short, and what to write.

An SRT file needs a start and end time for every line. Voice your text with TTS word timings, then write each timed sentence as a numbered block.

Call a speech to text API from Java with the JDK HttpClient and Jackson: post the audio URL, poll the job, then read the transcript and word times.

401 means your credentials are missing or invalid, 403 means they aren't enough, and 404 means not found, or hidden from you. How to fix each one.

Send a bearer token with curl in an Authorization: Bearer header, in double quotes so $TOKEN expands, or use --oauth2-bearer. Fixes for each 401.

A 400 Bad Request for invalid JSON means your body did not parse. Check shell quoting, single quotes, trailing commas, and unserialized objects.

Retry-After tells a client how long to wait before retrying: a number of seconds or an HTTP date, sent with 429 or 503. How to read it and what to do.

An API returns 404 when no route matches your path or method, or when the id doesn't exist for your credentials. How to tell them apart and fix each.

Retry network errors, 408, 429, and 5xx with backoff; skip most other 4xx. Retry a POST only with an idempotency key, and read the API's retry flag.

429 means you sent too many requests in a given time; 503 means the server can't handle requests right now. Both can carry Retry-After. What to do.

No. HTTP defines GET, HEAD, OPTIONS, TRACE, PUT and DELETE as idempotent, but not POST or PATCH. An idempotency key makes a POST retry safe.

An API call is your code asking a server for something; a webhook is the server calling your URL when something happens. The two work together.

Short polling asks on a timer and gets an instant answer; long polling holds each request open until there's news or a timeout, then asks again.

An API key is a kind of credential; Bearer is a way to send one, in the Authorization header. A key can travel as a bearer token, as OAuth tokens do.

Keep API keys server-side: an env var fed by a secret manager in production, your CI's secret store in pipelines, a git-ignored file on your laptop.

Accept HTTPS only, verify an HMAC over the raw body in constant time, reject stale timestamps, dedupe on the event id, and answer 2xx fast.

An HMAC proves the sender holds a shared secret. A digital signature is made with a private key and checked with a public one, adding non-repudiation.

Standard cron has 5 fields. A 6-field cron expression adds seconds at the front (Spring, Quartz, Azure Functions) or a year at the end (AWS).

Trim a video with FFmpeg: -ss before -i to seek, -t for the length, and -c copy to skip re-encoding, which starts the cut at the keyframe before.

The error means a yuv420p encode got an odd height (or width). Make both even: scale with -2 or round with trunc(ih/2)*2. How Sume rounds sizes.
yuv420p and yuv420p10le are both planar YUV 4:2:0. yuv420p stores 8 bits per sample; yuv420p10le stores 10, little-endian, in 16-bit words.

A faststart MP4 has its index, the moov atom, at the start of the file. FFmpeg moves it there with -movflags +faststart in a second pass.

Extract audio from a video with FFmpeg: -vn drops the picture, then -c:a copy keeps the audio as it is, or an encoder writes WAV or MP3.

Extract frames with FFmpeg: -frames:v 1 saves one image, -r 1 saves one per second, and a numbered file pattern writes every frame.

Concatenate videos with FFmpeg: the concat demuxer joins matching files with -c copy and no re-encode; the concat filter re-encodes mixed clips.

Merge audio and video with FFmpeg: map the video from one file and the audio from the other, copy the video, and add -shortest to match lengths.

A text-to-image API turns a prompt sent over HTTPS into generated images. How to call one: the request, the response, slow jobs, and the cost.

On Sume, most AI images finish inside the 30 seconds the API holds a request open. What makes one take longer, and how to tell slow from stuck.

MCP tool annotations are optional hints such as readOnlyHint. What each one means, its default, and how ChatGPT, VS Code, and Copilot use them.

Claude Code flags an MCP server as needing authentication after a 401 or 403 it can't clear. How to sign in again, and when an API key fits better.

Highlight words as text to speech plays: get word timestamps with the audio, then mark the word whose time range holds the player's current time.

Call a text to speech API from Python with Requests: POST the text and a voice, poll the job, then save the MP3. A complete script for Sume TTS 1.0.

Call a text to speech API from JavaScript on your server: submit the text with the Sume SDK in Node.js, wait for the job, then save the MP3.

Batch transcription by API is a loop: one speech-to-text job per file, keyed by the file's id, collected by webhook or polling. How it works on Sume.

Speech to text in Python with Requests: send the audio URL, poll the job, then read the transcript and word timestamps. A script for Sume STT 1.0.

Call a speech to text API from JavaScript on your server: send the audio file's URL with the Sume SDK in Node.js, wait for the job, read the text.

To automate AI video generation, save a working brief as a recipe, start it from code per event, list or schedule, and take each video by webhook.

200 OK means the request succeeded with its result; 202 Accepted means work was accepted but isn't done. On a video API, check the body's status.

A 415 Unsupported Media Type error means the server refused your request body's format. Fix the Content-Type header: send JSON as application/json.

A 409 Conflict means the request clashed with the server's current state. Read the error code to choose: resend, wait for the job, or fix the call.

An exposed API key works for anyone until you revoke it. Rotate to a new key, revoke the old one, then check its last use, its spend, and your jobs.

They can, but they then share its rate limit, usage record, and revocation. Give each person or service its own key, and know what stays shared.

A free webhook tester gives you a public HTTPS URL and shows each request's headers and body. Point Sume's Send test at it to see a signed payload.
Create a talking avatar in Python with Requests: generate the avatar, poll its job, send it a script to speak, then read the finished video's URL.

Send one image request per row, each with its own Idempotency-Key, async mode, and up to four images per call. Your plan's concurrency sets the pace.

Generate images from Python with Requests: POST a prompt to an image API, read the URLs from a 200 or poll the 202 job, then save each file.

Sume API status values in one place: jobs, /v1/videos, Format and Agent runs, bulk queues, webhook deliveries, usage rows, grants, and balance.

Sume API error codes indexed by surface: common codes, paid generation, Formats, Scheduled runs, Agent Completions, media tools, and hosted MCP.

How each Sume list endpoint pages: cursor and has_more on Formats and runs, starting_after on /v1/jobs, and limit-only lists that have no cursor.

Every HTTP header the Sume API reads or sends: the API key, Content-Type, Idempotency-Key, If-Match, request ids, rate limits, and webhook signatures.

Sume API terms in one or two sentences each: Format, run, job, spend cap, idempotency key, wallet, agent fee, webhook, artifact, and more, with links.

No single AI video generation API is best for every developer. Compare price units, models, API shape, and limits, then pick by what you need back.

Not for Format runs and Agent Completions: Sume returns their media on media.sume.com URLs that do not expire, and anyone holding a link can open it.

Sume unsigned_urls need your API key and answer with a 302 redirect. Download the MP4 with curl -L or code, and fix each 401, 404, or 409.

Sume answers 400 invalid_request when a webhook URL is not public HTTPS. The rules for scheme, host, port, and credentials, and the check at delivery.

Sume generation endpoints fetch public HTTPS media URLs. Trim, filter, frames, inspect, and Timeline take only your workspace's media.sume.com URLs.

Each Sume endpoint's job type and slot use: every generation job, trims and Timeline included, takes a concurrency slot; frames and inspect don't.

An index of the Sume API's public routes by family: which need no key, which scope each needs, where Idempotency-Key applies, and the post on each.

The file each Sume API endpoint returns: MP4 from Timeline and the editing tools, PNG, JPEG, or WebP images, WAV or MP3 audio, and JSON transcripts.

Browsers block direct calls from your site to api.sume.com, and API keys must never ship in frontend code. Call Sume from your server and proxy it.

Sume's hosted MCP server runs its own OAuth: a 401 points to discovery metadata, the user consents on mcp.sume.com, and PKCE S256 yields a one-hour token.

An MCP insufficient_scope error on Sume means the OAuth session lacks mcp:write. Start with mcp_health, then fix scopes, missing tools, and timeouts.

409 action_run_in_progress means a schedule run is already active and you sent reject. 404 agent_run_not_found means the id is not your Agent Completion run.

Run the Sume CLI in CI with a pinned release binary, SUME_API_KEY from your secret store, an isolated SUME_CONFIG_DIR, a doctor preflight, and --json output.

The Sume CLI commands beyond generation: login and account, health and doctor checks, schema discovery, jobs, assets, batch helpers, skills, and aliases.

When the Sume CLI is not working, run four read-only checks, then fix the cause: a missing key, a wrong API base, an unfinished job, or a rejected media URL.

GET /v1/videos/models lists every Sume video model with its resolutions, aspect ratios, durations, frame and reference types, audio flag, and pricing SKUs.

Poll GET /v1/jobs/{id}/status until terminal is true, wait next_poll_after_seconds between reads, then fetch /result once result_ready is true.

Sume's submit modes are async, sync, subscribe, and webhook. sync and subscribe wait 30 s at most, so for video, submit async and poll, or take a webhook.

Install @sume-com/sdk, create one client with createSumeClient, and call typed operations that return errors instead of throwing, with retries built in.

A failed Sume job carries a public error: category, stage, retryable, public_reason, and next_action. Where to read it, and what each field tells you to do.

waitForJob, waitForRun, and subscribeFormatRun poll a Sume job or run until it ends. Here are their default timeouts, the errors they throw, and retries.

GET /v1/jobs lists a workspace's jobs newest first, up to 100 per page, filtered by status, type, or run_id. Page with starting_after; join on idempotency_key.

GET /v1/catalog lists Sume API capabilities with their model ids, invoke URLs, availability, runtime readiness, and pricing. It needs no API key.

Download the Sume API's live OpenAPI spec from api.sume.com/reference/json, browse it in Swagger UI, and generate a client for languages beyond TypeScript.

A Sume job is one generation request tracked at /v1/jobs; a run is one agent turn from a Format, schedule, or Agent Completion. Ids, webhooks, and waits differ.

When a Sume webhook does not arrive, read webhook_delivery on the job or run, prove your endpoint with a test delivery, then redeliver the real event.

Sume's docs put one video job at 30 seconds to several minutes and a long-form Format run at 15 to 30 minutes. Here are the phases, stall signs, and limits.

Sume has no SSE or WebSocket progress stream. Poll job events or a Format run's phase timeline, show avatar scene stills, and promise no ETA.

A Sume generation job cancels only before generation starts; Format, Action, and Agent run cancels are idempotent. Routes, responses, billing, webhooks.

A Sume sync submit waits 30 s at most and SDK waits default to 10–20 minutes, but a client timeout never cancels the job. Every limit, and your own deadline.

Why POST /v1/videos answers 400: invalid_request, unsupported_parameter for size, seed, or provider.options, and unsupported_capability. Causes and fixes.

Store the job or run id, dedupe webhooks on job_id or the run envelope's request_id, and quote the req_ request id with the job or run id to Sume support.

Create a Sume API key, send one POST /v1/videos request with sume/auto, poll the job, and download the video. Five short steps, then where to go next.

Sume's developer dashboard, page by page: create API keys, buy credits on Billing & subscription, inspect Jobs and Usage, and try Avatar in the playground.

An idempotency key makes a retried create return the original run or job instead of a second paid one. How Sume's Idempotency-Key works on each API.

An unattended agent has no one to approve spend, so Sume caps generation per run: required on Agent Completions, and up to $500 on Format runs.

Sume generation requests take media as public HTTPS URLs in named fields, with no separate upload step, and return Sume-hosted media.sume.com URLs to store.

Install the Sume CLI, sign in through the browser, and submit talking avatar videos. Image, Video, and Music 1.0 have no CLI submit command yet.

A Sume API key is a workspace-scoped secret sent as Bearer or x-api-key, never both. Scopes are fixed at creation, and a key works only on its own host.

Sume accepts valid paid jobs as queued and runs them under a plan concurrency limit. A submit fails with 429 queue_full only when the queue is also full.

Sume API errors share one envelope with a stable code and a request id. Reads and writes have separate per-minute budgets; queue_full is not a rate limit.

Sume sends one HMAC-SHA256 signed POST when a Format, Action, or Agent Completion run completes or fails. Verify the raw body and dedupe on request_id.

MCP servers that let Claude Code and Cursor make video and images: Sume, fal, Replicate, Runway, Higgsfield. Endpoints, sign-in, billing, setup.