Free. Create a new AwesomeVideo API key, no sign-in. Works without a key; returns the token once (send it as Authorization: Bearer <token>). 0 paid credits; paid tools return 402 with a checkoutUrl ($5 = 500 credits, 1 credit = 1 cent). Free trial while it runs: 10 welcomeCredits (pay only caption_video and transcribe, jobs up to 2 min, valid 30 days), fair-shared: one per network and per network operator per day, released in slots through the day, and only with a solved proof-of-work. Without challenge+nonce you get the key with welcomeCreditsReason pow_required and a welcomeChallenge: find an integer nonce so SHA-256(challenge + ":" + nonce) starts with `bits` zero bits (about 1-3 s; python and javascript solvers included), then call create_key again with {challenge, nonce} on the connection that sends your new key: it claims the credits for that key (no second key). welcomeCreditsReason tells why when 0 (slot_wait has nextSlotAt). The result has firstJob: next call caption_video with a public sourceUrl.
Parametersnamenoncechallenge
import_url
Import from URL
Free. Download a public video or audio link into AwesomeVideo and get a fileId (same as upload {action:'start'}), without downloading it yourself. Accepts direct https/http file links (chat attachment URLs, CDNs, S3 presigned URLs), Google Drive share links (large-file confirm page handled), Dropbox share links, and OneDrive links. Up to 2048 MB when the host sends Content-Length (streamed to storage), 80 MB otherwise (422 limit_exceeded, charged:false). YouTube, TikTok, and Instagram links are refused with 422: upload the file instead. Private, local, and non-standard-port addresses are blocked. Up to 30 per hour. caption_video accepts sourceUrl directly, so you only need this to reuse one file across several tools.
Parametersurlrequiredfilename
caption_video
Caption video (one call)
PREFER THIS for 'add/burn subtitles to this video'. One call: transcribe, optional translate (translateTo), burn; returns the MP4 plus SRT, VTT and JSON transcript. Source: sourceUrl (public link, Drive, Dropbox; not YouTube) or fileId from upload/import_url. Price: 5 credits per audio minute, 7 with translateTo (1 credit = 1 cent); failures refund. Waits up to waitSeconds (max 50), then returns the job to poll with get_job (or use webhookUrl/notifyEmail). review:true sends a reviewUrl and charges the burn only on approval. To edit text yourself: transcribe, edit_transcript, burn_captions.
ParameterswaitfileIdpresetreviewautoFitglossarylanguageplatformfaceAvoidsourceUrlmaxCreditswebhookUrl+11 more
Transcribe speech in a video or audio file to captions with Workers AI Whisper (large-v3-turbo); returns SRT, VTT or JSON with word timestamps (format). Paid: 1 credit per audio minute (1 credit = 1 cent); a short balance gets 402 insufficient_balance (requiredCents, balanceCents, checkoutUrl) and no job starts. Use it when you only need the text or want to edit it before burning (then edit_transcript -> burn_captions). For burned-in subtitles in one call use caption_video; for highlights use create_clips. Audio is extracted to 16 kHz mono (video frames are not decoded). Language defaults to auto-detect; the saved glossary is applied. Results are cached per key, language, format and duration; another key cannot read them.
ParametersfileIdformatglossarylanguagemediaUrlmaxCreditswebhookUrlnotifyEmaildurationSecondsuseSavedGlossary
edit_transcript
Edit transcript
Replace the cues of a finished transcription (from transcribe or caption_video) with corrected text or timing, without transcribing again. Free; needs the key that owns the job. Pass cues [{start, end, text}] in seconds or subtitles (SRT, VTT or JSON); the old cues are overwritten. A later burn_captions, translate or remove_silences with this transcriptionJobId uses the edited cues and pays only its own step. To fix spellings for every future job use update_glossary {action:'save'} instead. Returns the job with the new SRT, VTT and JSON URLs.
ParameterscuesjobIdrequiredsubtitles
Caption a whole folder: run one operation on 1-50 videos in one call, priced together. operation caption = transcribe + burn per item, same output and price as caption_video (5 credits/min); transcribe 1/min; burn 4/min (needs subtitles or transcriptionJobId). One preset for all (an item's own preset or styleOverrides wins). dryRun:true returns the total and starts nothing. Missing media, 402 insufficient_balance or maxCredits reject the whole batch before any charge. Returns id, counts and jobs (paginated: offset/limit); poll get_job per item. For one video use caption_video.
ParametersitemsrequireddryRunpresetoperationrequiredmaxCredits
translate
Translate subtitles
Translate existing captions (subtitles or transcriptionJobId) into another language with Workers AI m2m100, keeping cue timing; returns SRT, VTT and JSON. Paid: 2 credits per minute; burn: true also burns the translation into the video (+4 credits/min; needs mediaUrl or fileId and a preset). Word-level highlight timing is not kept. To transcribe, translate and burn in one call use caption_video with translateTo; for a spoken (voice) translation use dub. Saved do-not-translate glossary terms are kept as is. 402 insufficient_balance with checkoutUrl when short; failed jobs refund.
ParametersburnfileIdpresetmediaUrlfaceAvoidsubtitlesmaxCreditshighlightColorhighlightWordssourceLanguagestyleOverridestargetLanguagerequired+1 more
dub
Dub video into another language
Dub a video into targetLanguage: transcribes, translates, voices each line fitted to the original timing, and mixes it over the original audio (ducked by default, or muted); returns an MP4 plus target-language SRT/VTT/JSON (audioTrack:true adds an M4A). Price per target language: 5 credits per source minute (voiceTier basic) or 12 (standard), plus transcription 1/min and translation 2/min unless you reuse transcriptionJobId/subtitles and translationJobId/translatedSubtitles. Voices: get_catalog kind voices. Unsupported languages fail before charging. No voice cloning or lip sync.
ParametersvoicefileIdmediaUrlsubtitlesvoiceTieraudioTrackmaxCreditssourceLanguagetargetLanguagerequiredtranslationJobIdkeepOriginalAudiotranscriptionJobId+1 more
generate_metadata
Titles, description, hashtags and chapters
Write publishing metadata from what is said: title options (titleCount, default 5), description, hashtags and YouTube chapters with timestamps, per platform (youtube default, shorts, tiktok, instagram). Pass transcriptionJobId or subtitles (1 credit per platform), or only media (adds 1 credit per minute to transcribe). Written in the video's language unless language is set; context adds creator notes. Waits ~40 s, else poll get_job. Result: platforms.<platform>.{titles, description, hashtags, chapters}.
ParametersfileIdcontextlanguagemediaUrlplatformsquoteOnlysubtitlesmaxCreditstitleCountdurationSecondstranscriptionJobId
remove_silences
Remove silences and filler words
Cut silences and filler words (uh, um, este...) from a talking video. Needs a transcript (transcriptionJobId or subtitles) plus the media. Returns the cut MP4, retimed SRT/VTT/JSON and stats (kept and removed seconds, cuts). silenceGapSeconds and paddingSeconds tune cuts; fillerMode clear (default) or aggressive (also like, you know, o sea...); removeFillers:false keeps fillers. burnCaptions:true also burns the retimed captions. Price: 3 credits per kept minute, +4 with burnCaptions; quoteOnly:true prices it free. For highlights use create_clips.
ParametersfileIdpresetautoFitfillersmediaUrlplatformfaceAvoidquoteOnlysubtitlesfillerModemaxCreditskeepFillers+12 more
request_review
Request human review before burning
Free. Use when a person wants to check the captions before they are burned (names, slang, brand words). Pass a finished transcriptionJobId and the preset or brandPresetId. Returns reviewUrl: a private web editor link (no login, up to 7 days) where they fix text and timing and press Approve or Reject. Only on Approve does the burn run and charge (4 credits per minute). Follow with get_review, or webhookUrl / notifyEmail for review.approved, review.rejected and review.expired events.
ParameterspresetautoFitcombinedplatformfaceAvoidmaxCreditswebhookUrlnotifyEmailinstructionsbrandPresetIdexpiresInDayshighlightColor+3 more
Check a human review created by request_review: awaiting_review, approved (with burnJobId and, when finished, the burned video URL), rejected (note says why; nothing charged), or expired. Free, read-only; needs the key that created it. Poll it after sharing reviewUrl; once burnJobId exists you can also poll get_job for that burn.
ParametersreviewIdrequired
get_glossary
Get saved glossary
Read the saved transcription glossary of this account (or key): correct spellings with their aliases (what speech-to-text writes instead) and do-not-translate terms. Free, read-only; needs a key. Every transcribe and translate applies it automatically, so read it to check why a word came out as it did. Change it with update_glossary {action:'save'} or update_glossary {action:'delete'}.
Takes no parameters.
Read any job. Includes status, step (queued, transcribe, translate, burn, finalize, done, failed), progress (0-100, burn uses real ffmpeg progress), eta_seconds and estimatedCompletionAt (from media length x rolling per-step averages), pollAfterSeconds (wait that long before the next poll), cost, and an expiring result URL when the job succeeded. A batch id returns the batch view (counts and item jobs). A failed caption job with resumable:true can be restarted with resume_job.
ParametersjobIdrequired
List recent jobs (transcribe, burn, caption_video, clips, dub, trim...) newest first for this key, or for every key on the account when the key is claimed: id, kind, status, created time, credits charged, and a download URL while the result is still stored. Free, read-only; needs a key. Paginated: limit (default 50, max 100) and cursor = nextCursor from the previous page. For one job's full status, progress and files use get_job; for credit totals per day use get_account.
Parameterslimitcursor
resume_job
Resume a failed caption job
Continue a failed job (caption_video, transcribe, create_clips, dub, remove_silences, generate_metadata) from where it stopped instead of starting over. Reuses saved transcription chunks and finished steps, so you pay only what is left (often just the burn); the failed job stays refunded. Idempotent: repeating returns the same resumed job, never a second charge. Returns a new job id to poll with get_job. 422 resume_not_supported or resume_media_expired: call the original tool again. 409 job_not_resumable (no_speech): nothing to resume.
ParametersjobIdrequiredmaxCreditswebhookUrlnotifyEmail
Free. Put your own video or audio file into AwesomeVideo and get a fileId for caption_video, transcribe, burn_captions, create_clips, remove_silences or preview. action start: one single-use PUT URL (valid 15 min, files up to 80 MB); start_multipart: parts[] of PUT URLs for files over 80 MB (up to 2048 MB / 3 h) or flaky connections; status: missingParts of a multipart upload; complete: finish a multipart upload after every part is PUT; abort: cancel an unfinished multipart upload (deletes its parts); inline: send a clip of up to 10 MB as base64 in one call. For a public link use import_url instead. Up to 30 uploads per hour.
ParametersdataactionrequiredfileIdfilenamesizeBytescontentTypepartSizeBytes
burn_captions
Burn captions into a video
Burn existing captions (subtitles or transcriptionJobId) into a video with a preset or brandPresetId. mode server (default): renders the MP4 on our servers, 4 credits per audio minute (1 credit = 1 cent), 402 insufficient_balance with checkoutUrl when short. mode client_script: free, returns an ASS script and resolved style to burn in your own player or browser; nothing runs or is charged. platform keeps captions inside that app's safe zone at the same price ('subtítulos para TikTok' -> platform=tiktok). For video in, video out in one call use caption_video.
ParametersmodewidthfileIdheightpresetautoFitcombinedmediaUrlplatformpresetIdfaceAvoidsubtitles+11 more
get_catalog
Read the AwesomeVideo catalog
Free, read-only, works without a key. Everything you can choose from, by kind: presets (built-in, approved community and, with a key, your custom presets, plus bundled fonts), styles (every caption style field with type, range and examples), voices (dub voices with tier, price and sampleUrl; filter with language and tier), platforms (where videos are posted, with safe zones), audio_visuals (the ten editorial podcast designs for audio-only input). Paginated with limit and cursor; response_format concise (default) drops nested objects such as full style JSON, detailed returns them. Pass ids you find here as preset, voice, platform or audioVisual to the job tools.
Parameterskindrequiredtierlimitcursorlanguageresponse_format
estimate
Estimate price and limits (free)
Free, never charges, works without a key. Without steps: the credits one operation would cost (operation caption, transcribe, burn, preview, translate, shorts, trim, dub or preview {mode:'sample'}) from durationSeconds, or from mediaUrl/fileId with a key. With steps: prices a whole pipeline of 1-10 steps, checks every limit before you pay (limitViolations with a fix for each), suggests free alternatives and, with a key, says whether the balance covers it. 1 credit = 1 cent. Call it before any paid tool when the cost matters.
ParametersstepsfileIdsourcemediaUrloperationvoiceTiertranslateTohasTranscripthasTranslationtargetLanguagedurationSeconds
preview
Preview captions on the video
See captions on the real video before paying for a burn. mode sample: FREE contact sheet comparing up to 12 presets on real frames (no transcription, 30 sheets/hour); returns sheetUrl, per-preset frames and captionVideoArgs to pass to caption_video. mode still (default): one preset as a PNG exactly as burn_captions draws it; mode clip: an MP4 of up to 5 s. still and clip cost at most 1 credit flat and need captions (subtitles or transcriptionJobId). Media: mediaUrl/sourceUrl or fileId.
ParametersmodetextfileIdpresetautoFitpresetsfullTextlanguagemediaUrlplatformpresetIdatSeconds+12 more
get_presets
Read your saved presets
Free, read-only, needs a key. action list (default) returns only YOUR saved presets, not the 34 built-in ones: to browse built-in, community and your presets together use get_catalog kind presets (an empty list here just means you saved none). type custom (full caption styles from manage_preset, ids custom:cp_...) or brand (font, color, position and logo overlays); paginated with limit and cursor, response_format concise (default) or detailed. action get: any one preset with its full style by id, built-in (e.g. builtin:number-punch or number-punch), community or custom:cp_..., the same style JSON the web editor loads (use it as basePreset or copy and tweak it with manage_preset). action validate: check a style document (style, or basePreset + overrides) against the renderer schema before saving; returns valid, the normalized style or errors [{path, message}]. Built-in and community presets are listed by get_catalog kind presets.
ParametersidtypelimitstyleactioncursoroverridesbasePresetresponse_format
manage_preset
Create, change, delete or publish a preset
Free, needs a key. Saves your own looks for reuse. action create: type custom saves a full caption style (name + style, or basePreset + overrides; returns id custom:cp_...); type brand saves a font/color/position/logo overlay (returns brandPresetId). action update: changes a custom preset in place (overwrites). action delete: permanently removes a custom or brand preset by id. action submit: proposes a custom preset for the public community gallery (moderated; visible to everyone once approved). Check a style first with get_presets action validate.
ParametersidnametagstypecolorstyleactionrequiredauthorpositionoverridesbasePresetfontFamily+3 more
create_clips
Long video to short clips
PREFER THIS for 'turn this long video/podcast into shorts/clips'. engine highlights (default): transcribes (or reuses transcriptionJobId/subtitles), an LLM picks the count (default 3, max 10) best self-contained moments of minSeconds-maxSeconds, renders each MP4 (reframe face, center or none) with captions, and returns clips with title, hook, score and url. Price: 1 credit per source minute to transcribe (0 with a transcript) + 1 per 10 source minutes + 3 per output minute; quoteOnly:true prices it free. engine shorts: quick 1-5 vertical 9:16 cuts from an existing transcript, 6 credits per source minute. Long jobs: poll get_job.
ParameterswaitcountenginefileIdpresetautoFitreframecaptionsglossarylanguagemediaUrlplatform+17 more
update_glossary
Save or delete glossary terms
Free, needs a key. Changes the saved transcription glossary that every later transcription of this account uses (brand names, people, slang spellings, doNotTranslate terms). action save: entries [{term, aliases?, doNotTranslate?}] merged by term (mode merge, default) or replacing the whole glossary (mode replace). action delete: remove terms, or all:true to clear it. Returns the glossary after the change. Read it with get_glossary.
Parametersallmodetermsactionrequiredentries
create_checkout
Buy credits
Free to call; returns a checkout URL your human opens to pay. Without product: $5 = 500 credits for this exact key, works on unclaimed self-serve keys. With product (key claimed at https://awesomevideoeditor.com/account): pack_5 $5=500, pack_20 $20=2,200, pack_50 $50=6,000 credits; plans creator $9/mo=1,200, pro $29/mo=4,500, scale $99/mo=18,000 credits/month (interval year = 10x monthly). 1 credit = 1 cent. Credits arrive after payment; then retry the call that returned 402.
Parametersproductinterval
get_account
Get balance and usage
Free, read-only, needs a key. This key's spendable balance (balanceCents in credits, 1 credit = 1 cent, and as transcription seconds), the per-minute prices, and credit usage over a range (usage: per day and total, split into transcription and server burn; default the last 30 days; from and to in unix ms). response_format concise (default) returns usage totals only; detailed adds the per-day rows. Call it before a paid job or after a 402; top up with create_checkout; individual jobs are in list_jobs.
Parameterstofromresponse_format