Raw schema
{
"type": "object",
"properties": {
"source_job_id": {
"description": "Job ID of any prior video job (find_clips, summarize, or video transcribe). Possessing this id is the capability — extract_vertical_clip is not session-bound, so a user can come back from a different session within the parent's TTL and still extract. Required on the first call.",
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"start": {
"description": "Source-relative start time in seconds. Required on the first call.",
"type": "number",
"minimum": 0
},
"end": {
"description": "Source-relative end time in seconds (must be > start; end - start must be at least 1s, and no more than the selected profile's cap — 240s for tiktok-primary/tiktok-primary-720p, 180s for instagram-reels, 60s for instagram-stories). Required on the first call.",
"type": "number",
"minimum": 0
},
"title": {
"description": "Optional title for the assembled clip. Surfaces in get_job_status and download filenames; doesn't affect the cut itself.",
"type": "string",
"maxLength": 200
},
"profile": {
"description": "Optional encoding profile. Default: tiktok-primary (1080×1920 H.264 fast preset, CRF 22, 6 Mbps cap). tiktok-primary-720p: 720×1280, CBR 3 Mbps — half-resolution mobile-optimized, ~40% faster wall time. instagram-reels: 1080×1920 H.264 slow preset, CBR 4 Mbps. instagram-stories: same encode shape as instagram-reels. All four apply loudness normalization to -14 LUFS / -1.5 dBTP.",
"type": "string",
"enum": [
"tiktok-primary",
"tiktok-primary-720p",
"instagram-reels",
"instagram-stories"
]
},
"subject": {
"description": "Optional reframing strategy. Default: \"center\" (hardcoded center crop, today's behavior). \"auto\": lock onto the longest-tracked face from the parent find_clips job's subjects-sidecar (or run inline detection if no sidecar). \"subject_id\": lock onto a specific face named in the sidecar (pass subject_id). \"follow\": switch crop between active speakers across the clip using the sidecar's active_speaker_timeline (per-segment encode + concat). \"manual\": caller specifies the subject (pass subject_box or subject_x_offset). See /.well-known/weftly-subjects-v1.schema.json. auto/subject_id/follow fall back to center if detection fails — the paid job always delivers a clip.",
"type": "string",
"enum": [
"center",
"manual",
"auto",
"subject_id",
"follow"
]
},
"subject_id": {
"description": "Required when subject=\"subject_id\". Subject id from the parent's subjects-sidecar (e.g. \"face_0\").",
"type": "string",
"maxLength": 64
},
"subject_box": {
"description": "For subject=\"manual\" — bounding box of the subject in source pixels. Crop centers on the box center.",
"type": "object",
"properties": {
"x": {
"type": "number",
"minimum": 0
},
"y": {
"type": "number",
"minimum": 0
},
"w": {
"type": "number",
"exclusiveMinimum": 0
},
"h": {
"type": "number",
"exclusiveMinimum": 0
}
},
"required": [
"x",
"y",
"w",
"h"
],
"additionalProperties": false
},
"t_ref": {
"description": "For subject=\"manual\" with subject_box — source-seconds timestamp the box applies to. Informational in v1.",
"type": "number",
"minimum": 0
},
"subject_x_offset": {
"description": "For subject=\"manual\" — direct crop x-offset in source pixels (alternative to subject_box).",
"type": "number",
"minimum": 0
},
"job_id": {
"description": "Job ID returned from a previous extract_vertical_clip call. Include along with payment_credential to confirm payment and trigger processing. Also include alone to recover the current state.",
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"payment_credential": {
"description": "MPP payment credential (full Authorization header value, e.g. \"Payment eyJ...\"). extract_vertical_clip accepts Tempo USDC and Stripe SPT — see the challenge's WWW-Authenticate header or /.well-known/mpp.json for the supported methods. Include with job_id after paying the challenge to start processing.",
"type": "string"
}
},
"additionalProperties": false
}