Documentation
FRANKLAB API

Utilities and montage

Video, image and audio processing, subtitles, SEO and Content Credentials through the API.

Open .md
Open in AI

Work with an AI assistant

Shares the current documentation without your keys. Long sections are copied in full for you to paste into chat.

Cursor and Claude Code accept short prompts in links. For long sections, ChatGPT and Antigravity, paste the copied documentation manually.

Ask support

Nine modules: C2PA Signer Profiles, FORSAJ, HOLST, INDEXLIFT, KLEY, OVERLAY, PLASTINKA, SPEKTR and SUFLER. Contracts were checked against source on 8 September 2026; access depends on your account and the selected operation.

Connection and upload

Keep your API key in the FRANKLAB_KEY environment variable. Examples use origin https://apergrex.ru; all paths below already include /franklab/api. The repeated franklab in /franklab/api/franklab/jobs is required. SPEKTR/Recraft uses X-API-Key; other examples use Authorization: Bearer. Do not supply partnerId.

bash
export FRANKLAB_ORIGIN="https://apergrex.ru"
# FRANKLAB_KEY is supplied by your secret manager
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/upload" \
  -H "Authorization: Bearer $FRANKLAB_KEY" \
  -F "file=@synthetic.mp4;type=video/mp4"

Use upload response data.url to replace https://example.com/synthetic.* in examples; those URLs are placeholders, not downloadable media. Maximum 150 MiB, source retention 7 days. MIME: video/mp4, video/webm, video/quicktime, video/x-msvideo; audio/mpeg, audio/mp3, audio/wav, audio/ogg, audio/pcm, audio/l16, audio/x-pcm; image/png, image/jpeg, image/gif, image/webp. Upload does not convert formats. URLs must be server-accessible; private/local URLs and prohibited redirects are rejected. Save completed outputs before expiresAt when provided.

Connection check: GET /franklab/api/franklab/integrations/text-sticker/auth/stats with an API key. SPEKTR Make reads GET /franklab/api/v1/images/omni-image?pageNum=1&pageSize=1. This reads history/checks authentication; it does not test generation.

Status, output and billing

A successful submission returns HTTP 200 and success:true, which does not mean the output is ready. Store data.taskId; poll the matching route every 5 seconds until data.status=completed or failed. queued and processing are non-terminal. Set a finite deadline; resume reading the existing ID after a timeout. Do not automatically repeat POST after an ambiguous network error.

FamilyPollingOutput / error
FORSAJ, HOLST, KLEY, PLASTINKA, SUFLER, SPEKTR jobsGET /franklab/api/franklab/jobs/{taskId}data.downloadUrl, metadata; data.error
OVERLAYGET /franklab/api/make/jobs/{taskId}data.result.downloadUrl; data.error / data.result.error
INDEXLIFT asyncGET /franklab/api/franklab/jobs/audit-landing/async/{taskId}data.result.data.seo_report, data.result.data.brief_suggestions, data.phase, data.error_message
SPEKTR RecraftGET /franklab/api/v1/recraft/record-info?taskId=...data.state, parse data.resultJsonresultUrls[]; data.failMsg
C2PA, sample resourcesNo task pollingdata profile/sample

Jobs expose final_cost_franks, cost_currency=FRANK, cost_status and cost_unit. With cost_status=reserved, the amount is reserved; final is settled, refunded is refunded, and unavailable means no reliable price. Frank is an internal accounting unit, not a currency. A missing field does not mean zero cost. The server checks tariff and capability access. No separate generic utility REST estimate is confirmed; Studio estimate is not a universal utility quote. C2PA list is free in source; profile mutations may be billed. Recraft passthrough and synchronous INDEXLIFT do not establish this settlement contract.

HTTP 400 usually means invalid parameters or combinations; 401 means authentication; 404 means missing resource; 429 means rate limiting. For 5xx/provider errors, reconcile the existing task before resubmission. success:true with data.status=failed is still failure. Diagnostic operations may return metadataReport/metrics/qcReport without a file; availability is qualified separately.

Content Credentials (C2PA)

Supporting jobs accept c2paSigningMode=off|franklab|user_profile, c2paSignerProfileId for user_profile, and contentOrigin=not_declared|human_edited|ai_assisted|ai_generated|human_created|camera_captured. Optional strings: humanAuthorName, humanAuthorUrl, reviewedBy, reviewedAt, reviewMethod, c2paActionDescription, c2paDisclosure. sourceMaterialUrls and originalEvidenceUrls each allow up to 10 public HTTPS URLs. Restricted human_created/camera_captured claims require an active permitting profile and evidence. Request verifiedIncomingC2paIngredient is not proof: the server verifies the result. Signing is separate from trusted-chain validation: inspect c2paStatus, c2paSigned, c2paCryptographicallyValid, c2paTrustedChainValid, c2paCawgIdentityPresent, c2paPublicVerifierRecognized, c2paManifestUrl and c2paVerificationReport. OVERLAY make/jobs DTO does not declare C2PA fields.

C2PA Signer Profiles

Listing returns active partner profiles without PEM secrets. Creation and rotation take your certificate/key; generate_self_signed creates a self-signed profile. trustLevel=trusted is rejected here. Rotation creates a new version; keep profile IDs distinct. Revocation changes profile validity. No credential mutation was tested.

Operations and minimal JSON requests

Each example below is the complete JSON for its POST; replace URLs/IDs with your own. Operation/mode selectors choose functions, not generation models. “source” means source-checked without live/E2E; “blocked” marks a known limitation.

OperationHTTP and pathMinimal JSON / status
listGET /franklab/api/make/c2pa/signer-profiles{} source
generate_self_signedPOST /franklab/api/make/c2pa/signer-profiles{"action":"generate_self_signed","label":"My signing profile"} source
create_from_pemPOST /franklab/api/make/c2pa/signer-profiles{"action":"create_from_pem","label":"My signing profile","certificateChainPem":"<YOUR_CERTIFICATE_CHAIN_PEM>","privateKeyPem":"<YOUR_PRIVATE_KEY_PEM>"} source
rotate_from_pemPOST /franklab/api/make/c2pa/signer-profiles/{profileId}/rotate{"label":"My signing profile","certificateChainPem":"<YOUR_CERTIFICATE_CHAIN_PEM>","privateKeyPem":"<YOUR_PRIVATE_KEY_PEM>"} source
revokePOST /franklab/api/make/c2pa/signer-profiles/{profileId}/revoke{} source
lookup_signer-profilesGET /franklab/api/make/c2pa/signer-profilessource
check_connectionGET /franklab/api/franklab/integrations/text-sticker/auth/statssource
bash
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/make/c2pa/signer-profiles" \
  -H "Authorization: Bearer $FRANKLAB_KEY"

REST fields

Fields apply to the selected operation; required conditions and the minimal example define usage. [] denotes array items.

FieldTypeConditions and allowed values
actionstringrequired (generate_self_signed); Required input in this operation example; required (create_from_pem)
labelstringrequired (generate_self_signed); label; required (create_from_pem); required (rotate_from_pem)
allowRestrictedOriginClaimsbooleanallow Restricted Origin Claims; / true / false
certificateChainPemstringrequired (create_from_pem); certificate Chain Pem; required (rotate_from_pem)
privateKeyPemstringrequired (create_from_pem); private Key Pem; required (rotate_from_pem)
profileIdstringrequired (rotate_from_pem); Path parameter: owned active signer profile ID; required (revoke)

Make options and REST conversion

This is the Make selection reference; form names can differ from REST. Convert v1*/v2*, text* and sample* fields as described above. Nested conditions describe the Make form.

Form fieldWhenValues
actionlist / generate_self_signed / create_from_pem / rotate_from_pem / revoke
profileIdaction=rotate_from_pemrpc://getC2paSignerProfiles
allowRestrictedOriginClaimsaction=rotate_from_pem/ true / false
profileIdaction=revokerpc://getC2paSignerProfiles

Response and verification limits

HTTP 200 {success:true,data:PROFILE[]}; profileId,id,label,status,trustLevel,allowRestrictedOriginClaims,version,profileGroupId,createdAt,updatedAt,rotatedAt,revokedAt; no PEM returned.

For rotation REST accepts optional allowRestrictedOriginClaims; omission inherits the previous value. Current Make communication does not forward this control for rotate_from_pem.

FORSAJ

video_speed posts videoUrl and speed to jobs/video-speed. audio_speed puts the audio URL in videoUrl and sends operation=speed to jobs/audio. speed: 0.25–4. audioBitrate is a string from 8k to 320k; replace the Make custom choice with the actual bitrate. Do not send mode to REST. Video duration may describe the source; inspect the output media.

Operations and minimal JSON requests

Each example below is the complete JSON for its POST; replace URLs/IDs with your own. Operation/mode selectors choose functions, not generation models. “source” means source-checked without live/E2E; “blocked” marks a known limitation.

OperationHTTP and pathMinimal JSON / status
video_speedPOST /franklab/api/franklab/jobs/video-speed{"videoUrl":"https://example.com/synthetic.mp4","speed":1.1} source
audio_speedPOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","speed":1.1,"operation":"speed","audioBitrate":"64k"} source
get_taskGET /franklab/api/franklab/jobs/{taskId}source
upload_sourcePOST /franklab/api/franklab/jobs/uploadsource
check_connectionGET /franklab/api/franklab/integrations/text-sticker/auth/statssource
bash
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/video-speed" \
  -H "Authorization: Bearer $FRANKLAB_KEY" \
  -H "Content-Type: application/json" \
  --data '{"videoUrl":"https://example.com/synthetic.mp4","speed":1.1}'

REST fields

Fields apply to the selected operation; required conditions and the minimal example define usage. [] denotes array items.

FieldTypeConditions and allowed values
c2paSigningModestringoff / franklab / user_profile; c2pa Signing Mode
contentOriginstringfranklab or user_profile; restricted origins require permitting user_profile and evidence; not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured; content Origin
humanAuthorNamestringc2paSigningMode=franklab OR c2paSigningMode=user_profile; human Author Name
humanAuthorUrlstringc2paSigningMode=franklab OR c2paSigningMode=user_profile; human Author Url
reviewedBystringc2paSigningMode=franklab OR c2paSigningMode=user_profile; reviewed By
reviewedAtstringc2paSigningMode=franklab OR c2paSigningMode=user_profile; reviewed At
reviewMethodstringc2paSigningMode=franklab OR c2paSigningMode=user_profile; review Method
sourceMaterialUrlsarrayc2paSigningMode=franklab OR c2paSigningMode=user_profile; max items 10
originalEvidenceUrlsarrayc2paSigningMode=franklab OR c2paSigningMode=user_profile; max items 10
verifiedIncomingC2paIngredientbooleanc2paSigningMode=franklab OR c2paSigningMode=user_profile; verified Incoming C2pa Ingredient
c2paActionDescriptionstringc2paSigningMode=franklab OR c2paSigningMode=user_profile; c2pa Action Description
c2paDisclosurestringc2paSigningMode=franklab OR c2paSigningMode=user_profile; c2pa Disclosure
c2paSignerProfileIdstringrequired when c2paSigningMode=user_profile; rpc://getC2paSignerProfiles; c2pa Signer Profile Id
videoUrlstringrequired (video_speed); URL; required (audio_speed)
speednumberrequired (video_speed); min 0.25; max 4; required (audio_speed)
callbackUrlstringURL
audioBitratestring64k / 96k / 128k / 160k / 192k / 256k / 320k; 8k–320k string; custom is a Make control, not a REST value
operationstringrequired (audio_speed)
taskIdstringrequired (get_task); Path parameter: returned taskId, scoped to the same partner
filebinaryrequired (upload_source); multipart/form-data file; maximum 157286400 bytes

