Capabilities

Every capability id, what it takes and what it gives back.

Read as Markdown

Every thing RiffAds can make, by capability_id. Send that id to REST, MCP or the CLI. Same id, same fields everywhere.

This page is the map. The live list for your workspace is the truth: read it with GET /capabilities, list_capabilities (MCP) or riffads capabilities (CLI).

Read the live list first

Terminal
curl -s https://app.riffads.com/api/v1/capabilities \
  -H "Authorization: Bearer $RIFFADS_API_KEY"

# one capability: its config_schema plus a valid example_config
curl -s https://app.riffads.com/api/v1/capabilities/veo_31 \
  -H "Authorization: Bearer $RIFFADS_API_KEY"
statusMeans
availableLive. Estimate and submit.
requires_planYour plan does not include it. required_plan names the plan that does.
coming_soonListed, not live. Estimates and submits are refused.

Config is strict

Unknown keys in config are refused with invalid_config, never ignored. Read config_schema before your first submit. A workspace may see fewer options than listed here.

  • capability_id is a plain string, not an enum. New ids appear with no deploy. Don't hardcode the list.
  • category is avatar, video, image, tool or preset.
  • output_kind is image, video, audio or text. Category is not output: auto_caption is a tool that outputs video.
  • Media slots take asset ids (ast_ plus 32 hex chars) from uploads, always as an array, even for one file.
  • Every capability ends in a signed file link (or text). Nothing posts anywhere.

Talking actor

actor_ultra: an actor speaks your script. Category avatar, output video.

FieldRequiredNotes
scriptscript or recordingUp to 1500 characters.
voiceIdnoFalls back to the actor's default voice.
voice_audioscript or recordingYour own recording instead of a script. Up to 60 s. MP3, WAV, OGG, WEBM.
resolutionno720p only.
  • actor_id (or actor_image_asset_id), voice_id and approved_voice_generation_id are top-level submit fields, not config keys.
  • Script road: run tts first, wait, then actor_ultra with approved_voice_generation_id. Recording road: fill voice_audio, no tts needed.
  • No aspect_ratio: refused. Shape follows the actor image.
  • No variants: refused. No captions switch: run auto_caption after.
  • The id is actor_ultra. talking_actor is not an id.

Full flow: Talking actor ads.

Video models

One prompt, one generation, one video.

idNameFrames and referencesAspect ratioDuration (s)ResolutionAudio toggle
veo_31Veo 3.1up to 3 reference images, or start plus end frameauto, 16:9, 9:164 to 8, step 2720p, 1080p, 4kyes
kling_v3Kling V3start, end frame9:16, 16:9, 1:13 to 15720p, 1080pyes
kling_3_standardKling 3 Standardstart, end frame, elements16:9, 9:16, 1:13 to 15set by tieryes
kling_3_proKling 3 Prosame as Standardsame3 to 15set by tieryes
kling_3_4kKling 3 4Ksame as Standardsame3 to 15set by tieryes
omni_flashOmni Flashup to 10 reference images, or one source video16:9, 9:163 to 10not publishedno, always has sound
seedance_15_proSeedance 1.5 Prostart, end frame9:16, 16:9, 1:14 to 12720p, 1080pyes
sora_2Sora 2start frame only9:16, 16:94 to 20, step 4720p, 1080pno
h3_maxMiniMax H3 Maxstart, end frame21:9, 16:9, 4:3, 1:1, 3:4, 9:165 to 15480p, 768pno
seedance_2Seedance 2 (coming_soon)reference images, videos, audio, plus framessix ratios, 21:9 to 9:164 to 15720p, 1080pyes

All take prompt (required, 8000 chars, Kling 3: 2500), count and prompt_enhancer (off by default).

Slot rules, checked before anything runs:

  • end_frame needs start_frame: Kling V3, Kling 3, Seedance 1.5 Pro, H3 Max.
  • Veo 3.1: no references mixed with frames. A start frame alone is refused: send both.
  • Omni Flash: references or a source video, not both.
  • Seedance 2: max 12 reference files. Reference audio needs a reference image or video. Reference video 2 to 15 s combined. Reference audio max 15 s combined.
  • Kling 3 elements: up to 4, max one with a video, needs a start frame.
  • A start frame or reference can narrow valid aspect_ratio, resolution and duration. The schema enums show the union. The estimate endpoint checks the exact config.

Image models

idNameShape controlQualityMax reference images
nb_proNano Banana Proaspect_ratio (auto, 21:9 to 9:16), resolution 1K, 2K, 4Knone6
nb_2Nano Banana 2aspect_ratio (auto, 8:1 to 1:8), resolution 1K, 2K, 4Knone6, plus one context video and one context audio (15 MB each)
gpt_image_15GPT Image 1.5image_size: auto, 1536x1024, 1024x1024, 1024x1536low, medium, high2
gpt_image_2GPT Image 2image_size, published listfixed16
gpt_image_25_sunburstGPT Image 2.5 Sunburstimage_size: 1024x768, 1024x1024, 1024x1536, 2560x1440, 3840x2160low, medium, high, max2
gpt_image_25_flareGPT Image 2.5 Flaresame as Sunburstsame as Sunburst2
seedream_45Seedream 4.5image_sizenone10
seedream_5_liteSeedream 5 Liteimage_sizenone4
seedream_5_proSeedream 5 Proimage_sizenone4
grok_imageGrok Imageaspect_ratio (20:9 to 9:20)none3
grok_image_qualityGrok Image Qualitysame aspects, resolution 1k, 2knone3
  • image_size or aspect_ratio, never both. The schema says which.
  • Up to 4 outputs per request over the API. GPT Image 2 publishes count up to 10: anything above 4 is clamped to 4 with a message.
  • Seedream 4.5 with references: output count is clamped to the number of references.

