@deepraxis/sdk 0.1.1-dev.ea9c801 → 0.1.1-dev.ec2a9a1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -135,7 +135,7 @@ export const operations = [
135
135
  "type": "array",
136
136
  "itemType": "object",
137
137
  "required": false,
138
- "description": "Platform resources and services this service agent's codemode may reach, as one list of typed bindings. Only kind=service accepts a nonempty list; general and personal agents return 400. There are two kinds. A resource binding names one resource with id and access: database (id db_..., read_only or read_write), vector_store (id vs_..., read_only or read_write), file (id file- plus 24 letters or digits, as the File API returns it; read_only), media_library (any id without ':' or whitespace, read_only or read_write), model (a model catalog id, invoke), workflow and script (id <namespace>/<name>, invoke). A service binding opens a whole service and carries only enabled: search or browser. At most 20 bindings per type, no repeated type and id, and each service type at most once. A session is authorized by the agent version it runs: newly added bindings apply only to new sessions, and a version saved with apply=false changes no access until it is applied. Applying a version that disables, removes or downgrades a binding revokes it immediately in running sessions on older versions. A resource that is not bound returns 404, a service that is not opened returns 403, and a write to a resource bound read_only returns 403 BINDING_READ_ONLY. Unknown types, fields on the wrong kind (id, access or instructions on a service binding), wrong access and malformed ids return 400. The former databases, vector_stores and files fields are removed and return 400. Omit on create for no bindings. Saving checks added or changed database, vector_store, media_library and file bindings in the organization: unknown or deleted ids return 400. If an owner is unavailable or takes more than 3 seconds, saving succeeds with verified=false for the affected bindings. Unchanged bindings keep their previous verification result and are not rechecked. workflow and script ids are not verified at save time."
138
+ "description": "Platform resources and services this service agent's codemode may reach, as one list of typed bindings. Only kind=service accepts a nonempty list; general and personal agents return 400. There are two kinds. A resource binding names one resource with id and access: database (id db_..., read_only or read_write), vector_store (id vs_..., read_only or read_write), file (id file- plus 24 letters or digits, as the File API returns it; read_only), media_library (any id without ':' or whitespace, read_only or read_write), model (a model catalog id, invoke), workflow and script (id <namespace>/<name>, invoke). A service binding opens a whole service and carries only enabled: search, browser, ticket, crm, canvas or cut. There is no binding by default; enabling one opens every public method of that service. At most 20 bindings per type, no repeated type and id, and each service type at most once. A session is authorized by the agent version it runs: newly added bindings apply only to new sessions, and a version saved with apply=false changes no access until it is applied. Applying a version that disables, removes or downgrades a binding revokes it immediately in running sessions on older versions. A resource that is not bound returns 404, a service that is not opened returns 403, and a write to a resource bound read_only returns 403 BINDING_READ_ONLY. Unknown types, fields on the wrong kind (id, access or instructions on a service binding), wrong access and malformed ids return 400. The former databases, vector_stores and files fields are removed and return 400. Omit on create for no bindings. Saving checks added or changed database, vector_store, media_library and file bindings in the organization: unknown or deleted ids return 400. If an owner is unavailable or takes more than 3 seconds, saving succeeds with verified=false for the affected bindings. Unchanged bindings keep their previous verification result and are not rechecked. workflow and script ids are not verified at save time."
139
139
  },