Make options and REST conversion

This is the Make selection reference; form names can differ from REST. Convert v1*/v2*, text* and sample* fields as described above. Nested conditions describe the Make form.

Form fieldWhenValues
modevideo_speed / audio_speed
audioBitratemode=audio_speed64k / 96k / 128k / 160k / 192k / 256k / 320k / custom
c2paSigningModeoff / franklab / user_profile
contentOriginc2paSigningMode=franklabnot_declared / human_edited / ai_assisted / ai_generated
c2paSignerProfileIdc2paSigningMode=user_profilerpc://getC2paSignerProfiles
contentOriginc2paSigningMode=user_profilenot_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured

Response and verification limits

HTTP 200 {success:true,data:{taskId,status,final_cost_franks,cost_currency,cost_status,cost_unit}}; poll the returned taskId.

HOLST

Supply imageUrl and either operation or steps (up to 20 entries, each with op). outputFormat: jpeg/jpg/png/webp/avif/gif; outputQuality: 1–100. The current top-level DTO strips several Make fields: watermarkPosition/Opacity/Scale, textPosition/fontSize/color/font, brightness/saturation/hue/contrast/gamma, imageUrls/columns/gap/background. For watermark, text, adjust and collage use steps with position/opacity/scale, content/fontSize/color, brightness and imageUrls/columns/gap respectively. Even ImageStepDto has no font: HOLST font selection is unverified. REST accepts removeBgProvider, alphaMatting, ocrLanguages, metadataEngine and includeGps, but Make communication omits their top-level mapping. OCR/remove_bg/strip_gps/read_metadata depend on worker capabilities; info/read_metadata may be blocked by required output-file inventory checks.

Operations and minimal JSON requests

Each example below is the complete JSON for its POST; replace URLs/IDs with your own. Operation/mode selectors choose functions, not generation models. “source” means source-checked without live/E2E; “blocked” marks a known limitation.

OperationHTTP and pathMinimal JSON / status
resizePOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","operation":"resize","width":64,"height":64} source
cropPOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","operation":"crop","aspectRatio":"1:1"} source
filterPOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","operation":"filter","filterPreset":"grayscale"} source
watermarkPOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","steps":[{"op":"watermark","imageUrl":"https://example.com/synthetic.png","position":"bottom-right","opacity":0.5,"scale":0.15}],"outputFormat":"png"} source
image_overlayPOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","operation":"image_overlay","overlayImageUrl":"https://example.com/synthetic.png","overlayScale":0.25} source
textPOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","steps":[{"op":"text","content":"Synthetic test","fontSize":24,"color":"#FFFFFF","position":"center"}],"outputFormat":"png"} source
rotatePOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","operation":"rotate","angle":90} source
flipPOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","operation":"flip"} source
flopPOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","operation":"flop"} source
blurPOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","operation":"blur","sigma":2} source
sharpenPOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","operation":"sharpen","sigma":1} source
infoPOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","operation":"info"} blocked
strip_metaPOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","operation":"strip_meta"} source
write_exifPOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","operation":"write_exif","imageDescription":"Synthetic test"} source
write_metadataPOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","operation":"write_metadata","metaTitle":"Synthetic test"} source
replace_metadataPOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","operation":"replace_metadata","metaTitle":"Synthetic test"} source
maskPOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","operation":"mask","shape":"rounded","radius":8} source
collagePOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","steps":[{"op":"collage","imageUrls":["https://example.com/synthetic.png","https://example.com/synthetic.png"],"columns":2,"gap":4}],"outputFormat":"png"} source
adjustPOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","steps":[{"op":"adjust","brightness":1.1}],"outputFormat":"png"} source
read_metadataPOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","operation":"read_metadata","metadataEngine":"exiftool"} blocked
remove_bgPOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","operation":"remove_bg","removeBgProvider":"local"} source
ocrPOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","operation":"ocr","ocrLanguages":"eng"} blocked
strip_gpsPOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","operation":"strip_gps"} source
pipelinePOST /franklab/api/franklab/jobs/image{"imageUrl":"https://example.com/synthetic.png","steps":[{"op":"resize","width":64,"height":64}],"outputFormat":"png"} source
lookup_image-presetsGET /franklab/api/franklab/integrations/text-sticker/image-presetssource
lookup_image-formatsGET /franklab/api/franklab/integrations/text-sticker/image-formatssource
lookup_fontsGET /franklab/api/franklab/integrations/text-sticker/fontssource
lookup_signer-profilesGET /franklab/api/make/c2pa/signer-profilessource
get_taskGET /franklab/api/franklab/jobs/{taskId}source
upload_sourcePOST /franklab/api/franklab/jobs/uploadsource
check_connectionGET /franklab/api/franklab/integrations/text-sticker/auth/statssource
bash
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/image" \
  -H "Authorization: Bearer $FRANKLAB_KEY" \
  -H "Content-Type: application/json" \
  --data '{"imageUrl":"https://example.com/synthetic.png","operation":"resize","width":64,"height":64}'

REST fields

Fields apply to the selected operation; required conditions and the minimal example define usage. [] denotes array items.

FieldTypeConditions and allowed values
imageUrlstringrequired (resize); URL; required (crop); required (filter); required (watermark); required (image_overlay); required (text); required (rotate); required (flip); required (flop); required (blur); required (sharpen); required (info); required (strip_meta); required (write_exif); required (write_metadata); required (replace_metadata); required (mask); required (collage); required (adjust); required (read_metadata); required (remove_bg); required (ocr); required (strip_gps); required (pipeline)
outputFormatstringjpeg / png / webp / avif / gif; output Format
outputQualitynumbermin 1; max 100
c2paSigningModestringoff / franklab / user_profile; c2pa Signing Mode
contentOriginstringfranklab or user_profile; restricted origins require permitting user_profile and evidence; not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured; content Origin
humanAuthorNamestringc2paSigningMode=franklab OR c2paSigningMode=user_profile; human Author Name
humanAuthorUrlstringc2paSigningMode=franklab OR c2paSigningMode=user_profile; human Author Url
reviewedBystringc2paSigningMode=franklab OR c2paSigningMode=user_profile; reviewed By
reviewedAtstringc2paSigningMode=franklab OR c2paSigningMode=user_profile; reviewed At
reviewMethodstringc2paSigningMode=franklab OR c2paSigningMode=user_profile; review Method
sourceMaterialUrlsarrayc2paSigningMode=franklab OR c2paSigningMode=user_profile; max items 10
originalEvidenceUrlsarrayc2paSigningMode=franklab OR c2paSigningMode=user_profile; max items 10
verifiedIncomingC2paIngredientbooleanc2paSigningMode=franklab OR c2paSigningMode=user_profile; verified Incoming C2pa Ingredient
c2paActionDescriptionstringc2paSigningMode=franklab OR c2paSigningMode=user_profile; c2pa Action Description
c2paDisclosurestringc2paSigningMode=franklab OR c2paSigningMode=user_profile; c2pa Disclosure
c2paSignerProfileIdstringrequired when c2paSigningMode=user_profile; rpc://getC2paSignerProfiles; c2pa Signer Profile Id
presetstringrpc://getImagePresets; preset
widthnumberwidth
heightnumberheight
fitstringcover / contain / fill / inside / outside; fit
operationstringrequired (resize); required (crop); required (filter); required (image_overlay); required (rotate); required (flip); required (flop); required (blur); required (sharpen); required (info); required (strip_meta); required (write_exif); required (write_metadata); required (replace_metadata); required (mask); required (read_metadata); required (remove_bg); required (ocr); required (strip_gps)
aspectRatiostringaspect Ratio
filterPresetstringgrayscale / sepia / warm / cold / vibrant / muted / dramatic; filter Preset
stepsarrayrequired (watermark); max items 20; required (text); required (collage); required (adjust); required (pipeline)
steps[].opstringrequired (watermark); resize / crop / filter / watermark / text / rotate / flip / flop / blur / sharpen / mask / collage / adjust / format / info / read_metadata / remove_bg / ocr / strip_meta / write_exif / write_metadata / replace_metadata / strip_gps; steps[].op; required (text); required (collage); required (adjust); required (pipeline)
steps[].presetstringsteps[].op=resize OR steps[].op=filter; grayscale / sepia / warm / cold / vibrant / muted / dramatic; rpc://getImagePresets; steps[].preset
steps[].widthnumbersteps[].op=resize OR steps[].op=crop OR steps[].op=collage; steps[].width
steps[].heightnumbersteps[].op=resize OR steps[].op=crop OR steps[].op=collage; steps[].height
steps[].fitstringsteps[].op=resize; cover / contain / fill / inside / outside; steps[].fit
steps[].aspectRatiostringsteps[].op=crop; steps[].aspect Ratio
steps[].leftnumbersteps[].op=crop; steps[].left
steps[].topnumbersteps[].op=crop; steps[].top
steps[].brightnessnumbersteps[].op=filter OR steps[].op=adjust; steps[].brightness
steps[].saturationnumbersteps[].op=filter OR steps[].op=adjust; steps[].saturation
steps[].huenumbersteps[].op=filter OR steps[].op=adjust; steps[].hue
steps[].imageUrlstringsteps[].op=watermark; steps[].image Url
steps[].positionstringsteps[].op=watermark OR steps[].op=text; bottom-right / bottom-left / top-right / top-left / center / top-center / bottom-center; steps[].position
steps[].opacitynumbersteps[].op=watermark; steps[].opacity
steps[].scalenumbersteps[].op=watermark; steps[].scale
steps[].marginnumbersteps[].op=watermark; steps[].margin
steps[].contentstringsteps[].op=text; steps[].content
steps[].fontSizenumbersteps[].op=text; steps[].font Size
steps[].colorstringsteps[].op=text; steps[].color
steps[].bgColorstringsteps[].op=text; steps[].bg Color
steps[].bgOpacitynumbersteps[].op=text; steps[].bg Opacity
steps[].alignstringsteps[].op=text; center / left / right; steps[].align
steps[].maxWidthnumbersteps[].op=text; steps[].max Width
steps[].paddingnumbersteps[].op=text; steps[].padding
steps[].anglenumbersteps[].op=rotate; steps[].angle
steps[].backgroundstringsteps[].op=rotate OR steps[].op=collage; steps[].background
steps[].sigmanumbersteps[].op=blur OR steps[].op=sharpen; steps[].sigma
steps[].shapestringsteps[].op=mask; rounded / circle; steps[].shape
steps[].radiusnumbersteps[].op=mask; steps[].radius
steps[].imageUrlsarraysteps[].op=collage; steps[].image Urls
steps[].columnsnumbersteps[].op=collage; steps[].columns
steps[].gapnumbersteps[].op=collage; steps[].gap
steps[].contrastnumbersteps[].op=adjust; steps[].contrast
steps[].gammanumbersteps[].op=adjust; steps[].gamma
steps[].formatstringsteps[].op=format; jpeg / png / webp / avif / gif; steps[].format
steps[].metadataEnginestringsteps[].op=read_metadata; sharp / exiftool; steps[].metadata Engine
steps[].includeGpsbooleansteps[].op=read_metadata; steps[].include Gps
steps[].removeBgProviderstringsteps[].op=remove_bg; local; steps[].remove Bg Provider
steps[].alphaMattingbooleansteps[].op=remove_bg; steps[].alpha Matting
steps[].ocrLanguagesstringsteps[].op=ocr; steps[].ocr Languages
steps[].metaTitlestringsteps[].op=write_metadata OR steps[].op=replace_metadata; steps[].meta Title
steps[].metaDescriptionstringsteps[].op=write_metadata OR steps[].op=replace_metadata; steps[].meta Description
steps[].metaKeywordsstringsteps[].op=write_metadata; steps[].meta Keywords
steps[].altTextstringsteps[].op=write_metadata OR steps[].op=replace_metadata; steps[].alt Text
steps[].semanticDescriptionstringsteps[].op=write_metadata; steps[].semantic Description
steps[].semanticTagsstringsteps[].op=write_metadata OR steps[].op=replace_metadata; steps[].semantic Tags
watermarkImageUrlstringURL
overlayImageUrlstringrequired (image_overlay); URL
overlayPositionstringtop-left / top-center / top-right / center-left / center / center-right / bottom-left / bottom-center / bottom-right; overlay Position
overlayOpacitynumbermin 0; max 1
overlayScalenumbermin 0.01; max 1
overlayMarginnumbermin 0
contentstringcontent
anglenumberangle
sigmanumbersigma
imageDescriptionstringimage Description
copyrightstringcopyright
artiststringartist
metaTitlestringmeta Title
metaDescriptionstringmeta Description
metaKeywordsstringmeta Keywords
metaAuthorstringmeta Author
metaCopyrightstringmeta Copyright
metaCreditstringmeta Credit
metaSoftwarestringmeta Software
metaLicenseUrlstringURL
metaAcquireLicensePagestringURL
metaSourceUrlstringURL
metaDateCreatedstringmeta Date Created
metaDigitalSourceTypestringmeta Digital Source Type
altTextstringalt Text
semanticDescriptionstringsemantic Description
semanticTagsstringsemantic Tags
semanticScenestringsemantic Scene
semanticStylestringsemantic Style
semanticMoodstringsemantic Mood
semanticColorsstringsemantic Colors
semanticUseCasesstringsemantic Use Cases
ocrTextstringocr Text
shapestringrounded / circle; shape
radiusnumberradius
metadataEnginestringsharp / exiftool; metadata Engine
includeGpsbooleaninclude Gps
removeBgProviderstringlocal; remove Bg Provider
alphaMattingbooleanalpha Matting
ocrLanguagesstringocr Languages
taskIdstringrequired (get_task); Path parameter: returned taskId, scoped to the same partner
filebinaryrequired (upload_source); multipart/form-data file; maximum 157286400 bytes