Audio and text

idNameOutputFields and limits
ttsText to Speechaudioscript (up to 1500 chars), optional voiceId.
create_musicCreate Musicaudioprompt (1 to 2000 chars), duration 1 to 300 s (default 60), force_instrumental (default true), lyrics (up to 3000 chars, needed unless instrumental).
speech_to_speechSpeech to Speechaudiosource_audio up to 120 s, plus voiceId.
transcribeTranscribetextsource_media: one video or recording. No speech: refused.
script_llmAI Writertextinstructions (12000 chars), context (optional, 6000), reference_image (up to 4), model_class fast, balanced, smart (default fast), max_output_length 100 to 1500 (default 600, output cut at that length).

Editing and media tools

Start from a file, not a prompt. One generation, one output, except split_scenes.

idTakesGives backHard limit
auto_captionsource_videosame clip, captions burned in600 s
text_overlaysource_media (photo or video)same file with a headlinevideo 600 s, text 300 chars
trim_videosource_videoone section600 s
stitchvideos: 2 to 10 clipsone video, in array order120 s combined
split_scenessource_videoup to 10 clips600 s, scenes at least 0.5 s
merge_layersbackground plus layers (up to 6)one composited videobackground 120 s
extract_framesource_videoone PNGtimestamp 0 to 600 s
extract_audiosource_videoone 192 kbps MP3600 s, silent video refused
change_speedsource_media (video or audio)0.25x to 4x, pitch kept600 s
change_voicesource_video plus voiceIdsame words, new speaker120 s
resizesource_media (photo or video)reframed filevideo 120 s
upscalesource_media (photo or video)higher resolutionvideo 30 s
remove_backgroundsource_media (photo or video)subject, no backgroundunreadable video length refused
skin_enhancesource_image (portrait)cleaned-up copyone photo
camera_anglesource_imagesame scene, new camera positionno prompt

In-house tools take input files up to 500 MB. An input over a limit is refused before anything runs.

Tool settings

idSettings (default)
auto_captioncaption_style: punch, impact, boxed, word_pop, clean, marker, handwritten, terminal (punch). caption_position: auto, top, center, bottom (auto).
text_overlaytext (1 to 300 chars, required). text_align: left, center, right (center). position: top, center, bottom (top). start seconds (0). duration 0.1 to 600 (3). font: insta, tiktok (insta). background: none, dark, white (none). text_size: default, custom (default). text_size_px 8 to 400 (64, only with custom). start and duration are ignored for photos.
trim_videostart seconds (0). length 0.1 to 600 (5).
split_scenesmode: auto finds cuts, manual splits equally (auto). threshold 1 to 90, lower means more scenes, auto only (17). scene_count 2 to 10, max in auto, exact in manual (6).
extract_frametimestamp 0 to 600, step 0.1. Past the end returns the last frame.
change_speedspeed 0.25 to 4, step 0.05 (1).
resizeaspect_ratio: 9:16 (1080x1920), 4:5 (1080x1350), 1:1 (1080x1080), 16:9 (1920x1080) (9:16). mode: fit (bars), crop (fill), smart (model extends the picture, images only) (fit).
camera_anglehorizontal: front, left_45, right_45, left_profile, right_profile, behind (front). vertical: eye_level, low, high, overhead (eye_level). zoom: keep, wide, medium, close_up (keep).

stitch, merge_layers, extract_audio, upscale, remove_background and skin_enhance have no settings beyond their files.

Chain tools by feeding one output's asset id into the next input slot.

Presets

Pick a template, add one file. Several steps run behind it.

idNameTakesNotes
preset_fashion_tryonFashion Try Ontemplate plus one clothes photo5 or 10 s, audio toggle, up to 4 variants
preset_show_your_appShow Your Apptemplate plus one app screenshotalways 5 s, no duration or audio field, up to 4 variants

Presets use the preset_ prefix and can launch with no deploy. The live list is the only full inventory.

Variants

Send top-level variants on submit to get N takes of one config.

  • Max 4. Maps to the capability's count field and wins over a count inside config.
  • No count field on the capability (talking actor included): variants is refused.
  • The response has generation_ids and a batch_group_id. Read all takes with GET /batches/{batch_group_id} or get_batch. Watch every id, not just the first.

Refusals for an id

capability_statuscodeHTTPMeaning
coming_sooncapability_unavailable404Listed, not live yet
retiredcapability_unavailable404Withdrawn. Old generations still read fine
requires_planrequired_plan403Plan does not include it. Carries required_plan
unknowncapability_unavailable404Never existed or misspelled

None are retryable. Re-read the list and pick an available row. All codes: Errors.

On this page