140
140
  {
141
141
  "name": "kind",
@@ -9827,7 +9827,7 @@ export const operations = [
9827
9827
  "resource": "cut.projects.analysis",
9828
9828
  "method": "create",
9829
9829
  "summary": "Analyze project media",
9830
- "description": "Request silence, filler-word or scene analysis for selected bound assets before editing. Omit media to select project sources; ranges returned in segments use source seconds. A pending result is not completion: use retry_after_sec before checking again, and inspect failed or unsupported asset results before deciding which edits are possible.",
9830
+ "description": "Request silence, filler-word or scene analysis for selected bound assets before editing. Omit media to select project sources; ranges returned in segments use source seconds. A pending result is not completion: use retry_after_sec before checking again, and inspect failed or unsupported asset results before deciding which edits are possible. Silence measures transcript-based speech pauses, not music or loudness. A completed transcript without words returns ready with empty segments and reason no_speech; no completed transcript returns unsupported with reason no_transcript. A failed transcription remains failed.",
9831
9831
  "http": "POST",
9832
9832
  "path": "/cut/v1/projects/{project_id}/analysis",
9833
9833
  "streaming": "no",
@@ -9998,6 +9998,18 @@ export const operations = [
9998
9998
  "body": {
9999
9999
  "required": true,
10000
10000
  "fields": [
10001
+ {
10002
+ "name": "folder",
10003
+ "type": "string",
10004
+ "required": false,
10005
+ "description": "Optional destination path within the bound media library; omitted uses its default folder."
10006
+ },
10007
+ {
10008
+ "name": "name",
10009
+ "type": "string",
10010
+ "required": false,
10011
+ "description": "Nonempty display name, frozen with the export. Path separators and control characters become hyphens; limited to 200 characters. Omitted uses project name and timestamp."
10012
+ },
10001
10013
  {
10002
10014
  "name": "output",
10003
10015
  "type": "object",
@@ -10015,6 +10027,12 @@ export const operations = [
10015
10027
  "type": "integer",
10016
10028
  "required": false,
10017
10029
  "description": "Committed project revision from retrieve, state, timeline or execute; increases after each successful write."
10030
+ },
10031
+ {
10032
+ "name": "loudness",
10033
+ "type": "object",
10034
+ "required": false,
10035
+ "description": "Optional loudness normalization target; normalization adds analysis and rendering work."
10018
10036
  }
10019
10037
  ]
10020
10038
  }
@@ -10023,7 +10041,7 @@ export const operations = [
10023
10041
  "resource": "cut.projects.frames",
10024
10042
  "method": "list",
10025
10043
  "summary": "Render preview frames",
10026
- "description": "Review the visual result at one or more project times without creating an export. Pass comma-separated seconds in at, such as 12,15.5; scale changes preview size and revision selects a committed project revision. Request at most eight times. Each returned url is an inline PNG data URL (data:image/png;base64,...), not a hosted HTTP image link. Decode its base64 payload to save the image. Codemode returns at most four images per call, so request at most four times when reviewing there.",
10044
+ "description": "Review the visual result at one or more project times without creating an export. Pass comma-separated seconds in at, such as 12,15.5; scale changes preview size and revision selects a committed project revision. Request at most eight times. Each returned url is an inline PNG data URL (data:image/png;base64,...), not a hosted HTTP image link. The default scale is 0.25; use 0.5 for subtitle layout inspection (1080×1920 renders at 540×960). The maximum is 0.5; values above it return INVALID_PARAMS. Actual width and height are returned per frame. PNGs above 2 MiB or responses above 4 MiB return RESPONSE_TOO_LARGE without silently lowering resolution. The response always includes warnings; FRAME_UNAVAILABLE means a source preview could not be obtained and an offline tile was drawn. Its message identifies a timeout, delivery capacity limit, or unavailable source and contains no source URL. Decode each image's base64 payload to save it. Codemode returns at most four images per call, so request at most four times when reviewing there.",
10027
10045
  "http": "GET",
10028
10046
  "path": "/cut/v1/projects/{project_id}/frames",
10029
10047
  "streaming": "no",
@@ -10046,7 +10064,7 @@ export const operations = [
10046
10064
  "name": "scale",
10047
10065
  "type": "number",
10048
10066
  "required": false,
10049
- "description": "Positive image size multiplier; 0.5 renders at half the project dimensions."
10067
+ "description": "Image size multiplier, default 0.25, greater than zero and at most 0.5. Larger values return INVALID_PARAMS; pixel-area limits may reduce actual dimensions, reported as width and height."
10050
10068
  },
10051
10069
  {
10052
10070
  "name": "revision",
@@ -10238,7 +10256,7 @@ export const operations = [
10238
10256
  "resource": "cut.projects",
10239
10257
  "method": "execute",
10240
10258
  "summary": "Execute editing script",
10241
- "description": "Edit the current timeline atomically using synchronous JavaScript source. Read state or timeline first, then pass its revision as expected_revision to detect concurrent changes. Unlike Shotstack, execute applies script edits to a persistent project in one transaction. Provide script or a saved edit_id with literal edits, never both; failures roll back writes. A revision conflict while preparing the response may follow a committed edit: retrieve state before retrying. Minimal script after creating a project: `const t = AddTrack(\"video\"); Insert(t, {type: \"color\", color: \"#123456\", start: 0, length: 3}); Print(t);`\n\n### Script function reference\n\nFunctions are synchronous globals; do not import them. `project` is the current project ID. TrackId and ClipId are strings returned by AddTrack and Insert or read from GetTimeline. Reads see earlier writes in the same script.\n\n```ts\nGetTimeline(o?: { from?: number; to?: number; tracks?: TrackId[] }): TimelineView;\nGetItem(id: ClipId): ItemView;\nFindItems<T>(visit: (item: ItemView, ctx: { track: TrackView; index: number }) => T | undefined): T[];\nGetMedia(ref: MediaRef): MediaInfo;\nGetTranscript(ref: MediaRef, o?: { from?: number; to?: number }): Word[];\nGetAnalysis(ref: MediaRef, kind: AnalysisKind): Segment[];\nInsert(track: TrackId, item: ItemInit, o?: { ripple?: boolean }): ClipId;\nUpdate(id: ClipId, patch: ItemPatchView): void;\nDelete(id: ClipId, o?: { ripple?: boolean }): void;\nSplit(id: ClipId, at: number): ClipId;\nTrim(id: ClipId, edge: \"in\" | \"out\", delta: number, o?: { ripple?: boolean }): void;\nMove(id: ClipId, start: number, track?: TrackId): void;\nRippleDeleteRange(from: number, to: number, tracks?: TrackId[]): void;\nAddTrack(kind: \"video\" | \"audio\" | \"caption\", init?: { name?: string }, index?: number): TrackId;\nUpdateTrack(id: TrackId, patch: TrackPatch): void;\nDeleteTrack(id: TrackId): void;\nSetSettings(patch: Partial<ProjectSettingsView>): void;\nAddCaptionsFromTranscript(track: TrackId, source: ClipId, o?: { style?: Partial<CaptionStyle>; maxChars?: number }): ClipId[];\nSetMarker(at: number, label: string): string;\nPrint(...values: unknown[]): void;\nPreview(at: number[]): void;\n```\n\n| Functions | Behavior and arguments |\n| --- | --- |\n| GetTimeline, GetItem | Read compact item views: id, track, type, start, end, length, optional media, sourceIn/sourceOut, text and offline reason. GetTimeline returns duration and tracks (id, kind, name, index, locked, items); from/to and tracks narrow the read. |\n| FindItems | Visit items with their track and index; return undefined to omit an item, any other value to collect it. |\n| GetMedia | Read metadata for `{libraryId, assetId}` in a bound library: kind, dimensions, fps, hasAudio and durationUs when available. durationUs is microseconds. |\n| GetTranscript, GetAnalysis | Read available transcript words or silence/filler/scenes segments. Transcript filter from/to is seconds; returned word and segment from/to values are source microseconds (divide by 1,000,000 for editing). Words contain text and optional speaker/filler; segments may include label/confidence. Request analysis first if unavailable. |\n| Insert, Update, Delete | Insert returns the new clip ID; Update changes supplied fields; Delete removes the clip. Optional ripple on Insert/Delete closes or opens space on the track. |\n| Split, Trim, Move | Split at a timeline position and return the new right-hand clip ID. Trim changes the in or out edge by delta seconds. Move sets the timeline start and optionally a new track. |\n| RippleDeleteRange | Delete a timeline interval and close its gap on the specified tracks, or all unlocked tracks when omitted. |\n| AddTrack, UpdateTrack, DeleteTrack | Add video/audio/caption tracks; index selects layer order (0 is top). TrackPatch supports name, locked, hidden, muted, gainDb and style as appropriate to track kind. |\n| SetSettings | Supply any of width/height (pixels), fps (frames per second), background (color). |\n| AddCaptionsFromTranscript | Create captions from an audio/video clip's kept words. Optional maxChars is 1–1000, default 16; style updates the caption track. Returns caption IDs. |\n| SetMarker | Add a label at a timeline time and return its ID. |\n| Print, Preview | Print appends text to prints. Preview requests up to eight times total per execute and puts images in the result's frames. Each url is an inline PNG data URL, not an HTTP image link. Decode the base64 payload to save an image. Codemode returns at most four images per call; request at most four times there. |\n\n#### Insert fields (ItemInit)\n\nEvery item requires `type` and `start`. Times used for editing are seconds and snap to the project frame rate: start, length, sourceIn, fadeIn/fadeOut, transition length, keyframe at, reveal delay/stagger/duration. Keyframe and reveal times are relative to the clip start. Video/audio may omit length to use the remaining source duration; other types require length.\n\n| type | Required fields beyond type/start | Optional fields |\n| --- | --- | --- |\n| video | media | length, sourceIn, volumeDb, transform, fit, animate, transitionIn, transitionOut |\n| image | media, length | transform, fit, animate, transitionIn, transitionOut |\n| text | text, length | style, transform, reveal, animate, transitionIn, transitionOut |\n| color | color, length | transform, fill, animate, transitionIn, transitionOut |\n| shape | shape, length, width, height, fill | radius, stroke, transform, animate, transitionIn, transitionOut |\n| audio | media | length, sourceIn, volumeDb, fadeIn, fadeOut, transitionIn, transitionOut |\n| caption | text, length | — |\n\nVideo tracks accept video/image/text/color/shape; audio and caption tracks accept their corresponding type. Media is `{libraryId: string, assetId: string}` from a bound library. sourceIn defaults to 0, volumeDb to 0 dB, audio fades to 0 seconds. fit defaults to contain: contain fits the whole image, cover fills and crops, fill stretches, none keeps native dimensions.\n\n| Field | Value |\n| --- | --- |\n| transform | Partial `{x, y, scale, rotation, opacity, crop, blur}`. x/y are normalized canvas center coordinates (default 0.5); scale 1 is fitted size; rotation is degrees (default 0); opacity is 0–1 (default 1). crop is `{top,right,bottom,left}`. blur is 0–100 pixels at 1080-pixel frame height. |\n| style | Partial `{fontFamily, fontSize, fontWeight, color, stroke, background, align, maxWidth}`. fontFamily: Geist or Noto Sans SC (default); fontSize defaults to 48; fontWeight: 400 (default), 500 or 700; color defaults to #FFFFFF; align: left, center (default), right; maxWidth is a fraction of canvas width (default 0.9). stroke is `{color,width}`. Caption style additionally supports position (top/middle/bottom), margin (0–0.4 of canvas height), highlightColor and maxLines: 2. |\n| animate | An object keyed by x, y, scale, rotation, opacity or blur. Each value is an array of `{at: number, value: number, ease?: Ease}` sorted by at with distinct frame-snapped times. Values hold before the first and after the last keyframe, overriding the static transform. |\n| Ease | linear, in, out, inOut, `{bezier: [x1,y1,x2,y2]}` or `{spring: {stiffness, damping, mass?}}`. Easing shapes the segment arriving at that keyframe; springs may overshoot. |\n| reveal | `{by, delay?: number, stagger: number, duration: number, from: {y?, opacity?, scale?, blur?}, ease?: Ease}`. by selects char, word or line. Unit k starts at delay + k * stagger and takes duration seconds to reach its resting state; from.y is a fraction of font size. |\n| fill | A color string (#RRGGBB or #RRGGBBAA), `{linear: {angle, stops: [{at,color}, ...]}}` or `{radial: {stops: [{at,color}, ...]}}`. Stop positions are 0–1; angle is degrees, 0 left to right. On color clips, fill replaces color when supplied. |\n| shape, width, height, radius, stroke | shape is rect or ellipse. width/height are fractions of canvas width/height before scaling. radius rounds rect corners in pixels at 1080-pixel frame height. stroke is `{color: string, width: number}`. |\n| transitionIn, transitionOut | `{kind, length: number}` at the clip's beginning/end. length is seconds. fade changes opacity; dissolve blends; push_left/push_right move horizontally; wipe_left reveals horizontally. |\n\n#### Update fields (ItemPatchView)\n\nAll fields are optional; use only fields relevant to the item's type. Supported fields: start, length, sourceIn, volumeDb, transform, fit, text, style, color, fadeIn, fadeOut, animate, reveal, fill, stroke, shape, width, height, radius, transitionIn, transitionOut. Values and units match Insert. Set animate, reveal, fill, stroke, transitionIn or transitionOut to null to remove that effect; omitting a field preserves it. For example: `Update(id, {volumeDb: -12})` or `Update(id, {transitionIn: null})`.\n\n#### Script names versus HTTP response names\n\nUse camelCase inside scripts, including nested objects. HTTP request/response JSON outside script source uses snake_case. Map media.library_id → media.libraryId, media.asset_id → media.assetId, source_in → sourceIn, volume_db → volumeDb, fade_in/fade_out → fadeIn/fadeOut, transition_in/transition_out → transitionIn/transitionOut, font_family/font_size/font_weight/max_width → fontFamily/fontSize/fontWeight/maxWidth, gain_db → gainDb, highlight_color/max_lines → highlightColor/maxLines. Fields such as animate, reveal, fill, stroke, at and length retain their spelling. GetTimeline/GetItem already return camelCase compact views; the expanded retrieveTimeline HTTP response is not an Insert object.\n\nUnrecognized script fields fail with OPS_REJECTED and rejection code UNKNOWN_FIELD; snake_case mistakes suggest the corresponding camelCase name. The error message lists each rejection's #opIndex, code and reason. Correct the named fields and retry the saved edit; do not assume an ignored field applied an effect.\n",
10259
+ "description": "Edit the current timeline atomically using synchronous JavaScript source. Read state or timeline first, then pass its revision as expected_revision to detect concurrent changes. Unlike Shotstack, execute applies script edits to a persistent project in one transaction. Provide script or a saved edit_id with literal edits, never both; failures roll back writes. A revision conflict while preparing the response may follow a committed edit: retrieve state before retrying. Minimal script after creating a project: `const t = AddTrack(\"video\"); Insert(t, {type: \"color\", color: \"#123456\", start: 0, length: 3}); Print(t);`\n\n### Script function reference\n\nFunctions are synchronous globals; do not import them. `project` is the current project ID. TrackId and ClipId are strings returned by AddTrack and Insert or read from GetTimeline. JoinId is the string returned by Join or read from GetTimeline().joins. Reads see earlier writes in the same script.\n\n```ts\nGetTimeline(o?: { from?: number; to?: number; tracks?: TrackId[] }): TimelineView;\nGetItem(id: ClipId): ItemView;\nFindItems<T>(visit: (item: ItemView, ctx: { track: TrackView; index: number }) => T | undefined): T[];\nGetMedia(ref: MediaRef): MediaInfo;\nGetTranscript(ref: MediaRef, o?: { from?: number; to?: number }): Word[];\nGetAnalysis(ref: MediaRef, kind: AnalysisKind): Segment[];\nListTransitions(): TransitionInfo[];\nListEffects(): EffectInfo[];\nListTextStyles(): TextStylePreset[];\nListTextTemplates(): TextTemplate[];\nListAnimations(): { id: string; version: number; phase: \"in\" | \"out\" | \"loop\"; target: \"any\" | \"text\"; name: string; description: string; defaultDuration: number; params: { name: string; type: string; values?: string[]; default?: string | number; min?: number; max?: number; description: string }[] }[];\nListFonts(): { family: string; weights: number[]; scripts: (\"latin\"|\"cjk\")[]; source: \"bundled\"|\"catalog\" }[];\nInsert(track: TrackId, item: ItemInit, o?: { ripple?: boolean }): ClipId;\nUpdate(id: ClipId, patch: ItemPatchView): void;\nSetSpeed(id: ClipId, rate: number | { curve: { at: number; rate: number; ease?: Ease }[]; audio?: \"mute\" | \"resample\" }, o: { keep: \"source\" | \"duration\"; ripple?: boolean }): { length: number; sourceOut: number };\nDelete(id: ClipId, o?: { ripple?: boolean }): void;\nJoin(left: ClipId, right: ClipId, o: { length?: number; effect: TransitionInput }): JoinId;\nUpdateJoin(id: JoinId, patch: { length?: number; effect?: TransitionInput }): void;\nDeleteJoin(id: JoinId): void;\nSplit(id: ClipId, at: number): ClipId;\nTrim(id: ClipId, edge: \"in\" | \"out\", delta: number, o?: { ripple?: boolean }): void;\nMove(id: ClipId, start: number, track?: TrackId): void;\nRippleDeleteRange(from: number, to: number, tracks?: TrackId[]): void;\nAddTrack(kind: \"video\" | \"audio\" | \"caption\", init?: { name?: string; role?: \"voice\" | \"music\" | \"sfx\" }, index?: number): TrackId;\nUpdateTrack(id: TrackId, patch: TrackPatch): void;\nDeleteTrack(id: TrackId): void;\nSetSettings(patch: Partial<ProjectSettingsView>): void;\nAddCaptionsFromTranscript(track: TrackId, source: ClipId, o?: { style?: Partial<CaptionStyle> & { preset?: string }; maxChars?: number }): ClipId[];\nInsertTemplate(track: TrackId, o: { template: string; start: number; slots?: Record<string, string> }): ClipId[];\nAlignCaptions(trackId: TrackId, script: string): { replaced: number; added: number; deleted: number };\nImportCaptions(trackId: TrackId, text: string, o?: { format?: \"srt\" | \"vtt\"; offset?: number }): ClipId[];\nExportCaptions(trackId: TrackId, o: { format: \"srt\" | \"vtt\" }): string;\nSetMarker(at: number, label: string): string;\nPrint(...values: unknown[]): void;\nPreview(at: number[]): void;\n```\n\n| Functions | Behavior and arguments |\n| --- | --- |\n| GetTimeline, GetItem | Read compact item views: id, track, type, start, end, length, optional media, playback, sourceIn/sourceOut, text, effects, blend and offline reason. GetTimeline returns duration, tracks (id, kind, name, index, locked, items), and joins (id, track, left, right, length in seconds, normalized effect). from/to and tracks narrow the items and joins; joins are selected by their overlap window. |\n| ListEffects | Discover the shared visual-effect catalog with parameter types, ranges, defaults, cost and bounds. Effects are supported only on visual clips. |\n| ListTransitions | Discover the shared validation catalog: each entry contains kind (effect ID), name, description and params. Each parameter has name, type (enum/number/integer), default, description, enum values or numeric min/max. Use the returned kind and parameter names inside effect. |\n| ListAnimations | Discover animation presets. Each entry has id, version, phase (`in`, `out`, `loop`), target (`any`, `text`), name, description, defaultDuration (seconds), and params (name, type, values/default/min/max/description as applicable). A slot use is `{preset, duration?, ...params}`; duration is seconds. |\n| FindItems | Visit items with their track and index; return undefined to omit an item, any other value to collect it. |\n| GetMedia | Read metadata for `{libraryId, assetId}` in a bound library: kind, dimensions, fps, hasAudio and durationUs when available. durationUs is microseconds. |\n| GetTranscript, GetAnalysis | Read available transcript words or silence/filler/scenes segments. Transcript filter from/to is seconds; returned word and segment from/to values are source microseconds (divide by 1,000,000 for editing). Words contain text and optional speaker/filler; segments may include label/confidence. Request analysis first if unavailable. |\n| Insert, Update, Delete | Insert returns the new clip ID; Update changes supplied fields; Delete removes the clip. Optional ripple on Insert/Delete closes or opens space on the track. |\n| SetSpeed | Change video/audio rate in 0.25–4; keep is required. A `{curve: [{at, rate, ease?}, ...], audio?: \"mute\" | \"resample\"}` rate is forward-only and holds output duration fixed; pitch preservation is unavailable. Scalar rates: source preserves consumed source and changes length; duration preserves output length. Returns actual length and sourceOut in seconds. Optional ripple explicitly shifts same-track followers when keeping source; otherwise overlaps are rejected. |\n| Join, UpdateJoin, DeleteJoin | Join creates an overlap between two butt-adjacent visual clips on the same track and returns its ID. length defaults to 0.5 seconds; effect is required. The right clip and all same-track followers move left by length, shortening that track and potentially the project. UpdateJoin moves those followers by the difference in length; omitted fields are preserved. DeleteJoin moves them right to restore the butt cut. Other tracks stay in place. |\n| Split, Trim, Move | Split at a timeline position and return the new right-hand clip ID. Trim changes the in or out edge by delta seconds. Move sets the timeline start and optionally a new track. |\n| RippleDeleteRange | Delete a timeline interval and close its gap on the specified tracks, or all unlocked tracks when omitted. |\n| AddTrack, UpdateTrack, DeleteTrack | Add video/audio/caption tracks; index selects layer order (0 is top). TrackPatch supports name, locked, hidden, muted, gainDb, audio role (`voice`, `music`, `sfx`) and style as appropriate to track kind. |\n| SetSettings | Supply any of width/height (pixels), fps (frames per second), background (color). |\n| AddCaptionsFromTranscript | Create captions from an audio/video clip's kept words. Optional maxChars is 1–1000, default 16; style updates the caption track. Returns caption IDs. |\n| ImportCaptions, ExportCaptions | Import SRT or WebVTT text onto a caption track and export it back. format is inferred from a WEBVTT header when omitted. offset shifts imported cues in seconds. Import rejects more than 100000 bytes, more than 5000 cues, malformed or overlapping file cues with INVALID_CAPTION_FILE; overlap with existing timeline clips uses the normal OVERLAP rejection. Export sorts by timeline start and writes millisecond timecodes. |\n| SetMarker | Add a label at a timeline time and return its ID. |\n| Print, Preview | Print appends text to prints. Preview requests up to eight times total per execute and puts images in the result's frames. Each url is an inline PNG data URL, not an HTTP image link. Decode the base64 payload to save an image. Codemode returns at most four images per call; request at most four times there. |\n\n#### Joins between clips\n\nEndpoints may be video, image, text, color or shape; audio and caption are rejected. Require 0 < length < each endpoint's length. Each clip allows at most one incoming and one outgoing join; their summed lengths cannot exceed its length. Three-input overlaps, nonadjacent endpoints and cross-track joins are rejected with OPS_REJECTED. Read the rejection's code and message, shorten or remove conflicting joins, and retry the saved edit.\n\nTransitionInput is an object with kind plus the parameters returned by ListTransitions; omitted parameters use catalog defaults. Unknown kinds and invalid parameters return INVALID_TRANSITION_PARAM with available parameters. Effects: dissolve; dip color black/white default black; push and wipe direction left/right/up/down default left; wipe softness 0–1 default 0; iris centerX/centerY 0–1 default 0.5; blinds integer count 2–64 default 8 and orientation vertical/horizontal default vertical; blur radius 0–100 pixels at 1080-pixel frame height default 24; zoom direction in/out default in, amount 0.1–3 default 1, blur 0–1 default 0.5; clock direction clockwise/counterclockwise default clockwise, startAngle 0–360 degrees default 0 (twelve o'clock), softness 0–1 default 0; flash color white/black default white, intensity 0–1 default 1. Zoom blur uses up to eight radial samples per shot and is slower on server rendering. Join options and UpdateJoin patches accept only length and effect. Effect updates replace the effect object and apply defaults for omitted parameters.\n\nMinimal example on an existing visual track with adjacent clips left and right: `Print(ListTransitions()); const j = Join(left, right, {length: 0.5, effect: {kind: \"dissolve\"}}); Print(GetTimeline().joins); Preview([GetItem(right).start + 0.25]);` Use `UpdateJoin(j, {length: 0.8})` to adjust it in a later edit or `DeleteJoin(j)` to restore the cut. Preview uses server-rendered frames and includes joins. Per-clip transitionIn/transitionOut remain separate entrance/exit effects.\n\n#### Insert fields (ItemInit)\n\nEvery item requires `type` and `start`. Times used for editing are seconds and snap to the project frame rate: start, length, sourceIn, fadeIn/fadeOut, transition length, keyframe at, reveal delay/stagger/duration. Keyframe and reveal times are relative to the clip start. Video/audio may omit length to use the remaining source duration; other types require length.\n\n| type | Required fields beyond type/start | Optional fields |\n| --- | --- | --- |\n| video | media | length, sourceIn, playback, volumeDb, transform, fit, blend, animate, animation, effects, mask, transitionIn, transitionOut |\n| image | media, length | transform, fit, blend, animate, animation, effects, mask, transitionIn, transitionOut |\n| text | text, length | style, transform, blend, reveal, animate, animation, effects, mask, transitionIn, transitionOut |\n| color | color, length | transform, fill, blend, animate, animation, effects, mask, transitionIn, transitionOut |\n| shape | shape, length, width, height, fill | radius, stroke, transform, blend, animate, animation, effects, mask, transitionIn, transitionOut |\n| audio | media | length, sourceIn, playback, volumeDb, gain, fadeIn, fadeOut, duck |\n| caption | text, length | — |\n\nVisual Insert/Update also accepts `blend`: `normal` (default), `screen`, `multiply`, `overlay`, or `add`; set it to null in Update to clear it. During a Join overlap, both inputs render with normal blending. Video tracks accept video/image/text/color/shape; audio and caption tracks accept their corresponding type. Media is `{libraryId: string, assetId: string}` from a bound library. sourceIn defaults to 0, volumeDb to 0 dB, audio fades to 0 seconds. fit defaults to contain: contain fits the whole image, cover fills and crops, fill stretches, none keeps native dimensions.\n\n| Field | Value |\n| --- | --- |\n| transform | Partial `{x, y, scale, rotation, opacity, crop, blur}`. x/y are normalized canvas center coordinates (default 0.5); scale 1 is fitted size; rotation is degrees (default 0); opacity is 0–1 (default 1). crop is `{top,right,bottom,left}`. blur is 0–100 pixels at 1080-pixel frame height. |\n| style | Partial `{fontFamily, fontSize, fontWeight, color, fill, stroke, strokes, shadows, glow, background, align, maxWidth, position, margin}`. fill accepts a color or linear/radial gradient across the entire text bounding box. strokes draw outside to inside; at most 4, width 0–40. shadows accepts at most 4 `{color,x,y,blur}` entries; blur is 0–100. glow is `{color,radius,strength}` with radius 0–100 and strength 0–1. All dimensions use pixels at 1080 frame height and scale with the text. Glow and large shadow blur increase render time. Invalid colors or ranges return actionable INVALID_STYLE errors. `ListFonts()` discovers family, available weights, scripts and bundled/catalog source. Text and captions share the style fields; caption style additionally supports highlightColor and maxLines: 2. |\n| animate | An object keyed by x, y, scale, rotation, opacity or blur. Each value is an array of `{at: number, value: number, ease?: Ease}` sorted by at with distinct frame-snapped times. Values hold before the first and after the last keyframe, overriding the static transform. |\n| animation | `{in?: AnimationUse, out?: AnimationUse, loop?: AnimationUse}` on visual clips. Each use is `{preset: string, duration?: number, ...params}`; duration and parameter units follow `ListAnimations()`. Presets replace existing animate and reveal when applied. Update accepts `animation: null` to clear the preset and its generated effects. |\n| Ease | linear, in, out, inOut, `{bezier: [x1,y1,x2,y2]}` or `{spring: {stiffness, damping, mass?}}`. Easing shapes the segment arriving at that keyframe; springs may overshoot. |\n| reveal | `{by, delay?: number, stagger: number, duration: number, from: {y?, opacity?, scale?, blur?}, ease?: Ease}`. by selects char, word or line. Unit k starts at delay + k * stagger and takes duration seconds to reach its resting state; from.y is a fraction of font size. |\n| fill | A color string (#RRGGBB or #RRGGBBAA), `{linear: {angle, stops: [{at,color}, ...]}}` or `{radial: {stops: [{at,color}, ...]}}`. Stop positions are 0–1; angle is degrees, 0 left to right. On color clips, fill replaces color when supplied. |\n| shape, width, height, radius, stroke | shape is rect or ellipse. width/height are fractions of canvas width/height before scaling. radius rounds rect corners in pixels at 1080-pixel frame height. stroke is `{color: string, width: number}`. |\n| transitionIn, transitionOut | `{kind, length: number}` at the clip's beginning/end. length is seconds. fade changes opacity; dissolve blends; push_left/push_right move horizontally; wipe_left reveals horizontally. |\n\n#### Visual effects\n\n`effects` is an ordered stack of at most 8 catalog entries. Call `ListEffects()` to discover the catalog; unknown kinds return `UNKNOWN_EFFECT`, invalid names/values/keyframes return `INVALID_EFFECT_PARAM`, and stacks over 8 return `TOO_MANY_EFFECTS`. Entries include blur, color adjustment, vignette, film grain, chromatic aberration, pixelate, glitch, shake, flash, light leak and built-in `lut` looks; user `.cube` LUTs are not supported. `speed` is cycles per second. Effects run on CPU during export and increase render time. Parameters are discovered with ListEffects(). Catalog entries expose their own parameters through ListEffects(), including `blur` (`radius` 0–100, default 24) and `color_adjust`: `brightness`, `contrast`, `temperature`, and `tint` each range -1–1 (default 0), while `saturation` ranges 0–2 (default 1). Disabled entries are skipped. `color_adjust` uses an SDR-only Rec.709 adjustment matrix with no color management.\n\nNumeric and integer effect parameters accept `keyframes: {parameter: [{at, value, ease?}, ...]}`; times are seconds relative to the clip, snap to frames like `animate`, must be strictly increasing and within clip duration, and values follow that parameter's catalog range. Omitted parameters use catalog defaults. Trim and Split preserve effect keyframes with the same clip-local behavior as `animate`. There are no custom shaders.\n\n`blend` applies to the completed visual layer after its content, effects and `transform.blur`; `add` maps to Skia Plus. The default `normal` path adds no blend layer. During Join overlaps, blending is forced to normal because each input is composed on transparency.\n\n#### Update fields (ItemPatchView)\n\nAll fields are optional; use only fields relevant to the item's type. Supported fields: start, length, sourceIn, playback, volumeDb, transform, fit, text, style, color, fadeIn, fadeOut, duck, animate, reveal, animation, fill, stroke, shape, width, height, radius, transitionIn, transitionOut, effects, blend, mask, gain. Values and units match Insert; set effects or blend to null to clear them. Set animation to null to clear the preset; set animate or reveal to null to remove that effect. Applying a preset replaces existing animate/reveal. Do not set animation together with animate or reveal in one Insert/Update call. Omit a field to preserve it.\n\n#### Animation presets\n\nDiscover the catalog with `ListAnimations()`. Its entries contain id, version, phase (`in`, `out`, `loop`), target (`any` or `text`), name, description, defaultDuration in seconds, and params. Slots may combine one in, one out and one loop preset. A loop runs only in the interval between in and out; if the same property is animated by multiple slots, loop occupies only that middle interval. Text-target presets are entrances. Their duration controls the rhythm per character/word/line, not the total reveal time. Out and loop presets apply to the whole clip, not per text unit.\n\nPresets replace the clip's existing animate and reveal when applied. The source preset is retained, so changing clip length or transform automatically regenerates its keyframes/reveal. If a clip becomes shorter, in/out durations shrink proportionally; when it grows, the requested durations are restored. Split keeps in on the left, out on the right, and loop on both. Writing animate or reveal directly detaches the preset; setting animation to null clears both source and generated effects. Insert/Update reject a call that supplies animation together with animate or reveal.\n\nErrors: UNKNOWN_ANIMATION (unknown preset), INVALID_ANIMATION_PARAM (invalid slot/parameter or frame/keyframe limit), ANIMATION_TOO_LONG (in+out exceed clip length), ANIMATION_TARGET_MISMATCH (text-only preset on a non-text or preset on non-visual clip), ANIMATION_PHASE_MISMATCH (preset in the wrong slot). Each animated property is limited to 600 keyframes; loop duration must be at least 4 frames. `ANIMATION_TOO_LONG` is avoided during later length changes by proportional fitting.\n\n#### Speed, reverse and freeze\n\nVideo/audio Insert and Update accept playback as `{kind: \"rate\", rate: number, direction: \"forward\" | \"reverse\", audio: \"preservePitch\" | \"resample\" | \"mute\"}` or `{kind: \"freeze\"}`. Rate is finite and inclusive 0.25–4. Omitted playback defaults to 1× forward with preservePitch; supply the complete rate object when changing playback. preservePitch keeps pitch, resample changes pitch with speed, mute removes audio. Reverse requires explicit audio: \"mute\"; preservePitch/resample are rejected with UNSUPPORTED_PLAYBACK rather than silently muted. Freeze holds sourceIn and is silent. GetItem/GetTimeline echo playback and the source interval in seconds; sourceOut is exclusive even for reverse and equals sourceIn for freeze.\n\nUpdate of playback keeps output length unless length is also supplied. SetSpeed preserves direction/audio, rejects frozen and non-video/audio clips, and requires keep: \"source\" or \"duration\". keep: \"source\" computes round(consumed source / new rate × fps) frames, falling back to floor if rounding would exceed the source end; the returned length/sourceOut are actual frame-rounded seconds. keep: \"duration\" keeps output length and changes source consumption. Length conflicts fail with OVERLAP; move/shorten the conflicting clip, keep duration, or explicitly use ripple: true to shift following clips on the same track. Source overflow fails with OUT_OF_SOURCE; rate limits fail with RATE_OUT_OF_RANGE. Unknown playback fields and SetSpeed options are rejected with UNKNOWN_FIELD; options only accept keep and boolean ripple.\n\nExample for an existing four-second video/audio clip id: `Print(SetSpeed(id, 0.5, {keep: \"source\"})); Print(SetSpeed(id, 2, {keep: \"source\"}));` returns lengths 8 then 2, keeping the same source interval. Reverse: `Update(id, {playback: {kind: \"rate\", rate: 1, direction: \"reverse\", audio: \"mute\"}})`. Freeze: `Update(id, {playback: {kind: \"freeze\"}})`. Ensure enough source remains for the chosen length/rate. Browser reverse playback currently displays a placeholder; server-rendered Preview/frames and exports support reverse normally. Speed-adjusted audio is generated asynchronously after the edit transaction commits; exports wait for that audio before rendering.\n\n#### Script names versus HTTP response names\n\nUse camelCase inside scripts, including nested objects. HTTP request/response JSON outside script source uses snake_case. Map media.library_id → media.libraryId, media.asset_id → media.assetId, source_in → sourceIn, volume_db → volumeDb, fade_in/fade_out → fadeIn/fadeOut, transition_in/transition_out → transitionIn/transitionOut, font_family/font_size/font_weight/max_width → fontFamily/fontSize/fontWeight/maxWidth, gain_db → gainDb, highlight_color/max_lines → highlightColor/maxLines. Fields such as animate, reveal, fill, stroke, at and length retain their spelling. GetTimeline/GetItem already return camelCase compact views; the expanded retrieveTimeline HTTP response is not an Insert object.\n\nUnrecognized script fields fail with OPS_REJECTED and rejection code UNKNOWN_FIELD; snake_case mistakes suggest the corresponding camelCase name. The error message lists each rejection's #opIndex, code and reason. Correct the named fields and retry the saved edit; do not assume an ignored field applied an effect.\n",
10242
10260
  "http": "POST",
10243
10261
  "path": "/cut/v1/projects/{project_id}:execute",
10244
10262
  "streaming": "no",
@@ -11738,7 +11756,7 @@ export const operations = [
11738
11756
  "resource": "knowledge.vectorStores",
11739
11757
  "method": "create",
11740
11758
  "summary": "Create knowledge base",
11741
- "description": "Create a knowledge base, optionally starting ingestion of uploaded file_ids in the same call; no separate attachment or batch is needed for those files. Use the returned id with vectorStores.files.retrieve to poll each attachment until completed, failed or cancelled; store status=completed alone does not mean every file succeeded. Each file accepts up to 52428800 bytes and 5000000 estimated tokens; each account holds up to 100 active/nondeleted stores. Minimal body: {\"name\":\"Refund policies\"}.",
11759
+ "description": "Create a knowledge base, optionally starting ingestion of uploaded file_ids in the same call; no separate attachment or batch is needed for those files. Use the returned id with vectorStores.files.retrieve to poll each attachment until completed, failed or cancelled; store status=completed alone does not mean every file succeeded. PDF files accept up to 536870912 bytes (512 MiB), while other formats accept up to 52428800 bytes (50 MiB), constrained by Router conversion; every file is limited to 5000000 estimated tokens; each account holds up to 100 active/nondeleted stores. Minimal body: {\"name\":\"Refund policies\"}.",
11742
11760
  "http": "POST",
11743
11761
  "path": "/knowledge/v1/vector_stores",
11744
11762
  "streaming": "no",
@@ -11777,7 +11795,7 @@ export const operations = [
11777
11795
  "name": "chunking_strategy",
11778
11796
  "type": "object",
11779
11797
  "required": false,
11780
- "description": "auto resolves to static with 800 estimated tokens and 400 overlap tokens. Unlike OpenAI vector stores, token counts are estimates; each Han character counts as one, and other whitespace-delimited words count as their UTF-16 length divided by four, rounded up."
11798
+ "description": "Native attachment strategy. auto uses static chunks of 800 estimated tokens with 400 overlap; static supplies explicit chunk sizes; hierarchical indexes child chunks and supplies bounded parent context. Existing attachments are reused unchanged; remove and reattach a file to change its strategy."
11781
11799
  },
11782
11800
  {
11783
11801
  "name": "description",
@@ -12124,7 +12142,7 @@ export const operations = [
12124
12142
  "resource": "knowledge.vectorStores.files",
12125
12143
  "method": "create",
12126
12144
  "summary": "Add file",
12127
- "description": "Attach an uploaded File for asynchronous ingestion, then poll this attachment until status is completed, failed or cancelled before searching. Each file accepts up to 52428800 bytes and 5000000 estimated tokens; chunk sizes use estimated tokens rather than a model tokenizer. Text, Markdown, CSV, JSON, HTML, PDF, DOCX, PPTX, XLSX and PNG/JPEG/GIF/WebP images can be extracted; audio and video uploads are not knowledge documents. Images may yield generated descriptions rather than verbatim OCR. auto chunking resolves to static 800/400; explicit sizes are 100–4096 with overlap at most half the size. Each store holds at most 10000 attached files. Reattaching the same file returns its existing record without applying new attributes or chunking; inspect last_error after failure.",
12145
+ "description": "Attach an uploaded File for asynchronous ingestion, then poll this attachment until status is completed, failed or cancelled before searching. PDF files accept up to 536870912 bytes (512 MiB), while other formats accept up to 52428800 bytes (50 MiB), constrained by Router conversion; every file is limited to 5000000 estimated tokens; chunk sizes use estimated tokens rather than a model tokenizer. Text, Markdown, CSV, JSON, HTML, PDF, DOCX, PPTX, XLSX and PNG/JPEG/GIF/WebP images can be extracted; audio and video uploads are not knowledge documents. Images may yield generated descriptions rather than verbatim OCR. auto chunking resolves to static 800/400; explicit sizes are 100–4096 with overlap at most half the size. Each store holds at most 10000 attached files. Reattaching the same file returns its existing record without applying new attributes or chunking; inspect last_error after failure.",
12128
12146
  "http": "POST",
12129
12147
  "path": "/knowledge/v1/vector_stores/{vector_store_id}/files",
12130
12148
  "streaming": "no",
@@ -12156,7 +12174,7 @@ export const operations = [
12156
12174
  "name": "chunking_strategy",
12157
12175
  "type": "object",
12158
12176
  "required": false,
12159
- "description": "auto resolves to static with 800 estimated tokens and 400 overlap tokens. Unlike OpenAI vector stores, token counts are estimates; each Han character counts as one, and other whitespace-delimited words count as their UTF-16 length divided by four, rounded up."
12177
+ "description": "Native attachment strategy. auto uses static chunks of 800 estimated tokens with 400 overlap; static supplies explicit chunk sizes; hierarchical indexes child chunks and supplies bounded parent context. Existing attachments are reused unchanged; remove and reattach a file to change its strategy."
12160
12178
  }
12161
12179
  ]
12162
12180
  }
@@ -12463,11 +12481,23 @@ export const operations = [
12463
12481
  ],
12464
12482
  "query": []
12465
12483
  },
12484
+ {
12485
+ "resource": "media.generation.capabilities",
12486
+ "method": "list",
12487
+ "summary": "Get generation capabilities",
12488
+ "description": "Read supported text-to-video intent, default model, duration and aspect-ratio limits, per-library concurrency and candidate retention. Generation is charged per second; unsaved candidates expire after 7 days.",
12489
+ "http": "GET",
12490
+ "path": "/media/v1/generation/capabilities",
12491
+ "streaming": "no",
12492
+ "pagination": false,
12493
+ "pathParams": [],
12494
+ "query": []
12495
+ },
12466
12496
  {
12467
12497
  "resource": "media.libraries",
12468
12498
  "method": "list",
12469
12499
  "summary": "List libraries",
12470
- "description": "List libraries owned by the caller, newest first. By default, deleting and deleted libraries are excluded; use status=deleting to find libraries awaiting purge. All supplied label pairs must match.",
12500
+ "description": "Read a caller-owned library’s current settings, usage and lifecycle status. A deleting library remains readable; missing, foreign or purged libraries return LIBRARY_NOT_FOUND.",
12471
12501
  "http": "GET",
12472
12502
  "path": "/media/v1/libraries",
12473
12503
  "streaming": "no",
@@ -12549,7 +12579,7 @@ export const operations = [
12549
12579
  "resource": "media.libraries",
12550
12580
  "method": "delete",
12551
12581
  "summary": "Delete library",
12552
- "description": "Soft-delete an active library, returning its deleting status and purge_at deadline. Asset operations and delivery become unavailable; the library can be restored before purge_at. Repeated deletion while deleting returns the current library.",
12582
+ "description": "Restore a deleting library before its purge_at deadline. The library becomes active again and deleted_at and purge_at are cleared; expired or non-deleting libraries cannot be restored.",
12553
12583
  "http": "DELETE",
12554
12584
  "path": "/media/v1/libraries/{library_id}",
12555
12585
  "streaming": "no",
@@ -12567,7 +12597,7 @@ export const operations = [
12567
12597
  "resource": "media.libraries",
12568
12598
  "method": "retrieve",
12569
12599
  "summary": "Get library",
12570
- "description": "Read a caller-owned library’s current settings, usage and lifecycle status. A deleting library remains readable; missing, foreign or purged libraries return LIBRARY_NOT_FOUND.",
12600
+ "description": "Update an active library’s supplied settings. Labels replace the complete map; understanding settings and model roles merge with current values. Changing the embedding model is rejected while assets exist.",
12571
12601
  "http": "GET",
12572
12602
  "path": "/media/v1/libraries/{library_id}",
12573
12603
  "streaming": "no",
@@ -12585,7 +12615,7 @@ export const operations = [
12585
12615
  "resource": "media.libraries",
12586
12616
  "method": "update",
12587
12617
  "summary": "Update library",
12588
- "description": "Update an active library’s supplied settings. Labels replace the complete map; understanding settings and model roles merge with current values. Changing the embedding model is rejected while assets exist.",
12618
+ "description": "Update an active library. Set hotwords for spelling evidence in subsequent transcripts; [] disables inferred vocabulary. Transcript understanding calls the timestamped ASR, optional reference ASR and correction model through the existing metered model path. Reprocess assets to apply new settings to existing transcripts.",
12589
12619
  "http": "PATCH",
12590
12620
  "path": "/media/v1/libraries/{library_id}",
12591
12621
  "streaming": "no",
@@ -12639,7 +12669,7 @@ export const operations = [
12639
12669
  "resource": "media.libraries.assets",
12640
12670
  "method": "list",
12641
12671
  "summary": "List assets",
12642
- "description": "List assets in an active library, newest first, optionally filtering by exact folder and stored resource type. Continue using next_cursor; video includes audio-only assets.",
12672
+ "description": "Upload content into an active library and return a Cloudinary-compatible resource. Use file for a multipart file, data URI, public HTTPS URL or same-owner file identifier. Reusing public_id overwrites by default; overwrite=false returns the existing resource. Chunk uploads require both chunk headers.",
12643
12673
  "http": "GET",
12644
12674
  "path": "/media/v1/libraries/{library_id}/assets",
12645
12675
  "streaming": "no",
@@ -12687,7 +12717,7 @@ export const operations = [
12687
12717
  "resource": "media.libraries.assets",
12688
12718
  "method": "create",
12689
12719
  "summary": "Upload asset",
12690
- "description": "Upload content into an active library and return a Cloudinary-compatible resource. Use file for a multipart file, data URI, public HTTPS URL or same-owner file identifier. Reusing public_id overwrites by default; overwrite=false returns the existing resource. Chunk uploads require both chunk headers.",
12720
+ "description": " For understanding, Media generates proxies for video sources of 25 MB or more and audio-only sources of 100 MB or more; originals remain available unchanged. The duration limit is 10 minutes. A video proxy still above 95 MB after recompression, or a source exceeding the duration limit, is reported as UNSUPPORTED with the limit in the failure message. Proxy preparation uses the organization’s metered sandbox resources.",
12691
12721
  "http": "POST",
12692
12722
  "path": "/media/v1/libraries/{library_id}/assets",
12693
12723
  "streaming": "no",
@@ -12732,7 +12762,7 @@ export const operations = [
12732
12762
  "name": "asset_folder",
12733
12763
  "type": "string",
12734
12764
  "required": false,
12735
- "description": "Organizational folder path, separate from public_id. Empty selects the root; leading or trailing slashes, empty path segments, and . or .. segments are rejected."
12765
+ "description": "Organizational folder path, separate from public_id. Empty selects the root; leading or trailing slashes, empty path segments, and . or .. segments are rejected. New path segments containing U+FFFD or consisting only of question marks are rejected with INVALID_PARAMS; send UTF-8 names. Existing affected folders remain readable and assets can be moved out."
12736
12766
  },
12737
12767
  {
12738
12768
  "name": "use_filename",
@@ -12811,7 +12841,7 @@ export const operations = [
12811
12841
  "resource": "media.libraries.assets.import",
12812
12842
  "method": "create",
12813
12843
  "summary": "Import file",
12814
- "description": "Copy source content into an active library using upload options and return the full native Asset. The imported asset is independent of the source after copying. Reusing public_id follows overwrite semantics.",
12844
+ "description": "Copy a File into an independent Media asset. New assets default to organization-private delivery (type=authenticated); explicitly set type=upload for public originals and derivatives. Omitting type on overwrite preserves the current type. Deleting the source File does not delete this copy. For understanding, Media generates proxies for video sources of 25 MB or more and audio-only sources of 100 MB or more; originals remain available unchanged. The duration limit is 10 minutes. A video proxy still above 95 MB after recompression, or a source exceeding the duration limit, is reported as UNSUPPORTED with the limit in the failure message. Proxy preparation uses the organization’s metered sandbox resources.",
12815
12845
  "http": "POST",
12816
12846
  "path": "/media/v1/libraries/{library_id}/assets/import",
12817
12847
  "streaming": "no",
@@ -12831,7 +12861,7 @@ export const operations = [
12831
12861
  "name": "file_id",
12832
12862
  "type": "string",
12833
12863
  "required": true,
12834
- "description": "File ID to copy into this library instead of file bytes. This independent copy defaults to public delivery; set type=authenticated for private delivery. Deleting the source File does not delete this asset."
12864
+ "description": "File ID to copy into this library instead of file bytes. This independent copy defaults to organization-private delivery (type=authenticated); explicitly set type=upload for public delivery. Deleting the source File does not delete this asset."
12835
12865
  },
12836
12866
  {
12837
12867
  "name": "public_id",
@@ -12855,7 +12885,7 @@ export const operations = [
12855
12885
  "name": "asset_folder",
12856
12886
  "type": "string",
12857
12887
  "required": false,
12858
- "description": "Organizational folder path, separate from public_id. Empty selects the root; leading or trailing slashes, empty path segments, and . or .. segments are rejected."
12888
+ "description": "Organizational folder path, separate from public_id. Empty selects the root; leading or trailing slashes, empty path segments, and . or .. segments are rejected. New path segments containing U+FFFD or consisting only of question marks are rejected with INVALID_PARAMS; send UTF-8 names. Existing affected folders remain readable and assets can be moved out."
12859
12889
  },
12860
12890
  {
12861
12891
  "name": "use_filename",
@@ -12934,7 +12964,7 @@ export const operations = [
12934
12964
  "resource": "media.libraries.assets",
12935
12965
  "method": "delete",
12936
12966
  "summary": "Delete asset",
12937
- "description": "Delete an asset from the library so it is no longer readable, searchable or deliverable. This removes the asset rather than placing it in the library’s restoration window; a missing asset returns ASSET_NOT_FOUND.",
12967
+ "description": "Queue reprocessing of the asset’s current version and return its updated state immediately. Omit kinds to retry failed tasks and legacy source-size unsupported tasks; explicit kinds rerun applicable completed tasks and recoverable source-size unsupported tasks. Other unsupported causes remain unchanged. Replaced understandings become superseded, and processing finishes asynchronously.",
12938
12968
  "http": "DELETE",
12939
12969
  "path": "/media/v1/libraries/{library_id}/assets/{asset_id}",
12940
12970
  "streaming": "no",
@@ -12957,7 +12987,7 @@ export const operations = [
12957
12987
  "resource": "media.libraries.assets",
12958
12988
  "method": "retrieve",
12959
12989
  "summary": "Get asset",
12960
- "description": "Read a non-deleted asset by its asset_id in an active library, including content hashes, processing progress and available previews. Missing or deleted assets return ASSET_NOT_FOUND.",
12990
+ "description": "Update an asset’s supplied metadata fields. Tags and context replace their current collections; an empty collection clears them. Moving asset_folder or changing display_name preserves public_id and delivery URLs.",
12961
12991
  "http": "GET",
12962
12992
  "path": "/media/v1/libraries/{library_id}/assets/{asset_id}",
12963
12993
  "streaming": "no",
@@ -12980,7 +13010,7 @@ export const operations = [
12980
13010
  "resource": "media.libraries.assets",
12981
13011
  "method": "update",
12982
13012
  "summary": "Update asset",
12983
- "description": "Update an asset’s supplied metadata fields. Tags and context replace their current collections; an empty collection clears them. Moving asset_folder or changing display_name preserves public_id and delivery URLs.",
13013
+ "description": "Delete an asset from the library so it is no longer readable, searchable or deliverable. This removes the asset rather than placing it in the library’s restoration window; a missing asset returns ASSET_NOT_FOUND.",
12984
13014
  "http": "PATCH",
12985
13015
  "path": "/media/v1/libraries/{library_id}/assets/{asset_id}",
12986
13016
  "streaming": "no",
@@ -13011,7 +13041,7 @@ export const operations = [
13011
13041
  "name": "asset_folder",
13012
13042
  "type": "string",
13013
13043
  "required": false,
13014
- "description": "Organizational folder path, separate from public_id. Empty selects the root; leading or trailing slashes, empty path segments, and . or .. segments are rejected."
13044
+ "description": "Organizational folder path, separate from public_id. Empty selects the root; leading or trailing slashes, empty path segments, and . or .. segments are rejected. New path segments containing U+FFFD or consisting only of question marks are rejected with INVALID_PARAMS; send UTF-8 names. Existing affected folders remain readable and assets can be moved out."
13015
13045
  },
13016
13046
  {
13017
13047
  "name": "tags",
@@ -13029,11 +13059,57 @@ export const operations = [
13029
13059
  ]
13030
13060
  }
13031
13061
  },
13062
+ {
13063
+ "resource": "media.libraries.assets.frames",
13064
+ "method": "create",
13065
+ "summary": "Create frame URLs",
13066
+ "description": "Media creates JPEG frame URLs for inspecting one or more moments in a video without downloading the original. Obtain library_id from libraries and asset_id plus duration from assets. Send 1–20 integer microsecond timestamps strictly below duration, for example {\"at_micros\":[0,1000000],\"width\":640}. Only video assets are supported; audio and images return INVALID_PARAMS. Width defaults to 640 and accepts 160, 320 or 640. This read operation does not store a new asset or rerun understanding. Fetch each returned URL to obtain the frame; delivery usage follows media pricing. Authenticated links expire after 300 seconds; upload links remain public and permanent. Reissue expired links. Foreign libraries and assets return 404 without revealing their existence.",
13067
+ "http": "POST",
13068
+ "path": "/media/v1/libraries/{library_id}/assets/{asset_id}/frames",
13069
+ "streaming": "no",
13070
+ "pagination": false,
13071
+ "pathParams": [
13072
+ {
13073
+ "name": "library_id",
13074
+ "sdkName": "library_id",
13075
+ "description": "Library identifier returned by library creation or listing; must be accessible to the current credential."
13076
+ },
13077
+ {
13078
+ "name": "asset_id",
13079
+ "sdkName": "asset_id",
13080
+ "description": "Video asset identifier returned by asset upload or listing in this library; read its duration before choosing timestamps."
13081
+ }
13082
+ ],
13083
+ "query": [],
13084
+ "body": {
13085
+ "required": true,
13086
+ "fields": [
13087
+ {
13088
+ "name": "at_micros",
13089
+ "type": "array",
13090
+ "itemType": "integer",
13091
+ "required": true,
13092
+ "description": "One to twenty timestamps in microseconds from the start of the video. Each must be a nonnegative safe integer strictly below the video duration; order and duplicates are preserved."
13093
+ },
13094
+ {
13095
+ "name": "width",
13096
+ "type": "integer",
13097
+ "enum": [
13098
+ 160,
13099
+ 320,
13100
+ 640
13101
+ ],
13102
+ "required": false,
13103
+ "description": "Maximum JPEG width in pixels: 160 is a small thumbnail, 320 a preview and 640 a larger preview. Defaults to 640; larger widths are unavailable."
13104
+ }
13105
+ ]
13106
+ }
13107
+ },
13032
13108
  {
13033
13109
  "resource": "media.libraries.assets.reprocess",
13034
13110
  "method": "create",
13035
13111
  "summary": "Reprocess asset",
13036
- "description": "Queue reprocessing of the asset’s current version and return its updated state immediately. Omit kinds to retry failed tasks; explicit kinds rerun applicable completed tasks. Replaced understandings become superseded, and processing finishes asynchronously.",
13112
+ "description": " For understanding, Media generates proxies for video sources of 25 MB or more and audio-only sources of 100 MB or more; originals remain available unchanged. The duration limit is 10 minutes. A video proxy still above 95 MB after recompression, or a source exceeding the duration limit, is reported as UNSUPPORTED with the limit in the failure message. Proxy preparation uses the organization’s metered sandbox resources.",
13037
13113
  "http": "POST",
13038
13114
  "path": "/media/v1/libraries/{library_id}/assets/{asset_id}/reprocess",
13039
13115
  "streaming": "no",
@@ -13065,7 +13141,7 @@ export const operations = [
13065
13141
  "embedding"
13066
13142
  ],
13067
13143
  "required": false,
13068
- "description": "Processing tasks to rerun. Omit to retry failed tasks only; explicit kinds rerun applicable ready, failed or unsupported tasks. Pending and running tasks are unchanged; an empty array does nothing."
13144
+ "description": "Processing tasks to rerun. Omit to retry failed tasks and legacy source-size unsupported tasks; explicit kinds rerun applicable ready or failed tasks and recoverable source-size unsupported tasks. Other unsupported causes remain unchanged. Pending and running tasks are unchanged; an empty array does nothing."
13069
13145
  }
13070
13146
  ]
13071
13147
  }
@@ -13074,7 +13150,7 @@ export const operations = [
13074
13150
  "resource": "media.libraries.assets.understandings",
13075
13151
  "method": "list",
13076
13152
  "summary": "List understandings",
13077
- "description": "List an asset’s understanding results in creation order. By default only current, non-superseded results are returned; use include_superseded=true for history or kind to select an output type.",
13153
+ "description": "List understanding results for an asset, ordered by creation time. Use the cursor to continue; include_superseded also returns replaced records. The optional shots array contains current-version shot boundaries and per-shot captions, scene, location guesses, visible text and confidence flags; it is absent on legacy records. Location guesses and folder mismatch are unverified hints. Correction-enabled transcripts expose text_original, corrected text and a correction audit. Their timed data array remains suitable for subtitles. Reference failure is marked missing; correction failure returns the original verbatim. Model inference uses the existing metered model path.",
13078
13154
  "http": "GET",
13079
13155
  "path": "/media/v1/libraries/{library_id}/assets/{asset_id}/understandings",
13080
13156
  "streaming": "no",
@@ -13106,10 +13182,13 @@ export const operations = [
13106
13182
  "tags",
13107
13183
  "ocr",
13108
13184
  "transcript",
13109
- "frame"
13185
+ "frame",
13186
+ "overview",
13187
+ "audio",
13188
+ "embedding"
13110
13189
  ],
13111
13190
  "required": false,
13112
- "description": "Filter result kind: caption is a visual description, tags are recognized labels, ocr is recognized image text, transcript is speech text, and frame describes a video segment."
13191
+ "description": "Return one output kind: caption is a visual description, tags are generated labels, ocr is visible text, transcript is speech, frame is a video shot, overview is a video summary, audio is sampled audio understanding, and embedding reports a failed embedding step."
13113
13192
  },
13114
13193
  {
13115
13194
  "name": "cursor",
@@ -13129,7 +13208,7 @@ export const operations = [
13129
13208
  "resource": "media.libraries.assets",
13130
13209
  "method": "batch",
13131
13210
  "summary": "Batch assets alias",
13132
- "description": "Alias of batch creation. Apply one metadata or deletion action to ids or a frozen expression selection asynchronously; poll the returned job id to inspect completion and item failures.",
13211
+ "description": "Queue a frozen selection for tagging, untagging, context replacement, moving, deleting or reprocessing. IDs are limited to 1000; use an expression for larger selections, subject to the search scan budget. reprocess starts at most 30 assets per rolling minute per library. Only retryable failed steps and legacy source-size unsupported steps rerun. Omit kinds to inspect all recoverable steps, or supply kinds to narrow them. Other unsupported, permanent and completed steps remain unchanged; a permanent output blocks only its own step. Assets without any selected recoverable step count as failed items without starting understanding. Poll the returned job id; done counts accepted launches, not successful model inference. Staff Admin only permits reprocess and requires a nonblank reason. Example: {\"action\":\"reprocess\",\"selector\":{\"expression\":\"processing_state=failed AND failure_code=UPSTREAM_FAILED\"}}. For understanding, Media generates proxies for video sources of 25 MB or more and audio-only sources of 100 MB or more; originals remain available unchanged. The duration limit is 10 minutes. A video proxy still above 95 MB after recompression, or a source exceeding the duration limit, is reported as UNSUPPORTED with the limit in the failure message. Proxy preparation uses the organization’s metered sandbox resources.",
13133
13212
  "http": "POST",
13134
13213
  "path": "/media/v1/libraries/{library_id}/assets:batch",
13135
13214
  "streaming": "no",
@@ -13150,6 +13229,12 @@ export const operations = [
13150
13229
  "type": "object",
13151
13230
  "required": true,
13152
13231
  "description": "Select assets by ids or by expression, never both. Expression results and exclusions are resolved when the job is created."
13232
+ },
13233
+ {
13234
+ "name": "reason",
13235
+ "type": "string",
13236
+ "required": false,
13237
+ "description": "Audit reason for the operation; required for staff Admin reprocessing and recorded with the initiating actor. Nonblank, at most 2000 characters."
13153
13238
  }
13154
13239
  ]
13155
13240
  }
@@ -13158,7 +13243,7 @@ export const operations = [
13158
13243
  "resource": "media.libraries.batches",
13159
13244
  "method": "create",
13160
13245
  "summary": "Create batch",
13161
- "description": "Create an asynchronous batch for tagging, untagging, replacing context, moving or deleting assets. Select ids or an expression; selection is frozen at creation. Poll the returned job id for completion and per-item failures.",
13246
+ "description": "Queue a frozen selection for tagging, untagging, context replacement, moving, deleting or reprocessing. IDs are limited to 1000; use an expression for larger selections, subject to the search scan budget. reprocess starts at most 30 assets per rolling minute per library. Only retryable failed steps and legacy source-size unsupported steps rerun. Omit kinds to inspect all recoverable steps, or supply kinds to narrow them. Other unsupported, permanent and completed steps remain unchanged; a permanent output blocks only its own step. Assets without any selected recoverable step count as failed items without starting understanding. Poll the returned job id; done counts accepted launches, not successful model inference. Staff Admin only permits reprocess and requires a nonblank reason. Example: {\"action\":\"reprocess\",\"selector\":{\"expression\":\"processing_state=failed AND failure_code=UPSTREAM_FAILED\"}}. For understanding, Media generates proxies for video sources of 25 MB or more and audio-only sources of 100 MB or more; originals remain available unchanged. The duration limit is 10 minutes. A video proxy still above 95 MB after recompression, or a source exceeding the duration limit, is reported as UNSUPPORTED with the limit in the failure message. Proxy preparation uses the organization’s metered sandbox resources.",
13162
13247
  "http": "POST",
13163
13248
  "path": "/media/v1/libraries/{library_id}/batches",
13164
13249
  "streaming": "no",
@@ -13179,6 +13264,12 @@ export const operations = [
13179
13264
  "type": "object",
13180
13265
  "required": true,
13181
13266
  "description": "Select assets by ids or by expression, never both. Expression results and exclusions are resolved when the job is created."
13267
+ },
13268
+ {
13269
+ "name": "reason",
13270
+ "type": "string",
13271
+ "required": false,
13272
+ "description": "Audit reason for the operation; required for staff Admin reprocessing and recorded with the initiating actor. Nonblank, at most 2000 characters."
13182
13273
  }
13183
13274
  ]
13184
13275
  }
@@ -13187,7 +13278,7 @@ export const operations = [
13187
13278
  "resource": "media.libraries.batches",
13188
13279
  "method": "retrieve",
13189
13280
  "summary": "Get batch",
13190
- "description": "Read a batch job’s status, successful and failed item counts, and a bounded list of failed items. Use the id returned by batch creation; a job outside this library is not found.",
13281
+ "description": "Alias of batch creation. Apply one metadata or deletion action to ids or a frozen expression selection asynchronously; poll the returned job id to inspect completion and item failures.",
13191
13282
  "http": "GET",
13192
13283
  "path": "/media/v1/libraries/{library_id}/batches/{job_id}",
13193
13284
  "streaming": "no",
@@ -13245,7 +13336,7 @@ export const operations = [
13245
13336
  "resource": "media.libraries.events",
13246
13337
  "method": "list",
13247
13338
  "summary": "List events",
13248
- "description": "Read library events in sequence order, including while the library is deleting. Page forward with asc and after_seq, or backward with desc and before_seq; never combine the two sequence cursors.",
13339
+ "description": "Read library events in sequence order for observing asset writes and understanding progress. Obtain library_id from creation or listing; continue with after_seq for asc or before_seq for desc, without combining both. Use next_cursor when supplied. Reads do not start or retry understanding.",
13249
13340
  "http": "GET",
13250
13341
  "path": "/media/v1/libraries/{library_id}/events",
13251
13342
  "streaming": "no",
@@ -13292,7 +13383,7 @@ export const operations = [
13292
13383
  "resource": "media.libraries.folders",
13293
13384
  "method": "list",
13294
13385
  "summary": "List folders",
13295
- "description": "List all immediate child folders under parent, or under the root when parent is omitted. Counts include descendant assets. The result is unpaginated; limit and cursor are rejected.",
13386
+ "description": "undefined understood_count includes ready and partial assets; failed_count includes failed assets. Both accumulate descendants. counts_complete is false during historical backfill.",
13296
13387
  "http": "GET",
13297
13388
  "path": "/media/v1/libraries/{library_id}/folders",
13298
13389
  "streaming": "no",
@@ -13313,11 +13404,155 @@ export const operations = [
13313
13404
  }
13314
13405
  ]
13315
13406
  },
13407
+ {
13408
+ "resource": "media.libraries.generations",
13409
+ "method": "create",
13410
+ "summary": "Create video generation",
13411
+ "description": "Create a video.generate job. Generation is charged per second. The response is 202 with a queued Job; poll GET /media/v1/libraries/{library_id}/jobs/{job_id} until terminal, then save successful outputs. Unsaved candidate Files expire after 7 days.",
13412
+ "http": "POST",
13413
+ "path": "/media/v1/libraries/{library_id}/generations",
13414
+ "streaming": "no",
13415
+ "pagination": false,
13416
+ "pathParams": [
13417
+ {
13418
+ "name": "library_id",
13419
+ "sdkName": "library_id",
13420
+ "description": "Library ID returned by creation."
13421
+ }
13422
+ ],
13423
+ "query": [],
13424
+ "body": {
13425
+ "required": true,
13426
+ "fields": [
13427
+ {
13428
+ "name": "intent",
13429
+ "type": "string",
13430
+ "required": true,
13431
+ "description": "Generation operation; v1 accepts only video.generate text-to-video requests."
13432
+ },
13433
+ {
13434
+ "name": "prompt",
13435
+ "type": "string",
13436
+ "required": true,
13437
+ "description": "Text prompt describing the video to generate."
13438
+ },
13439
+ {
13440
+ "name": "count",
13441
+ "type": "integer",
13442
+ "required": false,
13443
+ "description": "Number of videos to generate; defaults to 1 and must be from 1 to 4."
13444
+ },
13445
+ {
13446
+ "name": "duration_seconds",
13447
+ "type": "integer",
13448
+ "required": false,
13449
+ "description": "Requested video duration in seconds; Router validates the model-specific supported durations."
13450
+ },
13451
+ {
13452
+ "name": "aspect_ratio",
13453
+ "type": "string",
13454
+ "required": false,
13455
+ "description": "Requested output aspect ratio; defaults to 16:9 and Router validates model support."
13456
+ },
13457
+ {
13458
+ "name": "model",
13459
+ "type": "string",
13460
+ "required": false,
13461
+ "description": "Router model with video_generation capability; defaults to wan2.7-t2v."
13462
+ },
13463
+ {
13464
+ "name": "save",
13465
+ "type": "string",
13466
+ "enum": [
13467
+ "candidate",
13468
+ "library"
13469
+ ],
13470
+ "required": false,
13471
+ "description": "candidate keeps outputs temporary for explicit save calls; library saves successful outputs automatically."
13472
+ },
13473
+ {
13474
+ "name": "asset_folder",
13475
+ "type": "string",
13476
+ "required": false,
13477
+ "description": "Folder for assets saved automatically or by later save calls; defaults to the library root. New path segments containing U+FFFD or consisting only of question marks are rejected with INVALID_PARAMS; send UTF-8 names. Existing affected folders remain readable and assets can be moved out."
13478
+ },
13479
+ {
13480
+ "name": "tags",
13481
+ "type": "array",
13482
+ "itemType": "string",
13483
+ "required": false,
13484
+ "description": "Tags applied when an output becomes a library asset."
13485
+ },
13486
+ {
13487
+ "name": "understanding",
13488
+ "type": "string",
13489
+ "enum": [
13490
+ "auto",
13491
+ "skip"
13492
+ ],
13493
+ "required": false,
13494
+ "description": "Understanding behavior when a candidate is saved as an asset; defaults to auto."
13495
+ },
13496
+ {
13497
+ "name": "references",
13498
+ "type": "array",
13499
+ "itemType": "object",
13500
+ "required": false,
13501
+ "description": "Not supported in v1; omit this field. Only text-to-video is currently available."
13502
+ }
13503
+ ]
13504
+ }
13505
+ },
13506
+ {
13507
+ "resource": "media.libraries.jobs",
13508
+ "method": "list",
13509
+ "summary": "List jobs",
13510
+ "description": "List batch and video-generation jobs in a library. Filter by status and continue with next_cursor. Poll a generation Job until terminal, then save successful candidate outputs before they expire after 7 days.",
13511
+ "http": "GET",
13512
+ "path": "/media/v1/libraries/{library_id}/jobs",
13513
+ "streaming": "no",
13514
+ "pagination": true,
13515
+ "pathParams": [
13516
+ {
13517
+ "name": "library_id",
13518
+ "sdkName": "library_id",
13519
+ "description": "Library ID returned by creation."
13520
+ }
13521
+ ],
13522
+ "query": [
13523
+ {
13524
+ "name": "status",
13525
+ "type": "string",
13526
+ "enum": [
13527
+ "queued",
13528
+ "running",
13529
+ "completed",
13530
+ "completed_with_errors",
13531
+ "failed",
13532
+ "cancelled"
13533
+ ],
13534
+ "required": false,
13535
+ "description": "Filter jobs by their current status."
13536
+ },
13537
+ {
13538
+ "name": "limit",
13539
+ "type": "integer",
13540
+ "required": false,
13541
+ "description": "Maximum entries in this page, from 1 through 100; defaults to 100."
13542
+ },
13543
+ {
13544
+ "name": "cursor",
13545
+ "type": "string",
13546
+ "required": false,
13547
+ "description": "Job id from the previous page’s next_cursor; omit for the first page."
13548
+ }
13549
+ ]
13550
+ },
13316
13551
  {
13317
13552
  "resource": "media.libraries.jobs",
13318
13553
  "method": "retrieve",
13319
- "summary": "Get job alias",
13320
- "description": "Alias of batch retrieval. Read the job returned by a batch request, including terminal status, successful and failed counts, and individual failure codes.",
13554
+ "summary": "Get job",
13555
+ "description": "Read the current batch or video-generation Job status and progress. For generation, inspect outputs and failures, then save successful candidates before their preview and save window expires after 7 days.",
13321
13556
  "http": "GET",
13322
13557
  "path": "/media/v1/libraries/{library_id}/jobs/{job_id}",
13323
13558
  "streaming": "no",
@@ -13331,16 +13566,101 @@ export const operations = [
13331
13566
  {
13332
13567
  "name": "job_id",
13333
13568
  "sdkName": "job_id",
13334
- "description": "Batch identifier returned by createBatch or batchAssets; resolved within this library."
13569
+ "description": "Job identifier returned by batch creation, video-generation creation or job listing; resolved within this library."
13335
13570
  }
13336
13571
  ],
13337
13572
  "query": []
13338
13573
  },
13574
+ {
13575
+ "resource": "media.libraries.jobs",
13576
+ "method": "cancel",
13577
+ "summary": "Cancel job",
13578
+ "description": "Cancel a queued or running generation job. Already completed outputs remain available to save; poll or read the returned Job to confirm its status.",
13579
+ "http": "POST",
13580
+ "path": "/media/v1/libraries/{library_id}/jobs/{job_id}/cancel",
13581
+ "streaming": "no",
13582
+ "pagination": false,
13583
+ "pathParams": [
13584
+ {
13585
+ "name": "library_id",
13586
+ "sdkName": "library_id",
13587
+ "description": "Library ID returned by creation."
13588
+ },
13589
+ {
13590
+ "name": "job_id",
13591
+ "sdkName": "job_id",
13592
+ "description": "Job identifier returned by batch or generation creation; the job is resolved within the specified library."
13593
+ }
13594
+ ],
13595
+ "query": []
13596
+ },
13597
+ {
13598
+ "resource": "media.libraries.jobs.outputs.save",
13599
+ "method": "create",
13600
+ "summary": "Save generation output",
13601
+ "description": "Save a successful candidate as a library asset. Candidate outputs expire after 7 days; save before expiry. Generation is charged per second when the job runs, not when an output is saved.",
13602
+ "http": "POST",
13603
+ "path": "/media/v1/libraries/{library_id}/jobs/{job_id}/outputs/{index}/save",
13604
+ "streaming": "no",
13605
+ "pagination": false,
13606
+ "pathParams": [
13607
+ {
13608
+ "name": "library_id",
13609
+ "sdkName": "library_id",
13610
+ "description": "Library ID returned by creation."
13611
+ },
13612
+ {
13613
+ "name": "job_id",
13614
+ "sdkName": "job_id",
13615
+ "description": "Job identifier returned by batch or generation creation; the job is resolved within the specified library."
13616
+ },
13617
+ {
13618
+ "name": "index",
13619
+ "sdkName": "index",
13620
+ "description": "Zero-based position of the candidate in the Job outputs array."
13621
+ }
13622
+ ],
13623
+ "query": [],
13624
+ "body": {
13625
+ "required": false,
13626
+ "fields": [
13627
+ {
13628
+ "name": "public_id",
13629
+ "type": "string",
13630
+ "required": false,
13631
+ "description": "Delivery identifier for the saved asset; defaults to gen_<job_id>_<index> and is idempotent."
13632
+ },
13633
+ {
13634
+ "name": "asset_folder",
13635
+ "type": "string",
13636
+ "required": false,
13637
+ "description": "Destination folder for the saved asset; defaults to the library root. New path segments containing U+FFFD or consisting only of question marks are rejected with INVALID_PARAMS; send UTF-8 names. Existing affected folders remain readable and assets can be moved out."
13638
+ },
13639
+ {
13640
+ "name": "tags",
13641
+ "type": "array",
13642
+ "itemType": "string",
13643
+ "required": false,
13644
+ "description": "Tags to apply to the saved asset."
13645
+ },
13646
+ {
13647
+ "name": "understanding",
13648
+ "type": "string",
13649
+ "enum": [
13650
+ "auto",
13651
+ "skip"
13652
+ ],
13653
+ "required": false,
13654
+ "description": "Understanding behavior for the saved asset; defaults to auto."
13655
+ }
13656
+ ]
13657
+ }
13658
+ },
13339
13659
  {
13340
13660
  "resource": "media.libraries.purge",
13341
13661
  "method": "create",
13342
13662
  "summary": "Purge library",
13343
- "description": "Permanently remove a library that is already deleting, without waiting for purge_at. Its assets and related resources are removed and cannot be restored; first soft-delete an active library.",
13663
+ "description": "List assets in an active library, newest first, optionally filtering by exact folder and stored resource type. Continue using next_cursor; video includes audio-only assets.",
13344
13664
  "http": "POST",
13345
13665
  "path": "/media/v1/libraries/{library_id}/purge",
13346
13666
  "streaming": "no",
@@ -13358,7 +13678,7 @@ export const operations = [
13358
13678
  "resource": "media.libraries",
13359
13679
  "method": "restore",
13360
13680
  "summary": "Restore library",
13361
- "description": "Restore a deleting library before its purge_at deadline. The library becomes active again and deleted_at and purge_at are cleared; expired or non-deleting libraries cannot be restored.",
13681
+ "description": "Permanently remove a library that is already deleting, without waiting for purge_at. Its assets and related resources are removed and cannot be restored; first soft-delete an active library.",
13362
13682
  "http": "POST",
13363
13683
  "path": "/media/v1/libraries/{library_id}/restore",
13364
13684
  "streaming": "no",
@@ -13376,7 +13696,7 @@ export const operations = [
13376
13696
  "resource": "media.libraries.search",
13377
13697
  "method": "create",
13378
13698
  "summary": "Semantic search alias",
13379
- "description": "Alias of semantic search. Search assets with a nonblank text query, optional expression filter and top_k; hybrid combines semantic and keyword matches, while semantic uses vector similarity only.",
13699
+ "description": "List all immediate child folders under parent, or under the root when parent is omitted. Counts include descendant assets. The result is unpaginated; limit and cursor are rejected.",
13380
13700
  "http": "POST",
13381
13701
  "path": "/media/v1/libraries/{library_id}/search",
13382
13702
  "streaming": "no",
@@ -13427,7 +13747,7 @@ export const operations = [
13427
13747
  "resource": "media.libraries.search.expression",
13428
13748
  "method": "create",
13429
13749
  "summary": "Expression search",
13430
- "description": "Search active assets using the supported filter-expression syntax, sorting and cursor pagination. Empty expression matches all assets. Tags and context require with_field; inspect the exactness flags before treating counts as complete.",
13750
+ "description": "Find visually similar assets using exactly one of asset_id or an inline base64 image. The library must support image search; an asset query needs a current image embedding and excludes that source asset from results.",
13431
13751
  "http": "POST",
13432
13752
  "path": "/media/v1/libraries/{library_id}/search/expression",
13433
13753
  "streaming": "no",
@@ -13447,7 +13767,7 @@ export const operations = [
13447
13767
  "name": "expression",
13448
13768
  "type": "string",
13449
13769
  "required": false,
13450
- "description": "Asset filter expression supporting field comparisons, AND, OR, NOT, parentheses and suffix wildcards. An empty expression matches all assets. For business metadata use context.sku=KETTLE-RED AND context.revision=2; request with_field: [\"context\"] to include context. Quality filters: flags:watermark matches any current shot with a watermark; flags.watermark:false requires an assessed video with no positive watermark judgment. The same syntax supports slideshow, hand_frame, text_sticker and low_quality. folder_mismatch:true selects lexical folder/location hints. Geometry filters support width, height, resolution:1920x1080, numeric aspect_ratio (width/height), and orientation:landscape, portrait or square. Missing geometry or unassessed legacy flags do not match positive filters."
13770
+ "description": "Asset filter expression supporting field comparisons, AND, OR, NOT, parentheses and suffix wildcards. An empty expression matches all assets. For business metadata use context.sku=KETTLE-RED AND context.revision=2; request with_field: [\"context\"] to include context. Quality filters: flags:watermark matches any current shot with a watermark; flags.watermark:false requires an assessed video with no positive watermark judgment. The same syntax supports slideshow, hand_frame, text_sticker and low_quality. folder_mismatch:true selects lexical folder/location hints. Geometry filters support width, height, resolution:1920x1080, numeric aspect_ratio (width/height), and orientation:landscape, portrait or square. Missing geometry or unassessed legacy flags do not match positive filters. has_music:true AND audio_genre:jazz AND audio_mood:calm selects current-version audio profiles with music and matching model labels; has_music:false applies only to sampled ranges, not the entire source. failure_code=UPSTREAM_FAILED selects assets with a current failed understanding carrying that code; combine with processing_state=failed or processing_state=partial."
13451
13771
  },
13452
13772
  {
13453
13773
  "name": "sort_by",
@@ -13499,7 +13819,7 @@ export const operations = [
13499
13819
  "resource": "media.libraries.search.semantic",
13500
13820
  "method": "create",
13501
13821
  "summary": "Semantic search",
13502
- "description": "Search assets with a nonblank text query and optional expression filter. Hybrid mode combines semantic and keyword matches; semantic mode uses vector similarity only. Results are ranked and limited by top_k.",
13822
+ "description": "Alias of semantic search. Search assets with a nonblank text query, optional expression filter and top_k; hybrid combines semantic and keyword matches, while semantic uses vector similarity only.",
13503
13823
  "http": "POST",
13504
13824
  "path": "/media/v1/libraries/{library_id}/search/semantic",
13505
13825
  "streaming": "no",
@@ -13550,7 +13870,7 @@ export const operations = [
13550
13870
  "resource": "media.libraries.search.visual",
13551
13871
  "method": "create",
13552
13872
  "summary": "Visual search",
13553
- "description": "Find visually similar assets using exactly one of asset_id or an inline base64 image. The library must support image search; an asset query needs a current image embedding and excludes that source asset from results.",
13873
+ "description": "Search assets with a nonblank text query and optional expression filter. Hybrid mode combines semantic and keyword matches; semantic mode uses vector similarity only. Results are ranked and limited by top_k.",
13554
13874
  "http": "POST",
13555
13875
  "path": "/media/v1/libraries/{library_id}/search/visual",
13556
13876
  "streaming": "no",
@@ -13593,6 +13913,67 @@ export const operations = [
13593
13913
  ]
13594
13914
  }
13595
13915
  },
13916
+ {
13917
+ "resource": "media.libraries.understandings",
13918
+ "method": "list",
13919
+ "summary": "List understanding results across a library",
13920
+ "description": "Read current understanding entries across one library without fetching every asset separately. Use library_id from creation or listing. folder includes descendants; kinds is a comma-separated list of output kinds. Entries are ordered by asset_id and then understanding id. Continue with next_cursor and the same folder and kinds; limit defaults to 100 and cannot exceed 100. Superseded, deleted and old-version entries are excluded. During historical backfill, this method returns 503 CAPACITY rather than incomplete pages; poll failureSummary until counts_complete is true, then start pagination. Example: GET /media/v1/libraries/lib_example/understandings?folder=travel&kinds=caption,transcript&limit=100.",
13921
+ "http": "GET",
13922
+ "path": "/media/v1/libraries/{library_id}/understandings",
13923
+ "streaming": "no",
13924
+ "pagination": true,
13925
+ "pathParams": [
13926
+ {
13927
+ "name": "library_id",
13928
+ "sdkName": "library_id",
13929
+ "description": "Library ID returned by creation."
13930
+ }
13931
+ ],
13932
+ "query": [
13933
+ {
13934
+ "name": "folder",
13935
+ "type": "string",
13936
+ "required": false,
13937
+ "description": "Folder path including all descendants; omitted or empty selects the entire library."
13938
+ },
13939
+ {
13940
+ "name": "kinds",
13941
+ "type": "string",
13942
+ "required": false,
13943
+ "description": "Comma-separated output kinds: caption, tags, ocr, frame, transcript, overview, audio, embedding. Omit or empty to include every kind."
13944
+ },
13945
+ {
13946
+ "name": "cursor",
13947
+ "type": "string",
13948
+ "required": false,
13949
+ "description": "Cursor from the previous next_cursor."
13950
+ },
13951
+ {
13952
+ "name": "limit",
13953
+ "type": "integer",
13954
+ "required": false,
13955
+ "description": "Maximum entries in this page, from 1 through 100; defaults to 100."
13956
+ }
13957
+ ]
13958
+ },
13959
+ {
13960
+ "resource": "media.libraries.understandings",
13961
+ "method": "retrieveFailureSummary",
13962
+ "summary": "Summarize understanding failures",
13963
+ "description": "Inspect current understanding failures before retrying. Use library_id from library creation or listing. Groups include code, output kind, actual producer model, retryability and up to five sample asset IDs. At most 1024 detailed groups plus two overflow groups are returned; overflow groups separate retryable and unrecoverable entries and mark overflow=true. Unknown failure codes remain retryable. Historical counts are provisional while counts_complete is false. Example: GET /media/v1/libraries/lib_example/understandings/failure_summary.",
13964
+ "http": "GET",
13965
+ "path": "/media/v1/libraries/{library_id}/understandings/failure_summary",
13966
+ "streaming": "no",
13967
+ "pagination": false,
13968
+ "pathParams": [
13969
+ {
13970
+ "name": "library_id",
13971
+ "sdkName": "library_id",
13972
+ "description": "Library ID returned by creation."
13973
+ }
13974
+ ],
13975
+ "query": []
13976
+ },
13596
13977
  {
13597
13978
  "resource": "meta.docs",
13598
13979
  "method": "search",
@@ -13876,25 +14257,25 @@ export const operations = [
13876
14257
  "name": "model",
13877
14258
  "type": "string",
13878
14259
  "required": true,
13879
- "description": "Transcription model id, for example `whisper-large-v3-turbo` or `qwen3-asr-flash`; list candidates with listModels?type=transcription. Router support (supported): Verified to take effect."
14260
+ "description": "Model catalog identifier declaring openai.audio.transcriptions; use it unchanged, including any creator prefix."
13880
14261
  },
13881
14262
  {
13882
14263
  "name": "file",
13883
14264
  "type": "string",
13884
14265
  "required": true,
13885
- "description": "Audio file to transcribe, uploaded as multipart/form-data. Router support (supported): Verified to take effect."
14266
+ "description": "Audio bytes uploaded as a multipart file; supported formats and input limits depend on the selected model."
13886
14267
  },
13887
14268
  {
13888
14269
  "name": "language",
13889
14270
  "type": "string",
13890
14271
  "required": false,
13891
- "description": "Language of the audio as an ISO-639-1 code such as `en` or `zh`. Router support (partial): Both models accept ISO language codes. qwen3-asr-flash may translate output to that language; whisper-large-v3-turbo treats it as an input hint. Non-ISO names may return 502."
14272
+ "description": "Source language code when known; omit to let the model detect the language."
13892
14273
  },
13893
14274
  {
13894
14275
  "name": "prompt",
13895
14276
  "type": "string",
13896
14277
  "required": false,
13897
- "description": "Text that primes the model with vocabulary or context. Router support (partial): Vocabulary hints work on whisper-large-v3-turbo only; qwen3-asr-flash returns 400."
14278
+ "description": "Optional vocabulary or contextual guidance for recognizing the audio; support depends on the selected model."
13898
14279
  },
13899
14280
  {
13900
14281
  "name": "response_format",
@@ -13902,20 +14283,22 @@ export const operations = [
13902
14283
  "enum": [
13903
14284
  "json",
13904
14285
  "text",
13905
- "verbose_json"
14286
+ "verbose_json",
14287
+ "diarized_json"
13906
14288
  ],
13907
14289
  "required": false,
13908
- "description": "Format of the response body. `json` and `text` are the commonly supported formats. Router support (partial): json/text work on both; verbose_json works only on whisper-large-v3-turbo. srt/vtt return 400."
14290
+ "description": "Output format: json returns text in JSON; text returns plain text; verbose_json includes requested timestamps; diarized_json includes speaker-labelled segments when supported. Defaults to json."
13909
14291
  },
13910
14292
  {
13911
14293
  "name": "timestamp_granularities[]",
13912
14294
  "type": "array",
13913
14295
  "itemType": "string",
13914
14296
  "enum": [
14297
+ "word",
13915
14298
  "segment"
13916
14299
  ],
13917
14300
  "required": false,
13918
- "description": "Timestamp levels to include with `verbose_json`; only `segment` exists in this schema. Router support (partial): Only whisper-large-v3-turbo supports segment with verbose_json. word returns 400; qwen3-asr-flash does not support timestamps."
14301
+ "description": "Timestamp levels to request as repeated multipart fields: word returns per-word times; segment returns segment times. Omit for the model default. Use verbose_json, or diarized_json on supporting models."
13919
14302
  },
13920
14303
  {
13921
14304
  "name": "temperature",
@@ -18943,7 +19326,7 @@ export const operations = [
18943
19326
  "name": "filter",
18944
19327
  "type": "string",
18945
19328
  "required": false,
18946
- "description": "Search qualifier subset: is/state, reason, label/-label, no, assignee, author, mentions, milestone, type, kind, assignee-kind, in and sort; unknown qualifiers return INVALID_PARAMS. Passed unchanged to the service."
19329
+ "description": "Search qualifier subset: is/state, reason, label/-label, no, assignee, author, mentions, milestone, type, kind, assignee-kind, in and sort; write each qualifier as field:value (for example, is:open milestone:5), never field=value. Unknown qualifiers return INVALID_PARAMS. Passed unchanged to the service."
18947
19330
  }
18948
19331
  ]
18949
19332
  },