Make options and REST conversion

This is the Make selection reference; form names can differ from REST. Convert v1*/v2*, text* and sample* fields as described above. Nested conditions describe the Make form.

Form fieldWhenValues
operationresize / crop / filter / watermark / image_overlay / text / rotate / flip / flop / blur / sharpen / info / strip_meta / write_exif / write_metadata / replace_metadata / mask / collage / adjust / read_metadata / remove_bg / ocr / strip_gps
presetoperation=resizerpc://getImagePresets
fitoperation=resizecover / contain / fill / inside / outside
filterPresetoperation=filtergrayscale / sepia / warm / cold / vibrant / muted / dramatic
watermarkPositionoperation=watermarkbottom-right / bottom-left / top-right / top-left / center / top-center / bottom-center
overlayPositionoperation=image_overlaytop-left / top-center / top-right / center-left / center / center-right / bottom-left / bottom-center / bottom-right
textFontoperation=textrpc://getFonts
textPositionoperation=textcenter / top / bottom / top-left / top-right / bottom-left / bottom-right
shapeoperation=maskrounded / circle
metadataEngineoperation=read_metadatasharp / exiftool
removeBgProvideroperation=remove_bglocal
outputFormatjpeg / png / webp / avif / gif
c2paSigningModeoff / franklab / user_profile
contentOriginc2paSigningMode=franklabnot_declared / human_edited / ai_assisted / ai_generated
c2paSignerProfileIdc2paSigningMode=user_profilerpc://getC2paSignerProfiles
contentOriginc2paSigningMode=user_profilenot_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured
steps[].opresize / crop / filter / watermark / text / rotate / flip / flop / blur / sharpen / mask / collage / adjust / format / info / read_metadata / remove_bg / ocr / strip_meta / write_exif / write_metadata / replace_metadata / strip_gps
steps[].presetsteps[].op=resizerpc://getImagePresets
steps[].fitsteps[].op=resizecover / contain / fill / inside / outside
steps[].presetsteps[].op=filtergrayscale / sepia / warm / cold / vibrant / muted / dramatic
steps[].positionsteps[].op=watermarkbottom-right / bottom-left / top-right / top-left / center / top-center / bottom-center
steps[].positionsteps[].op=textcenter / top-center / bottom-center / top-left / top-right / bottom-left / bottom-right
steps[].alignsteps[].op=textcenter / left / right
steps[].shapesteps[].op=maskrounded / circle
steps[].formatsteps[].op=formatjpeg / png / webp / avif / gif
steps[].metadataEnginesteps[].op=read_metadatasharp / exiftool
steps[].removeBgProvidersteps[].op=remove_bglocal

Response and verification limits

HTTP 200 {success:true,data:{taskId,status,final_cost_franks,cost_currency,cost_status,cost_unit}}; poll the returned taskId.

Sharpen steps accept sigma; Make flat/jagged are absent from the REST DTO. write_exif steps do not declare imageDescription/copyright/artist: use single operation=write_exif.

Known REST limitation: info, read_metadata, ocr. The worker returns data without a primary file, while task terminalization requires that file. These functions are blocked pending a separate fix; do not use them for a paid trial.

INDEXLIFT

execution_mode=sync calls audit-landing with {url,mode}; async_wait calls audit-landing/async and its dedicated status route. Make pageUrl maps to url. mode: single-page or crawl. Resume with the saved taskId instead of submitting again. idempotency_key is absent from the DTO: use the Idempotency-Key header for async. The synchronous route forwards the SEO service response; it does not establish the media-job billing or response contract.

Operations and minimal JSON requests

Each example below is the complete JSON for its POST; replace URLs/IDs with your own. Operation/mode selectors choose functions, not generation models. “source” means source-checked without live/E2E; “blocked” marks a known limitation.

OperationHTTP and pathMinimal JSON / status
async_waitPOST /franklab/api/franklab/jobs/audit-landing/async{"url":"https://example.com/","mode":"single-page"} source
syncPOST /franklab/api/franklab/jobs/audit-landing{"url":"https://example.com/","mode":"single-page"} source
get_taskGET /franklab/api/franklab/jobs/audit-landing/async/{taskId}source
upload_sourcePOST /franklab/api/franklab/jobs/uploadsource
check_connectionGET /franklab/api/franklab/integrations/text-sticker/auth/statssource
bash
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/audit-landing/async" \
  -H "Authorization: Bearer $FRANKLAB_KEY" \
  -H "Content-Type: application/json" \
  --data '{"url":"https://example.com/","mode":"single-page"}'

For async POST add -H "Idempotency-Key: your-unique-request-id". Reuse a key only for the same request.

REST fields

Fields apply to the selected operation; required conditions and the minimal example define usage. [] denotes array items.

FieldTypeConditions and allowed values
urlstringrequired (async_wait); Public HTTP(S) URL; required (sync)
modestringsingle-page / crawl
taskIdstringrequired (get_task); Path parameter: returned taskId, scoped to the same partner
filebinaryrequired (upload_source); multipart/form-data file; maximum 157286400 bytes

Make options and REST conversion

This is the Make selection reference; form names can differ from REST. Convert v1*/v2*, text* and sample* fields as described above. Nested conditions describe the Make form.

Form fieldWhenValues
execution_modeasync_wait / sync
modesingle-page / crawl

Response and verification limits

Sync forwards SEO response; async: {success:true,data:{taskId,task_id,status:"queued",phase,idempotency_key,idempotency_hit,final_cost_franks,cost_currency,cost_status:"reserved",cost_unit}}.

Asynchronous INDEXLIFT uses zeroCost in source and opens no reservation. It is a distinct free execution contract, not a paid media-job; successful execution still needs verification. The parent campaign observed the nested report at data.result.data.seo_report on 8 September 2026; data.result preserves the SEO service envelope. Read suggestions at data.result.data.brief_suggestions when present. Make currently reads top-level body.data.seo_report, which can omit this result. Async successful cost_status is confirmed with zero cost, not the ordinary JobsFacade final.

KLEY

operation selects the route: speed → video-speed; subtitles → subtitles; overlay/image_on_video → overlay; all others → montage. concat accepts videos[] with url and the transition to the next clip; transition fields on the last item are ignored. transitionSoundMode=none/auto/manual; manual requires transitionSoundPreset, volume 0–1.5. Do not send a top-level transitionType string. slideshow requires at least 2 images; slideTransitionDuration must be less than slideDuration. quality_compare requires referenceVideoUrl. Analysis/comparison operations do not guarantee downloadUrl and need separate execution verification.

Operations and minimal JSON requests

Each example below is the complete JSON for its POST; replace URLs/IDs with your own. Operation/mode selectors choose functions, not generation models. “source” means source-checked without live/E2E; “blocked” marks a known limitation.

OperationHTTP and pathMinimal JSON / status
concatPOST /franklab/api/franklab/jobs/montage{"operation":"concat","videos":[{"url":"https://example.com/synthetic.mp4"},{"url":"https://example.com/synthetic.mp4"}]} source
framePOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"frame","position":"start","format":"png"} source
trimPOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"trim","startTime":0,"duration":1} source
reversePOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"reverse"} source
cropPOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"crop","aspectRatio":"1:1"} source
resizePOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"resize","width":160,"height":160} source
probePOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"probe"} blocked
write_tagsPOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"write_tags","tagTitle":"Synthetic test"} source
replace_tagsPOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"replace_tags","tagTitle":"Synthetic test"} source
strip_tagsPOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"strip_tags"} source
gifPOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"gif","duration":1,"fps":5,"width":160} source
fadePOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"fade","fadeInDuration":0.2} source
thumbnail_smartPOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"thumbnail_smart"} source
transcodePOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"transcode","videoCodec":"libx264","crf":28} source
pipPOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"pip","overlayVideoUrl":"https://example.com/synthetic.mp4","pipScale":0.25} source
image_on_videoPOST /franklab/api/franklab/jobs/overlay{"videoUrl":"https://example.com/synthetic.mp4","operation":"image_on_video","overlayImageUrl":"https://example.com/synthetic.png","overlayScale":0.25} source
video_on_imagePOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"video_on_image","imageUrl":"https://example.com/synthetic.png","overlayVideoUrl":"https://example.com/synthetic.mp4","durationMode":"overlay"} source
slideshowPOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"slideshow","imageUrls":["https://example.com/synthetic.png","https://example.com/synthetic.png"],"slideDuration":1,"slideTransition":"none"} source
speedPOST /franklab/api/franklab/jobs/video-speed{"videoUrl":"https://example.com/synthetic.mp4","speed":1.1} source
subtitlesPOST /franklab/api/franklab/jobs/subtitles{"videoUrl":"https://example.com/synthetic.mp4","subtitles":[{"text":"Synthetic test","startTime":0,"endTime":1}]} source
overlayPOST /franklab/api/franklab/jobs/overlay{"videoUrl":"https://example.com/synthetic.mp4","overlays":[{"type":"text","content":"Synthetic test","x":50,"y":50}]} source
quality_comparePOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"quality_compare","referenceVideoUrl":"https://example.com/synthetic.mp4"} blocked
stabilizePOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"stabilize"} source
scenesPOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"scenes"} blocked
qc_reportPOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"qc_report"} blocked
split_screenPOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"split_screen","videos":[{"url":"https://example.com/synthetic.mp4"},{"url":"https://example.com/synthetic.mp4"}],"splitLayout":"horizontal"} source
slow_motionPOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"slow_motion","slowFactor":2,"slowFps":30} source
denoisePOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"denoise","denoiseMethod":"hqdn3d","denoiseStrength":"low"} source
hdr_to_sdrPOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"hdr_to_sdr","tonemapMethod":"hable"} source
animatedPOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"animated","animatedFormat":"webp","duration":1,"fps":5,"width":160} source
mezzaninePOST /franklab/api/franklab/jobs/montage{"videoUrl":"https://example.com/synthetic.mp4","operation":"mezzanine","mezzanineCodec":"prores","proresProfile":0} source
lookup_transitionsGET /franklab/api/franklab/integrations/text-sticker/transitionssource
lookup_transition-soundsGET /franklab/api/franklab/integrations/text-sticker/transition-soundssource
lookup_aspect-ratiosGET /franklab/api/franklab/integrations/text-sticker/aspect-ratiossource
lookup_resize-presetsGET /franklab/api/franklab/integrations/text-sticker/resize-presetssource
lookup_signer-profilesGET /franklab/api/make/c2pa/signer-profilessource
get_taskGET /franklab/api/franklab/jobs/{taskId}source
upload_sourcePOST /franklab/api/franklab/jobs/uploadsource
check_connectionGET /franklab/api/franklab/integrations/text-sticker/auth/statssource
bash
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/montage" \
  -H "Authorization: Bearer $FRANKLAB_KEY" \
  -H "Content-Type: application/json" \
  --data '{"operation":"concat","videos":[{"url":"https://example.com/synthetic.mp4"},{"url":"https://example.com/synthetic.mp4"}]}'

REST fields

Fields apply to the selected operation; required conditions and the minimal example define usage. [] denotes array items.

FieldTypeConditions and allowed values
callbackUrlstringURL
videosarraymax items 20
maxTransitionRationumbermax Transition Ratio
operationstringrequired (concat); required (frame); required (trim); required (reverse); required (crop); required (resize); required (probe); required (write_tags); required (replace_tags); required (strip_tags); required (gif); required (fade); required (thumbnail_smart); required (transcode); required (pip); required (image_on_video); required (video_on_image); required (slideshow); required (quality_compare); required (stabilize); required (scenes); required (qc_report); required (split_screen); required (slow_motion); required (denoise); required (hdr_to_sdr); required (animated); required (mezzanine)
videoUrlstringrequired (frame); URL; required (trim); required (reverse); required (crop); required (resize); required (probe); required (write_tags); required (replace_tags); required (strip_tags); required (gif); required (fade); required (thumbnail_smart); required (transcode); required (pip); required (image_on_video); required (video_on_image); required (slideshow); required (speed); required (subtitles); required (overlay); required (quality_compare); required (stabilize); required (scenes); required (qc_report); required (split_screen); required (slow_motion); required (denoise); required (hdr_to_sdr); required (animated); required (mezzanine)
positionstringfirst / middle / last / custom; position
customTimenumbercustom Time
formatstringjpg / png; format
startTimenumberstart Time; min 0
durationnumberduration; min 0
aspectRatiostringrpc://getAspectRatios; aspect Ratio
cropWnumbercrop W
cropHnumbercrop H
cropXnumbercrop X
cropYnumbercrop Y
presetstringrpc://getResizePresets; preset; fast / medium / slow / veryslow
widthnumberwidth
heightnumberheight
tagTitlestringtag Title
tagArtiststringtag Artist
tagDescriptionstringtag Description
tagCommentstringtag Comment
tagDatestringtag Date
tagKeywordsstringtag Keywords
tagCopyrightstringtag Copyright
tagSoftwarestringtag Software
tagGenrestringtag Genre
tagLanguagestringtag Language
tagCreationTimestringtag Creation Time
summarystringsummary
transcriptstringtranscript
thumbnailAltTextstringthumbnail Alt Text
c2paSigningModestringoff / franklab / user_profile; c2pa Signing Mode
c2paSignerProfileIdstringrequired when c2paSigningMode=user_profile; rpc://getC2paSignerProfiles; c2pa Signer Profile Id
contentOriginstringfranklab or user_profile; restricted origins require permitting user_profile and evidence; not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured; content Origin
sourceMaterialUrlsarraymax items 10
originalEvidenceUrlsarraymax items 10
verifiedIncomingC2paIngredientbooleanverified Incoming C2pa Ingredient
c2paActionDescriptionstringc2pa Action Description
c2paDisclosurestringc2pa Disclosure
fpsnumberfps
fadeInDurationnumberfade In Duration
fadeOutDurationnumberfade Out Duration
videoCodecstringlibx264 / libx265 / libvpx-vp9 / copy; video Codec
crfnumbercrf
audioBitratestring64k / 96k / 128k / 160k / 192k / 256k / 320k; 8k–320k string; custom is a Make control, not a REST value
overlayVideoUrlstringrequired (pip); URL; required (video_on_image)
pipPositionstringtop-left / top-right / bottom-left / bottom-right / center; pip Position
pipScalenumberpip Scale
includeBaseAudiobooleaninclude Base Audio
baseAudioVolumenumberbase Audio Volume
includeOverlayAudiobooleaninclude Overlay Audio
overlayAudioVolumenumberoverlay Audio Volume
overlayImageUrlstringrequired (image_on_video); URL
overlayPositionstringtop-left / top-center / top-right / center / bottom-left / bottom-center / bottom-right; overlay Position
overlayScalenumbermin 0.01; max 1
overlayOpacitynumbermin 0; max 1
overlayMarginnumbermin 0
endTimenumbermin 0
imageUrlstringrequired (video_on_image); URL
durationModestringoverlay / fixed; duration Mode
imageUrlsarraymax items 20
slideDurationnumberslide Duration
slideTransitionstringrpc://getTransitions; slide Transition
slideTransitionDurationnumberslide Transition Duration
speednumberrequired (speed); min 0.25; max 4
templateIdstringtemplate Id
languagestringru / en / auto; language
highlightModestringnone / keywords / karaoke; highlight Mode
platformstringnone / tiktok / instagram_reels / youtube_shorts; platform
safeZonePresetstringsafe Zone Preset
subtitlesarraymax items 500
overlaysarraymax items 20
configIdstringconfig Id
referenceVideoUrlstringrequired (quality_compare); URL
shakinessnumbermin 1; max 10
smoothingnumbermin 1; max 100
sceneThresholdnumbermin 1; max 100
sceneThumbnailsbooleanscene Thumbnails
splitLayoutstringhorizontal / vertical / grid_2x2; split Layout
slowFactornumber2 / 4; slow Factor
slowFpsnumber30 / 60; slow Fps
denoiseMethodstringhqdn3d / nlmeans; denoise Method
denoiseStrengthstringlow / medium / high; denoise Strength
tonemapMethodstringhable / mobius / reinhard; tonemap Method
animatedFormatstringwebp / avif; animated Format
mezzanineCodecstringprores / dnxhd; mezzanine Codec
proresProfilenumber0 / 1 / 2 / 3; prores Profile
dnxhdProfilestringdnxhr_lb / dnxhr_sq / dnxhr_hq / dnxhr_hqx; dnxhd Profile
taskIdstringrequired (get_task); Path parameter: returned taskId, scoped to the same partner
filebinaryrequired (upload_source); multipart/form-data file; maximum 157286400 bytes

Make options and REST conversion

This is the Make selection reference; form names can differ from REST. Convert v1*/v2*, text* and sample* fields as described above. Nested conditions describe the Make form.

Form fieldWhenValues
operationconcat / frame / trim / reverse / crop / resize / probe / write_tags / replace_tags / strip_tags / gif / fade / thumbnail_smart / transcode / pip / image_on_video / video_on_image / slideshow / speed / subtitles / overlay / quality_compare / stabilize / scenes / qc_report / split_screen / slow_motion / denoise / hdr_to_sdr / animated / mezzanine
positionoperation=framefirst / middle / last / custom
formatoperation=framejpg / png
aspectRatiooperation=croprpc://getAspectRatios
presetoperation=resizerpc://getResizePresets
c2paSigningModeoperation=write_tagsoff / franklab / user_profile
c2paSignerProfileIdoperation=write_tagsrpc://getC2paSignerProfiles
contentOriginoperation=write_tagsnot_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured
c2paSigningModeoperation=replace_tagsoff / franklab / user_profile
c2paSignerProfileIdoperation=replace_tagsrpc://getC2paSignerProfiles
contentOriginoperation=replace_tagsnot_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured
formatoperation=thumbnail_smartjpg / png
videoCodecoperation=transcodelibx264 / libx265 / libvpx-vp9 / copy
presetoperation=transcodefast / medium / slow / veryslow
pipPositionoperation=piptop-left / top-right / bottom-left / bottom-right / center
overlayPositionoperation=image_on_videotop-left / top-center / top-right / center / bottom-left / bottom-center / bottom-right
pipPositionoperation=video_on_imagetop-left / top-right / bottom-left / bottom-right / center
durationModeoperation=video_on_imageoverlay / fixed
slideTransitionoperation=slideshowrpc://getTransitions
subtitleLanguageoperation=subtitlesru / en / auto
highlightModeoperation=subtitlesnone / keywords / karaoke
subtitlePlatformoperation=subtitlesnone / tiktok / instagram_reels / youtube_shorts
splitLayoutoperation=split_screenhorizontal / vertical / grid_2x2
slowFactoroperation=slow_motion2 / 4
slowFpsoperation=slow_motion30 / 60
denoiseMethodoperation=denoisehqdn3d / nlmeans
denoiseStrengthoperation=denoiselow / medium / high
tonemapMethodoperation=hdr_to_sdrhable / mobius / reinhard
animatedFormatoperation=animatedwebp / avif
mezzanineCodecoperation=mezzanineprores / dnxhd
proresProfileoperation=mezzanine0 / 1 / 2 / 3
dnxhdProfileoperation=mezzaninednxhr_lb / dnxhr_sq / dnxhr_hq / dnxhr_hqx

Response and verification limits

HTTP 200 {success:true,data:{taskId,status,final_cost_franks,cost_currency,cost_status,cost_unit}}; poll the returned taskId.

Known REST limitation: probe, quality_compare, qc_report, scenes. The worker returns data without a primary file, while task terminalization requires that file. These functions are blocked pending a separate fix; do not use them for a paid trial.

OVERLAY

Creation and polling use make/jobs. The artifact URL is data.result.downloadUrl. overlays has up to 20 objects: type=text/sticker/animated_sticker/emoji/watermark with type-specific fields. Use IDs from the lookup routes. Text layers use content; watermark layers use imageUrl. platform and configId control placement.

Operations and minimal JSON requests

Each example below is the complete JSON for its POST; replace URLs/IDs with your own. Operation/mode selectors choose functions, not generation models. “source” means source-checked without live/E2E; “blocked” marks a known limitation.

OperationHTTP and pathMinimal JSON / status
overlayPOST /franklab/api/make/jobs/overlay{"videoUrl":"https://example.com/synthetic.mp4","overlays":[{"type":"text","content":"Synthetic test","x":50,"y":50,"fontSize":24,"color":"#FFFFFF"}]} source
lookup_stickers_animated_trueGET /franklab/api/franklab/integrations/text-sticker/stickers?animated=truesource
lookup_emojisGET /franklab/api/franklab/integrations/text-sticker/emojissource
lookup_fontsGET /franklab/api/franklab/integrations/text-sticker/fontssource
lookup_stickers_animated_falseGET /franklab/api/franklab/integrations/text-sticker/stickers?animated=falsesource
lookup_safe-zone-optionsGET /franklab/api/franklab/integrations/text-sticker/safe-zone-optionssource
lookup_subtitle-templatesGET /franklab/api/franklab/integrations/text-sticker/subtitle-templatessource
lookup_transitionsGET /franklab/api/franklab/integrations/text-sticker/transitionssource
lookup_video-effectsGET /franklab/api/franklab/integrations/text-sticker/video-effectssource
get_taskGET /franklab/api/make/jobs/{taskId}source
upload_sourcePOST /franklab/api/franklab/jobs/uploadsource
check_connectionGET /franklab/api/franklab/integrations/text-sticker/auth/statssource
bash
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/make/jobs/overlay" \
  -H "Authorization: Bearer $FRANKLAB_KEY" \
  -H "Content-Type: application/json" \
  --data '{"videoUrl":"https://example.com/synthetic.mp4","overlays":[{"type":"text","content":"Synthetic test","x":50,"y":50,"fontSize":24,"color":"#FFFFFF"}]}'

REST fields

Fields apply to the selected operation; required conditions and the minimal example define usage. [] denotes array items.

FieldTypeConditions and allowed values
videoUrlstringrequired (overlay); URL
platformstringnone / tiktok / instagram_reels / youtube_shorts; platform
configIdstringconfig Id
overlaysarraymax items 20
overlays[].typestringrequired (overlay); text / emoji / sticker / animated_sticker / watermark; overlays[].type
overlays[].contentstringoverlays[].content
overlays[].stickerIdstringrpc://getOverlayStickers; overlays[].sticker Id
overlays[].animatedStickerIdstringrpc://getOverlayAnimatedStickers; overlays[].animated Sticker Id
overlays[].imageUrlstringoverlays[].image Url
overlays[].opacitynumberoverlays[].opacity
overlays[].scalenumberoverlays[].scale
overlays[].positionstring/ bottom-right / bottom-left / top-right / top-left / center / top-center / bottom-center; overlays[].position
overlays[].marginnumberoverlays[].margin
overlays[].emojiIdstringrpc://getOverlayEmojis; overlays[].emoji Id
overlays[].placementstringcustom / center / top_safe / bottom_safe / top_left_safe / top_right_safe / bottom_left_safe / bottom_right_safe; overlays[].placement
overlays[].xnumberoverlays[].x
overlays[].ynumberoverlays[].y
overlays[].startTimenumberoverlays[].start Time
overlays[].endTimenumberoverlays[].end Time
overlays[].fontSizenumberoverlays[].font Size
overlays[].colorstringoverlays[].color
overlays[].fontstringrpc://getOverlayFonts; overlays[].font
overlays[].shadowColorstringoverlays[].shadow Color
overlays[].shadowXnumberoverlays[].shadow X
overlays[].shadowYnumberoverlays[].shadow Y
overlays[].widthnumberoverlays[].width
overlays[].heightnumberoverlays[].height
callbackUrlstringURL
taskIdstringrequired (get_task); Path parameter: returned taskId, scoped to the same partner
filebinaryrequired (upload_source); multipart/form-data file; maximum 157286400 bytes

Make options and REST conversion

This is the Make selection reference; form names can differ from REST. Convert v1*/v2*, text* and sample* fields as described above. Nested conditions describe the Make form.

Form fieldWhenValues
platformnone / tiktok / instagram_reels / youtube_shorts
overlays[].typetext / emoji / sticker / animated_sticker / watermark
overlays[].stickerIdrpc://getOverlayStickers
overlays[].animatedStickerIdrpc://getOverlayAnimatedStickers
overlays[].position/ bottom-right / bottom-left / top-right / top-left / center / top-center / bottom-center
overlays[].emojiIdrpc://getOverlayEmojis
overlays[].placementcustom / center / top_safe / bottom_safe / top_left_safe / top_right_safe / bottom_left_safe / bottom_right_safe
overlays[].fontrpc://getOverlayFonts

Response and verification limits

HTTP 200 {success:true,data:{taskId,status,final_cost_franks,cost_currency,cost_status,cost_unit}}; poll the returned taskId.

PLASTINKA

The 8 September 2026 WAV trim check returned an audio-only MP4, but its codec could not be decoded by the local verification tools. Do not assume the returned container is browser-compatible; verify playback for your input format. Other audio operations were not tested by this example.

For audio processing, the source audio URL is named videoUrl. overlay/replace/fit also need audioUrl or sampleId; Make apply_sample becomes operation=sampleOperation (overlay/replace). merge uses audioUrls[] plus videoUrl equal to the first URL. save_sample returns a resource id, not a task: JSON {name,sampleUrl} or multipart name+sampleFile, exactly one source, up to 50 MiB, mp3/wav/aac/m4a/ogg/flac. sampleEndTime must exceed sampleStartTime. Make exposes sampleSourceMode=file but sends JSON without sampleFile; use direct multipart REST.

Operations and minimal JSON requests

Each example below is the complete JSON for its POST; replace URLs/IDs with your own. Operation/mode selectors choose functions, not generation models. “source” means source-checked without live/E2E; “blocked” marks a known limitation.

OperationHTTP and pathMinimal JSON / status
save_samplePOST /franklab/api/franklab/audio-samples{"name":"Synthetic sample","sampleUrl":"https://example.com/synthetic.wav"} source
apply_samplePOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.mp4","operation":"overlay","sampleId":"<SAMPLE_UUID>"} source
overlayPOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"overlay","audioUrl":"https://example.com/synthetic.wav"} source
replacePOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"replace","audioUrl":"https://example.com/synthetic.wav"} source
fitPOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"fit","audioUrl":"https://example.com/synthetic.wav","fitStrategy":"trim_pad","fitAudioMode":"replace"} source
extractPOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"extract"} source
speedPOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"speed","speed":1.1} source
removePOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"remove"} source
probePOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"probe"} blocked
write_tagsPOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"write_tags","tagTitle":"Synthetic test"} source
replace_tagsPOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"replace_tags","tagTitle":"Synthetic test"} source
strip_tagsPOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"strip_tags"} source
normalizePOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"normalize","targetLoudness":-16} source
trimPOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"trim","startTime":0,"duration":1} source
convertPOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"convert","targetFormat":"mp3","audioBitrate":"64k"} source
fadePOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"fade","fadeInDuration":0.2} source
mergePOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"merge","audioUrls":["https://example.com/synthetic.wav","https://example.com/synthetic.wav"]} source
quality_comparePOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"quality_compare","referenceAudioUrl":"https://example.com/synthetic.wav"} blocked
analyzePOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"analyze"} blocked
spectrogramPOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"spectrogram","imageWidth":320,"imageHeight":240} source
waveform_imagePOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"waveform_image","imageWidth":320,"imageHeight":240} source
fingerprintPOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"fingerprint"} blocked
enhance_dialoguePOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"enhance_dialogue","enhanceOriginal":1,"enhanceAmount":1} source
stereo_toolsPOST /franklab/api/franklab/jobs/audio{"videoUrl":"https://example.com/synthetic.wav","operation":"stereo_tools","stereoPreset":"mono"} source
lookup_audio-samplesGET /franklab/api/franklab/integrations/text-sticker/audio-samplessource
lookup_signer-profilesGET /franklab/api/make/c2pa/signer-profilessource
get_taskGET /franklab/api/franklab/jobs/{taskId}source
upload_sourcePOST /franklab/api/franklab/jobs/uploadsource
save_sample_filePOST /franklab/api/franklab/audio-samplessource
list_samplesGET /franklab/api/franklab/audio-samplessource
check_connectionGET /franklab/api/franklab/integrations/text-sticker/auth/statssource
bash
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/audio" \
  -H "Authorization: Bearer $FRANKLAB_KEY" \
  -H "Content-Type: application/json" \
  --data '{"videoUrl":"https://example.com/synthetic.mp4","operation":"overlay","sampleId":"<SAMPLE_UUID>"}'
bash
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/audio-samples" \
  -H "Authorization: Bearer $FRANKLAB_KEY" \
  -F "name=Synthetic sample" -F "sampleFile=@synthetic.wav;type=audio/wav"

REST fields

Fields apply to the selected operation; required conditions and the minimal example define usage. [] denotes array items.

FieldTypeConditions and allowed values
namestringrequired (save_sample); max length 120; required (save_sample_file); Non-empty, maximum 120 characters
sampleUrlstringrequired when sampleSourceMode=url; URL
sampleStartTimenumbermin 0; Seconds >=0
sampleEndTimenumbermin 0; Seconds greater than start
videoUrlstringrequired (apply_sample); URL; required (overlay); required (replace); required (fit); required (extract); required (speed); required (remove); required (probe); required (write_tags); required (replace_tags); required (strip_tags); required (normalize); required (trim); required (convert); required (fade); required (merge); required (quality_compare); required (analyze); required (spectrogram); required (waveform_image); required (fingerprint); required (enhance_dialogue); required (stereo_tools)
sampleIdstringrequired (apply_sample); rpc://getAudioSamples; sample Id
operationstringrequired (apply_sample); overlay / replace / fit; operation; required (overlay); required (replace); required (fit); required (extract); required (speed); required (remove); required (probe); required (write_tags); required (replace_tags); required (strip_tags); required (normalize); required (trim); required (convert); required (fade); required (merge); required (quality_compare); required (analyze); required (spectrogram); required (waveform_image); required (fingerprint); required (enhance_dialogue); required (stereo_tools)
insertAtTimenumbermin 0
audioStartTimenumbermin 0
audioEndTimenumbermin 0
audioVolumenumbermin 0; max 2
videoVolumenumbermin 0; max 2; fitAudioMode=mix
loopIfShortbooleanloop If Short; fitStrategy=trim_pad
callbackUrlstringURL
audioUrlstringrequired (overlay); URL; required (replace); required (fit)
audioFadeOutbooleanaudio Fade Out
fitAudioModestringrequired (fit); replace / mix; fit Audio Mode
fitStrategystringrequired (fit); trim_pad / stretch; fit Strategy
speedModestringrequired when fitStrategy=stretch; standard / voice_natural; speed Mode; required (speed)
speednumberrequired (speed); min 0.25; max 4
audioBitratestring64k / 96k / 128k / 160k / 192k / 256k / 320k; 8k–320k string; custom is a Make control, not a REST value
tagTitlestringtag Title
tagArtiststringtag Artist
tagAlbumstringtag Album
tagGenrestringtag Genre
tagCommentstringtag Comment
tagDatestringtag Date
tagDescriptionstringtag Description
tagKeywordsstringtag Keywords
tagCopyrightstringtag Copyright
tagComposerstringtag Composer
tagAlbumArtiststringtag Album Artist
tagTrackstringtag Track
tagDiscstringtag Disc
tagPublisherstringtag Publisher
tagBpmstringtag Bpm
tagLanguagestringtag Language
tagSoftwarestringtag Software
summarystringsummary
transcriptstringtranscript
c2paSigningModestringoff / franklab / user_profile; c2pa Signing Mode
c2paSignerProfileIdstringrequired when c2paSigningMode=user_profile; rpc://getC2paSignerProfiles; c2pa Signer Profile Id
contentOriginstringfranklab or user_profile; restricted origins require permitting user_profile and evidence; not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured; content Origin
sourceMaterialUrlsarraymax items 10
originalEvidenceUrlsarraymax items 10
verifiedIncomingC2paIngredientbooleanverified Incoming C2pa Ingredient
c2paActionDescriptionstringc2pa Action Description
c2paDisclosurestringc2pa Disclosure
targetLoudnessnumbertarget Loudness
targetTruePeaknumbertarget True Peak
startTimenumbermin 0
durationnumberrequired (trim); min 0
targetFormatstringrequired (convert); mp3 / aac / wav / ogg / flac / alac / opus; target Format
fadeInDurationnumbermin 0
fadeOutDurationnumbermin 0
audioUrlsarraymax items 20
referenceAudioUrlstringrequired (quality_compare); URL
imageWidthnumbermin 160; max 4096
imageHeightnumbermin 120; max 2160
spectrogramColorstringintensity / channel / rainbow / moreland / nebulae / fire / fiery / fruit / cool / magma / green / viridis / plasma / cividis / terrain; spectrogram Color
spectrogramScalestringlog / lin / sqrt / cbrt / 4thrt / 5thrt; spectrogram Scale
spectrogramLegendbooleanspectrogram Legend
waveformColorstringwaveform Color
waveformBgColorstringwaveform Bg Color
waveformSplitChannelsbooleanwaveform Split Channels
enhanceOriginalnumbermin 0; max 1
enhanceAmountnumbermin 0; max 3
stereoPresetstringwiden / narrow / mono; stereo Preset
taskIdstringrequired (get_task); Path parameter: returned taskId, scoped to the same partner
filebinaryrequired (upload_source); multipart/form-data file; maximum 157286400 bytes
sampleFilebinaryrequired (save_sample_file); multipart/form-data; <=50 MiB; mp3/wav/aac/m4a/ogg/flac

Make options and REST conversion

This is the Make selection reference; form names can differ from REST. Convert v1*/v2*, text* and sample* fields as described above. Nested conditions describe the Make form.

Form fieldWhenValues
operationsave_sample / apply_sample / overlay / replace / fit / extract / speed / remove / probe / write_tags / replace_tags / strip_tags / normalize / trim / convert / fade / merge / quality_compare / analyze / spectrogram / waveform_image / fingerprint / enhance_dialogue / stereo_tools
sampleSourceModeoperation=save_sampleurl / file
sampleIdoperation=apply_samplerpc://getAudioSamples
sampleOperationoperation=apply_sampleoverlay / replace / fit
fitAudioModeoperation=fitreplace / mix
fitStrategyoperation=fittrim_pad / stretch
speedModeoperation=fit; fitStrategy=stretchstandard / voice_natural
speedModeoperation=speedstandard / voice_natural
audioBitrateoperation=speed64k / 96k / 128k / 160k / 192k / 256k / 320k / custom
c2paSigningModeoperation=write_tagsoff / franklab / user_profile
c2paSignerProfileIdoperation=write_tagsrpc://getC2paSignerProfiles
contentOriginoperation=write_tagsnot_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured
c2paSigningModeoperation=replace_tagsoff / franklab / user_profile
c2paSignerProfileIdoperation=replace_tagsrpc://getC2paSignerProfiles
contentOriginoperation=replace_tagsnot_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured
targetFormatoperation=convertmp3 / aac / wav / ogg / flac / alac / opus
audioBitrateoperation=convert64k / 96k / 128k / 160k / 192k / 256k / 320k / custom
spectrogramColoroperation=spectrogramintensity / channel / rainbow / moreland / nebulae / fire / fiery / fruit / cool / magma / green / viridis / plasma / cividis / terrain
spectrogramScaleoperation=spectrogramlog / lin / sqrt / cbrt / 4thrt / 5thrt
stereoPresetoperation=stereo_toolswiden / narrow / mono

Response and verification limits

HTTP 200 {success:true,data:{id,name,sourceUrl,mimeType,format,durationMs,clipStartTime,clipEndTime,isSystem,createdAt}}; no task polling.

Known REST limitation: probe, quality_compare, analyze, fingerprint. The worker returns data without a primary file, while task terminalization requires that file. These functions are blocked pending a separate fix; do not use them for a paid trial.

SPEKTR

The 8 September 2026 waveform check failed during processing and its reservation was fully refunded. This result does not establish availability of the other SPEKTR operations.

background_remove uses X-API-Key and Recraft {model:"recraft/remove-background",input:{image:URL}}. Provider envelope: code/data.taskId; status is data.state; results are JSON.parse(data.resultJson).resultUrls[]. This is passthrough without confirmed FrankLab customer settlement. Other operations use Bearer and jobs. waveform maps Make audioUrl → videoUrl; video_round → operation=round; video_remove_bg → operation=remove_bg. Bria image replacement requires exactly one of prompt/refImages; erase_by_text needs objectName; lifestyle needs sceneDescription. Bria video erase over 5 seconds requires autoTrim=true; the backend verifies duration. Make task_id resume may choose Recraft polling for jobs; REST clients must retain the polling route with the ID.

Operations and minimal JSON requests

Each example below is the complete JSON for its POST; replace URLs/IDs with your own. Operation/mode selectors choose functions, not generation models. “source” means source-checked without live/E2E; “blocked” marks a known limitation.

OperationHTTP and pathMinimal JSON / status
background_removePOST /franklab/api/v1/recraft/create-task{"model":"recraft/remove-background","input":{"image":"https://example.com/synthetic.png"}} blocked
bria_image_remove_bgPOST /franklab/api/franklab/jobs/image{"operation":"bria_image_remove_bg","imageUrl":"https://example.com/synthetic.png"} source
bria_image_replace_bgPOST /franklab/api/franklab/jobs/image{"operation":"bria_image_replace_bg","imageUrl":"https://example.com/synthetic.png","prompt":"Plain studio background"} source
bria_erase_foregroundPOST /franklab/api/franklab/jobs/image{"operation":"bria_erase_foreground","imageUrl":"https://example.com/synthetic.png"} source
bria_erase_by_textPOST /franklab/api/franklab/jobs/image{"operation":"bria_erase_by_text","imageUrl":"https://example.com/synthetic.png","objectName":"lamp"} source
bria_product_lifestyle_by_textPOST /franklab/api/franklab/jobs/image{"operation":"bria_product_lifestyle_by_text","imageUrl":"https://example.com/synthetic.png","sceneDescription":"Product on a plain table","placementType":"automatic_aspect_ratio","briaAspectRatio":"1:1"} source
bria_product_cutoutPOST /franklab/api/franklab/jobs/image{"operation":"bria_product_cutout","imageUrl":"https://example.com/synthetic.png"} source
waveformPOST /franklab/api/franklab/jobs/montage{"operation":"waveform","videoUrl":"https://example.com/synthetic.wav","width":320,"height":240} source
video_roundPOST /franklab/api/franklab/jobs/montage{"operation":"round","videoUrl":"https://example.com/synthetic.mp4","shape":"rounded","radius":8,"backgroundColor":"#000000"} source
video_remove_bgPOST /franklab/api/franklab/jobs/montage{"operation":"remove_bg","videoUrl":"https://example.com/synthetic.mp4","removeBgProvider":"bria","removeBgOutputCodec":"webm_vp9"} source
bria_video_replace_bgPOST /franklab/api/franklab/jobs/montage{"operation":"bria_video_replace_bg","videoUrl":"https://example.com/synthetic.mp4","backgroundUrl":"https://example.com/synthetic.png","duration":1} source
bria_video_erase_objectPOST /franklab/api/franklab/jobs/montage{"operation":"bria_video_erase_object","videoUrl":"https://example.com/synthetic.mp4","maskUrl":"https://example.com/synthetic.mp4","duration":1} source
get_taskGET /franklab/api/franklab/jobs/{taskId}source
upload_sourcePOST /franklab/api/franklab/jobs/uploadsource
get_recraft_taskGET /franklab/api/v1/recraft/record-infoblocked
check_connectionGET /franklab/api/v1/images/omni-imagesource
bash
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/montage" \
  -H "Authorization: Bearer $FRANKLAB_KEY" \
  -H "Content-Type: application/json" \
  --data '{"operation":"waveform","videoUrl":"https://example.com/synthetic.wav","width":320,"height":240}'

REST fields

Fields apply to the selected operation; required conditions and the minimal example define usage. [] denotes array items.

FieldTypeConditions and allowed values
modelstringrequired (background_remove); recraft/remove-background
inputobjectrequired (background_remove); Input object
input.imagestringrequired (background_remove); Image URL; Make documents png/jpg/webp, <=5 MB, <=16 MP, 256–4096 px
callBackUrlstringOptional provider callback URL
callbackUrlstringURL
imageUrlstringrequired (bria_image_remove_bg); URL; required (bria_image_replace_bg); required (bria_erase_foreground); required (bria_erase_by_text); required (bria_product_lifestyle_by_text); required (bria_product_cutout)
preserveAlphabooleanpreserve Alpha
operationstringrequired (bria_image_remove_bg); required (bria_image_replace_bg); required (bria_erase_foreground); required (bria_erase_by_text); required (bria_product_lifestyle_by_text); required (bria_product_cutout); required (waveform); required (video_round); required (video_remove_bg); required (bria_video_replace_bg); required (bria_video_erase_object)
promptstringprompt
refImagesarrayref Images
briaModestringhigh_control / base / fast; bria Mode
negativePromptstringnegative Prompt
refinePromptbooleanrefine Prompt
originalQualitybooleanoriginal Quality
forceBackgroundDetectionbooleanforce Background Detection
seednumberseed
objectNamestringrequired (bria_erase_by_text); object Name
sceneDescriptionstringrequired (bria_product_lifestyle_by_text); scene Description
optimizeDescriptionbooleanoptimize Description
placementTypestringautomatic_aspect_ratio / original / manual_placement / manual_padding / custom_coordinates; placement Type
briaAspectRatiostring1:1 / 4:5 / 9:16 / 16:9 / 3:2 / 2:3; bria Aspect Ratio
forceRmbgbooleanforce Rmbg
skustringsku
videoUrlstringrequired (waveform); URL; required (video_round); required (video_remove_bg); required (bria_video_replace_bg); required (bria_video_erase_object)
widthnumberwidth
heightnumberheight
waveformColorstringwaveform Color
waveformBgColorstringwaveform Bg Color
shapestringrounded / circle; shape
radiusnumberradius
backgroundColorstringbackground Color
removeBgProviderstringbria / auto / replicate; remove Bg Provider
removeBgBackgroundColorstringTransparent / Black / White / Gray / Red / Green / Blue / Yellow / Cyan / Magenta / Orange; remove Bg Background Color
removeBgOutputCodecstringwebm_vp9 / mov_h265 / mov_proresks / mkv_vp9 / gif / mp4_h264 / mp4_h265 / mkv_h264 / mkv_h265; remove Bg Output Codec
removeBgPreserveAudiobooleanremove Bg Preserve Audio
backgroundUrlstringrequired (bria_video_replace_bg); URL
durationnumberduration
briaOutputCodecstringmp4_h264 / mp4_h265 / webm_vp9 / mov_h265 / mov_proresks / mkv_h264 / mkv_h265 / mkv_vp9 / gif; bria Output Codec
briaPreserveAudiobooleanbria Preserve Audio
maskUrlstringrequired (bria_video_erase_object); URL
autoTrimbooleanauto Trim
taskIdstringrequired (get_task); Path parameter: returned taskId, scoped to the same partner; required (get_recraft_task); Query parameter returned by recraft/create-task
filebinaryrequired (upload_source); multipart/form-data file; maximum 157286400 bytes
pageNumnumberQuery pagination; connection check uses 1
pageSizenumberQuery pagination; connection check uses 1

Make options and REST conversion

This is the Make selection reference; form names can differ from REST. Convert v1*/v2*, text* and sample* fields as described above. Nested conditions describe the Make form.

Form fieldWhenValues
operationbackground_remove / bria_image_remove_bg / bria_image_replace_bg / bria_erase_foreground / bria_erase_by_text / bria_product_lifestyle_by_text / bria_product_cutout / waveform / video_round / video_remove_bg / bria_video_replace_bg / bria_video_erase_object
briaModeoperation=bria_image_replace_bghigh_control / base / fast
briaModeoperation=bria_product_lifestyle_by_texthigh_control / base / fast
placementTypeoperation=bria_product_lifestyle_by_textautomatic_aspect_ratio / original / manual_placement / manual_padding / custom_coordinates
briaAspectRatiooperation=bria_product_lifestyle_by_text1:1 / 4:5 / 9:16 / 16:9 / 3:2 / 2:3
shapeoperation=video_roundrounded / circle
removeBgProvideroperation=video_remove_bgbria / auto / replicate
removeBgBackgroundColoroperation=video_remove_bgTransparent / Black / White / Gray / Red / Green / Blue / Yellow / Cyan / Magenta / Orange
removeBgOutputCodecoperation=video_remove_bgwebm_vp9 / mov_h265 / mov_proresks / mkv_vp9 / gif / mp4_h264 / mp4_h265 / mkv_h264 / mkv_h265
briaOutputCodecoperation=bria_video_replace_bgmp4_h264 / mp4_h265 / webm_vp9 / mov_h265 / mov_proresks / mkv_h264 / mkv_h265 / mkv_vp9 / gif
briaOutputCodecoperation=bria_video_erase_objectmp4_h264 / mp4_h265 / webm_vp9 / mov_h265 / mov_proresks / mkv_h264 / mkv_h265 / mkv_vp9 / gif

Response and verification limits

HTTP response with provider JSON {code:200,data:{taskId}}; inspect code and msg separately from HTTP status.

Recraft completes on data.state=success|fail. The Make repeat condition checks other fields and can continue polling after completion; direct REST clients must check state.

SUFLER

videoUrl is required. Automatic transcription: omit subtitles; transcriptionEngine selects whisper/xai_grok_transcribe/gemini/local_whisper/elevenlabs_scribe. Manual captions use subtitles[] with text,startTime,endTime; 0 ≤ startTime < endTime. Optional words[] uses word,start,end, non-overlapping and inside its cue. Maximum 500 cues. Make v1*/v2* are form names; REST uses templateId,fontSize,color,positionX etc. v2 manual overrides require presetOverrideMode=manual. Translation uses translateTo and optional dualLanguage. outputMode: burn/srt/vtt/ass/burn+srt/burn+vtt. v1 uses highlightMode; v2 uses renderMode and emphasisMode.

Operations and minimal JSON requests

Each example below is the complete JSON for its POST; replace URLs/IDs with your own. Operation/mode selectors choose functions, not generation models. “source” means source-checked without live/E2E; “blocked” marks a known limitation.

OperationHTTP and pathMinimal JSON / status
v1POST /franklab/api/franklab/jobs/subtitles{"videoUrl":"https://example.com/synthetic.mp4","captionEngine":"v1","subtitles":[{"text":"Synthetic test","startTime":0,"endTime":1}],"outputMode":"burn"} source
v2POST /franklab/api/franklab/jobs/subtitles{"videoUrl":"https://example.com/synthetic.mp4","captionEngine":"v2","subtitles":[{"text":"Synthetic test","startTime":0,"endTime":1}],"outputMode":"burn","templateId":"shorts_pro"} source
lookup_fontsGET /franklab/api/franklab/integrations/text-sticker/fontssource
lookup_subtitle-templatesGET /franklab/api/franklab/integrations/text-sticker/subtitle-templatessource
lookup_video-effectsGET /franklab/api/franklab/integrations/text-sticker/video-effectssource
lookup_safe-zone-platform-optionsGET /franklab/api/franklab/integrations/text-sticker/safe-zone-platform-optionssource
lookup_safe-zone-placement-optionsGET /franklab/api/franklab/integrations/text-sticker/safe-zone-placement-optionssource
get_taskGET /franklab/api/franklab/jobs/{taskId}source
upload_sourcePOST /franklab/api/franklab/jobs/uploadsource
check_connectionGET /franklab/api/franklab/integrations/text-sticker/auth/statssource
bash
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/subtitles" \
  -H "Authorization: Bearer $FRANKLAB_KEY" \
  -H "Content-Type: application/json" \
  --data '{"videoUrl":"https://example.com/synthetic.mp4","captionEngine":"v1","subtitles":[{"text":"Synthetic test","startTime":0,"endTime":1}],"outputMode":"burn"}'

REST fields

Fields apply to the selected operation; required conditions and the minimal example define usage. [] denotes array items.

FieldTypeConditions and allowed values
videoUrlstringrequired (v1); URL; required (v2)
languagestringauto / ru / en; language
transcriptionEnginestringsubtitleSourceMode=auto; whisper / xai_grok_transcribe / elevenlabs_scribe / local_whisper; transcription Engine
diarizebooleansubtitleSourceMode=auto; transcriptionEngine=xai_grok_transcribe OR subtitleSourceMode=auto; transcriptionEngine=elevenlabs_scribe; diarize
transcriptionFormatbooleansubtitleSourceMode=auto; transcriptionEngine=xai_grok_transcribe; transcription Format
fillerWordsbooleansubtitleSourceMode=auto; transcriptionEngine=xai_grok_transcribe; filler Words
keytermarraysubtitleSourceMode=auto; transcriptionEngine=xai_grok_transcribe OR subtitleSourceMode=auto; transcriptionEngine=elevenlabs_scribe OR subtitleSourceMode=auto; transcriptionEngine=local_whisper; max items 100; max length 50
keyterm[]stringrequired when subtitleSourceMode=auto; transcriptionEngine=xai_grok_transcribe; keyterm[]
subtitlesarrayrequired when subtitleSourceMode=manual; max items 500
subtitles[].textstringrequired when subtitleSourceMode=manual; subtitles[].text
subtitles[].startTimenumberrequired when subtitleSourceMode=manual; subtitles[].start Time
subtitles[].endTimenumberrequired when subtitleSourceMode=manual; subtitles[].end Time
subtitles[].wordsarraysubtitleSourceMode=manual; subtitles[].words
subtitles[].words[].wordstringrequired when subtitleSourceMode=manual; subtitles[].words[].word
subtitles[].words[].startnumberrequired when subtitleSourceMode=manual; subtitles[].words[].start
subtitles[].words[].endnumberrequired when subtitleSourceMode=manual; subtitles[].words[].end
translateTostringtranslationMode=translate; en / ru / de / fr / es / it / pt / zh / ja / ko / ar; translate To
dualLanguagebooleantranslationMode=translate; dual Language
videoEffectsarrayeffectsMode=custom; max items 20
videoEffects[].effectIdstringrequired when effectsMode=custom; rpc://getVideoEffects; video Effects[].effect Id
videoEffects[].scopestringeffectsMode=custom; clip / range; video Effects[].scope
videoEffects[].startTimenumbereffectsMode=custom; video Effects[].start Time
videoEffects[].endTimenumbereffectsMode=custom; video Effects[].end Time
videoEffects[].intensitynumbereffectsMode=custom; video Effects[].intensity
outputModestringburn / srt / vtt / ass / burn+srt / burn+vtt; output Mode
c2paSigningModestringoff / franklab / user_profile; c2pa Signing Mode
contentOriginstringfranklab or user_profile; restricted origins require permitting user_profile and evidence; not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured; content Origin
humanAuthorNamestringc2paSigningMode=franklab OR c2paSigningMode=user_profile; human Author Name
humanAuthorUrlstringc2paSigningMode=franklab OR c2paSigningMode=user_profile; human Author Url
reviewedBystringc2paSigningMode=franklab OR c2paSigningMode=user_profile; reviewed By
reviewedAtstringc2paSigningMode=franklab OR c2paSigningMode=user_profile; reviewed At
reviewMethodstringc2paSigningMode=franklab OR c2paSigningMode=user_profile; review Method
sourceMaterialUrlsarrayc2paSigningMode=franklab OR c2paSigningMode=user_profile; max items 10
originalEvidenceUrlsarrayc2paSigningMode=franklab OR c2paSigningMode=user_profile; max items 10
verifiedIncomingC2paIngredientbooleanc2paSigningMode=franklab OR c2paSigningMode=user_profile; verified Incoming C2pa Ingredient
c2paActionDescriptionstringc2paSigningMode=franklab OR c2paSigningMode=user_profile; c2pa Action Description
c2paDisclosurestringc2paSigningMode=franklab OR c2paSigningMode=user_profile; c2pa Disclosure
c2paSignerProfileIdstringrequired when c2paSigningMode=user_profile; rpc://getC2paSignerProfiles; c2pa Signer Profile Id
callbackUrlstringURL
templateIdstringclean-classic / clean-bold / podcast-lower-third / interview-soft-shadow / reels-punch / tiktok-bold-center / tiktok-keyword-highlight / viral-word-pop / clean-product-demo / boxed-active-word / karaoke-lite / karaoke-pop / gaming-outline / gaming-neon / education-marker / education-clean-center / minimal-modern / boxed-bold / emoji-accent / meme-caption / serif-cinematic / classic-subtitles / creator-hook / news-ticker / documentary-narration / sports-highlight / luxury-minimal / horror-crawl / children-playful / corporate-clean / vlog-casual / music-lyric / creative-handwritten / travel-explorer / tech-review / motivational-impact / cooking-recipe / fitness-energy / wedding-elegant / retro-display / academic-formal / brand-showcase / slavic-decorative; template Id; shorts_pro / creator_hook_v2 / product_demo_v2 / cta_product_v2 / sufler_bold_emoji_stack_v2 / sufler_ref_dan_v2 / sufler_ref_viktor_v2 / sufler_neon_outline_emoji_v2 / sufler_orange_active_strip_v2 / sufler_minimal_white_pill_v2 / sufler_black_shadow_keyword_v2 / sufler_neon_banner_v2 / sufler_clean_yellow_stack_v2 / sufler_compact_yellow_italic_v2 / sufler_orange_keyword_stack_v2 / frank_bold_orange_box_v2 / frank_green_caption_box_v2 / frank_bold_yellow_icon_v2 / frank_creator_yellow_stack_v2 / frank_red_green_active_v2 / frank_red_white_active_v2 / frank_yellow_keyword_v2 / frank_yellow_italic_v2 / frank_soft_pill_v2
highlightModestring/ none / keywords / karaoke / emoji; highlight Mode
platformstringv1PlacementMode=exact_preset; rpc://getSafeZonePlatforms; platform; v2TemplateId=shorts_pro; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset; Query parameter; use platform from safe-zone platform lookup
safeZonePresetstringv1PlacementMode=exact_preset; rpc://getSafeZonePlacements; safe Zone Preset; v2TemplateId=shorts_pro; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset
positionXnumberv1PlacementMode=exact_coordinates; min 0; max 100; v2TemplateId=shorts_pro; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates
positionYnumberv1PlacementMode=exact_coordinates; min 0; max 100; v2TemplateId=shorts_pro; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates
fontSizenumberv1TextStyleMode=custom; min 1; max 512; v2TemplateId=shorts_pro; v2PresetControlMode=manual OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual
fontstringv1TextStyleMode=custom; rpc://getFonts; max length 64; v2TemplateId=shorts_pro; v2PresetControlMode=manual OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual
colorstringv1TextStyleMode=custom; color; v2TemplateId=shorts_pro; v2PresetControlMode=manual OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual
uppercasebooleanv1TextStyleMode=custom; uppercase
displayWordsnumberv1TextStyleMode=custom; min 1; max 6
maxLinesnumberv1TextStyleMode=custom; min 1; max 2; v2TemplateId=shorts_pro; v2PresetControlMode=manual OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual
maxCharsPerLinenumberv1TextStyleMode=custom; min 8; max 42; v2TemplateId=shorts_pro; v2PresetControlMode=manual OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual
gapSplitSecnumberv1TextStyleMode=custom; min 0.15; max 2
lingerMsnumberv1TextStyleMode=custom; min 0; max 500
captionEnginestring
presetOverrideModestringv2TemplateId=shorts_pro OR v2TemplateId=creator_hook_v2 OR v2TemplateId=product_demo_v2 OR v2TemplateId=cta_product_v2 OR v2TemplateId=sufler_bold_emoji_stack_v2 OR v2TemplateId=sufler_ref_dan_v2 OR v2TemplateId=sufler_ref_viktor_v2 OR v2TemplateId=sufler_neon_outline_emoji_v2 OR v2TemplateId=sufler_orange_active_strip_v2 OR v2TemplateId=sufler_minimal_white_pill_v2 OR v2TemplateId=sufler_black_shadow_keyword_v2 OR v2TemplateId=sufler_neon_banner_v2 OR v2TemplateId=sufler_clean_yellow_stack_v2 OR v2TemplateId=sufler_compact_yellow_italic_v2 OR v2TemplateId=sufler_orange_keyword_stack_v2 OR v2TemplateId=frank_bold_orange_box_v2 OR v2TemplateId=frank_green_caption_box_v2 OR v2TemplateId=frank_bold_yellow_icon_v2 OR v2TemplateId=frank_creator_yellow_stack_v2 OR v2TemplateId=frank_red_green_active_v2 OR v2TemplateId=frank_red_white_active_v2 OR v2TemplateId=frank_yellow_keyword_v2 OR v2TemplateId=frank_yellow_italic_v2 OR v2TemplateId=frank_soft_pill_v2; preset / manual; preset Override Mode
outlinenumberv2TemplateId=shorts_pro; v2PresetControlMode=manual OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; min 0; max 8
outlineColorstringv2TemplateId=shorts_pro; v2PresetControlMode=manual OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; outline Color
shadownumberv2TemplateId=shorts_pro; v2PresetControlMode=manual OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; min 0; max 8
renderModestringv2TemplateId=shorts_pro; v2PresetControlMode=manual OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; / static / phrase_pop / word_pop / active_word / word_reveal / active_box; render Mode
animationIntensitystringv2TemplateId=shorts_pro; v2PresetControlMode=manual OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; low / medium / high; animation Intensity
highlightColorstringv2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; highlight Color
revealBaselinestringv2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; / none / dim / full; reveal Baseline
animationStylestringv2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; max length 40
emojiAccentModestringv2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; max length 40
activeColorstringv2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; active Color
activeBoxColorstringv2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; active Box Color
activeBoxPaddingnumberv2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; min 4; max 48
qualityModestringstandard / pro; quality Mode
emphasisModestringsemantic / manual / karaoke / none; emphasis Mode
emphasisWordsarrayv2EmphasisMode=manual; max items 50; max length 40
emphasisWords[]stringrequired when v2EmphasisMode=manual; emphasis Words[]
diagnosticsLevelstringbasic / full; diagnostics Level
visualQaModestringoff / contact_sheet; visual Qa Mode
glossaryarraymax items 50
glossary[].fromstringrequired (v2); glossary[].from
glossary[].tostringrequired (v2); glossary[].to
brandGlossaryarraymax items 50
brandGlossary[].fromstringrequired (v2); brand Glossary[].from
brandGlossary[].tostringrequired (v2); brand Glossary[].to
taskIdstringrequired (get_task); Path parameter: returned taskId, scoped to the same partner
filebinaryrequired (upload_source); multipart/form-data file; maximum 157286400 bytes

Make options and REST conversion

This is the Make selection reference; form names can differ from REST. Convert v1*/v2*, text* and sample* fields as described above. Nested conditions describe the Make form.

Form fieldWhenValues
languageauto / ru / en
captionEnginev1 / v2
v1TemplateIdcaptionEngine=v1clean-classic / clean-bold / podcast-lower-third / interview-soft-shadow / reels-punch / tiktok-bold-center / tiktok-keyword-highlight / viral-word-pop / clean-product-demo / boxed-active-word / karaoke-lite / karaoke-pop / gaming-outline / gaming-neon / education-marker / education-clean-center / minimal-modern / boxed-bold / emoji-accent / meme-caption / serif-cinematic / classic-subtitles / creator-hook / news-ticker / documentary-narration / sports-highlight / luxury-minimal / horror-crawl / children-playful / corporate-clean / vlog-casual / music-lyric / creative-handwritten / travel-explorer / tech-review / motivational-impact / cooking-recipe / fitness-energy / wedding-elegant / retro-display / academic-formal / brand-showcase / slavic-decorative
v1HighlightModecaptionEngine=v1/ none / keywords / karaoke / emoji
v1PlacementModecaptionEngine=v1tiktok_bottom_safe / bottom_center / center / top / exact_preset / exact_coordinates
v1PlatformcaptionEngine=v1; v1PlacementMode=exact_presetrpc://getSafeZonePlatforms
v1SafeZonePresetcaptionEngine=v1; v1PlacementMode=exact_presetrpc://getSafeZonePlacements
v1TextStyleModecaptionEngine=v1template / custom
v1FontcaptionEngine=v1; v1TextStyleMode=customrpc://getFonts
v2TemplateIdcaptionEngine=v2shorts_pro / creator_hook_v2 / product_demo_v2 / cta_product_v2 / sufler_bold_emoji_stack_v2 / sufler_ref_dan_v2 / sufler_ref_viktor_v2 / sufler_neon_outline_emoji_v2 / sufler_orange_active_strip_v2 / sufler_minimal_white_pill_v2 / sufler_black_shadow_keyword_v2 / sufler_neon_banner_v2 / sufler_clean_yellow_stack_v2 / sufler_compact_yellow_italic_v2 / sufler_orange_keyword_stack_v2 / frank_bold_orange_box_v2 / frank_green_caption_box_v2 / frank_bold_yellow_icon_v2 / frank_creator_yellow_stack_v2 / frank_red_green_active_v2 / frank_red_white_active_v2 / frank_yellow_keyword_v2 / frank_yellow_italic_v2 / frank_soft_pill_v2
v2QualityModecaptionEngine=v2standard / pro
v2EmphasisModecaptionEngine=v2semantic / manual / karaoke / none
v2DiagnosticsLevelcaptionEngine=v2basic / full
v2VisualQaModecaptionEngine=v2off / contact_sheet
subtitleSourceModeauto / manual
transcriptionEnginesubtitleSourceMode=autowhisper / xai_grok_transcribe / elevenlabs_scribe / local_whisper
translationModenone / translate
translateTotranslationMode=translateen / ru / de / fr / es / it / pt / zh / ja / ko / ar
effectsModenone / custom
videoEffects[].effectIdeffectsMode=customrpc://getVideoEffects
videoEffects[].scopeeffectsMode=customclip / range
outputModeburn / srt / vtt / ass / burn+srt / burn+vtt
c2paSigningModeoff / franklab / user_profile
contentOriginc2paSigningMode=franklabnot_declared / human_edited / ai_assisted / ai_generated
c2paSignerProfileIdc2paSigningMode=user_profilerpc://getC2paSignerProfiles
contentOriginc2paSigningMode=user_profilenot_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured

Shared v2 preset settings are listed once below. “All 24” means every v2TemplateId value in the table above; each row’s additional conditions also apply. v2RevealBaseline applies to 22 presets: all listed values except shorts_pro and creator_hook_v2.

Form fieldv2TemplateId presetsWhenValues
v2PresetControlModeAll 24captionEngine=v2preset / manual
v2FontAll 24captionEngine=v2; v2PresetControlMode=manualrpc://getFonts
v2PlacementModeAll 24captionEngine=v2; v2PresetControlMode=manual/ tiktok_bottom_safe / exact_preset / exact_coordinates
v2PlatformAll 24captionEngine=v2; v2PresetControlMode=manual; v2PlacementMode=exact_presetrpc://getSafeZonePlatforms
v2SafeZonePresetAll 24captionEngine=v2; v2PresetControlMode=manual; v2PlacementMode=exact_presetrpc://getSafeZonePlacements
v2RenderModeAll 24captionEngine=v2; v2PresetControlMode=manual/ static / phrase_pop / word_pop / active_word / word_reveal / active_box
v2AnimationIntensityAll 24captionEngine=v2; v2PresetControlMode=manuallow / medium / high
v2RevealBaselineAll except shorts_pro, creator_hook_v2captionEngine=v2; v2PresetControlMode=manual/ none / dim / full

Response and verification limits

HTTP 200 {success:true,data:{taskId,status,final_cost_franks,cost_currency,cost_status,cost_unit}}; poll the returned taskId.

Results: downloadUrl/subtitleFileUrl, subtitleCount, transcribedText; v2 also reports qualityScore, qualityGateStatus, renderMode, animatedWordCount, highlightedWords, visualQaStatus/visualQaUrl and subtitleDiagnostics. Inspect captionWarnings, fontRenderWarning, requestedFont/resolvedAssFont, appliedVideoFilters and ignoredVideoEffects. Make cue normalization removes arbitrary fields; cueStyleOverrideMode=cue retains x/y/fontSize/font/color. For direct REST send DTO fields only.

REST position: top-left/top-center/top-right/center/bottom-left/bottom-center/bottom-right. v2 custom visual settings require presetOverrideMode=manual. Conditions using subtitleSourceMode/translationMode/effectsMode/v1*/v2* in the reference describe the Make form, not REST fields.

Next step

Choose one operation, upload a small owned file, verify access and your customer tariff, then submit once and retain the taskId with its polling route. Blocked functions need a separate contract verification or fix first.

/en/docs/utilities-api.md
Need help?Contact support