@deepraxis/sdk 0.1.1-dev.e5614a0 → 0.1.1-dev.e5cbcae

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",
@@ -1160,6 +1160,35 @@ export const operations = [
1160
1160
  }
1161
1161
  ]
1162
1162
  },
1163
+ {
1164
+ "resource": "agent.computers.files.convert",
1165
+ "method": "create",
1166
+ "summary": "Convert a Computer Document to PDF",
1167
+ "description": "Convert an Office document (docx, doc, ppt, pptx, rtf, odt; up to 16 MiB) to PDF inside a platform-owned ephemeral document sandbox, whatever machine family the computer itself runs on. Returns base64 PDF bytes.\n\nPraxis extension: the preview conversion endpoint. The browser never parses an untrusted document — LibreOffice runs only inside an ephemeral document-family sandbox and the converter instance is killed after use. The file stays tenant-owned; non-convertible types answer EXTENSION_NOT_CONVERTIBLE and a failed conversion answers CONVERSION_FAILED.",
1168
+ "http": "POST",
1169
+ "path": "/agent/v1/computers/{computer_id}/files/convert",
1170
+ "streaming": "no",
1171
+ "pagination": false,
1172
+ "pathParams": [
1173
+ {
1174
+ "name": "computer_id",
1175
+ "sdkName": "computer_id",
1176
+ "description": "Computer id (cmp_...), as returned by computers.create or computers.list."
1177
+ }
1178
+ ],
1179
+ "query": [],
1180
+ "body": {
1181
+ "required": true,
1182
+ "fields": [
1183
+ {
1184
+ "name": "name",
1185
+ "type": "string",
1186
+ "required": true,
1187
+ "description": "Name of the entry or object."
1188
+ }
1189
+ ]
1190
+ }
1191
+ },
1163
1192
  {
1164
1193
  "resource": "agent.computers.leases",
1165
1194
  "method": "delete",
@@ -5987,7 +6016,7 @@ export const operations = [
5987
6016
  "allow"
5988
6017
  ],
5989
6018
  "required": false,
5990
- "description": "skip (default) skips when a previous run is still active; allow permits overlapping runs."
6019
+ "description": "skip skips while a previous run is still active; allow permits overlapping runs. When omitted, schedule triggers use skip and webhook triggers use allow."
5991
6020
  },
5992
6021
  {
5993
6022
  "name": "catchup_window_seconds",
@@ -6161,7 +6190,7 @@ export const operations = [
6161
6190
  "allow"
6162
6191
  ],
6163
6192
  "required": false,
6164
- "description": "skip (default) skips when a previous run is still active; allow permits overlapping runs."
6193
+ "description": "skip skips while a previous run is still active; allow permits overlapping runs. When omitted, schedule triggers use skip and webhook triggers use allow."
6165
6194
  },
6166
6195
  {
6167
6196
  "name": "catchup_window_seconds",
@@ -9827,7 +9856,7 @@ export const operations = [
9827
9856
  "resource": "cut.projects.analysis",
9828
9857
  "method": "create",
9829
9858
  "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.",
9859
+ "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
9860
  "http": "POST",
9832
9861
  "path": "/cut/v1/projects/{project_id}/analysis",
9833
9862
  "streaming": "no",
@@ -9998,6 +10027,18 @@ export const operations = [
9998
10027
  "body": {
9999
10028
  "required": true,
10000
10029
  "fields": [
10030
+ {
10031
+ "name": "folder",
10032
+ "type": "string",
10033
+ "required": false,
10034
+ "description": "Optional destination path within the bound media library; omitted uses its default folder."
10035
+ },
10036
+ {
10037
+ "name": "name",
10038
+ "type": "string",
10039
+ "required": false,
10040
+ "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."
10041
+ },
10001
10042
  {
10002
10043
  "name": "output",
10003
10044
  "type": "object",
@@ -10015,6 +10056,12 @@ export const operations = [
10015
10056
  "type": "integer",
10016
10057
  "required": false,
10017
10058
  "description": "Committed project revision from retrieve, state, timeline or execute; increases after each successful write."
10059
+ },
10060
+ {
10061
+ "name": "loudness",
10062
+ "type": "object",
10063
+ "required": false,
10064
+ "description": "Loudness normalization target. Omitted, the export is normalized to -14 LUFS integrated and -1 dBTP true peak, the level short-video and streaming platforms play at; null renders without normalization. Normalization adds analysis and rendering work."
10018
10065
  }
10019
10066
  ]
10020
10067
  }
@@ -10023,7 +10070,7 @@ export const operations = [
10023
10070
  "resource": "cut.projects.frames",
10024
10071
  "method": "list",
10025
10072
  "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. Fetch the returned image URLs before expires_at; render again when they expire.",
10073
+ "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
10074
  "http": "GET",
10028
10075
  "path": "/cut/v1/projects/{project_id}/frames",
10029
10076
  "streaming": "no",
@@ -10046,7 +10093,7 @@ export const operations = [
10046
10093
  "name": "scale",
10047
10094
  "type": "number",
10048
10095
  "required": false,
10049
- "description": "Positive image size multiplier; 0.5 renders at half the project dimensions."
10096
+ "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
10097
  },
10051
10098
  {
10052
10099
  "name": "revision",
@@ -10238,7 +10285,7 @@ export const operations = [
10238
10285
  "resource": "cut.projects",
10239
10286
  "method": "execute",
10240
10287
  "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. Use AddTrack, Insert, Update, Delete, Split, Trim, Move, RippleDeleteRange, UpdateTrack, DeleteTrack, SetSettings, AddCaptionsFromTranscript and SetMarker for writes; GetTimeline, GetItem, FindItems, GetMedia, GetTranscript and GetAnalysis read editing context; Print emits text and Preview requests frame previews. All script times are seconds; script object fields use camelCase, for example `media: {libraryId, assetId}`. 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:\n\n```js\nconst t = AddTrack(\"video\");\nInsert(t, {type: \"color\", color: \"#123456\", start: 0, length: 3});\nPrint(t);\n```",
10288
+ "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<!-- cut-reference:start -->\n### Script function, field and error reference\n\nEvery script function, clip field and error code has its own section, read one at a time:\n\n```\ncodemode.describe(\"praxis.cut.script.<Name>\") // one function: signature, arguments, return, errors, example\ncodemode.describe(\"praxis.cut.fields.<name>\") // one field: type, unit, range, default, where writable\ncodemode.describe(\"praxis.cut.errors.<CODE>\") // one code: meaning, causes, fix\ncodemode.describe(\"praxis.cut.script\") // names, one page at a time\n```\n\nPublished at https://docs.deepraxis.com/docs/developers/cut/script-reference with one anchor per entry. Names below omit the `praxis.cut.<kind>.` prefix.\n\n#### Script functions (script)\n\n- `GetTimeline` — Duration, tracks, joins; clips are under `items`.\n- `GetItem` — One clip's compact view, by id.\n- `FindItems` — Visit every clip with its track; collect results.\n- `GetMedia` — Media metadata; `durationUs` is microseconds.\n- `GetTranscript` — Transcript words in source microseconds.\n- `GetAnalysis` — Silence, filler or scene segments.\n- `ListTransitions` — Join transition kinds and parameters.\n- `ListEffects` — Visual-effect catalog and parameters.\n- `ListAnimations` — Animation presets by phase and target.\n- `ListFonts` — Font families, weights and scripts.\n- `ListTextStyles` — Text style presets for `style.preset`.\n- `ListTextTemplates` — Multi-layer templates and their slots.\n- `Insert` — Add a clip; a track never overlaps itself.\n- `Append` — Add a clip at the end of a track.\n- `Update` — Change named fields; the rest stay.\n- `SetSpeed` — Change rate, keeping source or duration.\n- `Delete` — Remove a clip. There is no `Remove`.\n- `Join` — Overlap clips; followers shift, track shortens.\n- `UpdateJoin` — Change a join's length or effect.\n- `DeleteJoin` — Remove a join; restore the butt cut.\n- `Split` — Cut a clip in two at a time.\n- `Trim` — Move one clip edge by seconds.\n- `Move` — Set a clip's start or track.\n- `RippleDeleteRange` — Cut a time range and close the gap.\n- `AddTrack` — Add a video, audio or caption track.\n- `UpdateTrack` — Change a track's name, lock, gain or role.\n- `DeleteTrack` — Remove a track and its clips.\n- `SetSettings` — Change canvas, frame rate or background.\n- `AddCaptionsFromTranscript` — Captions from a clip's kept words.\n- `InsertTemplate` — Insert a template and fill its slots.\n- `AlignCaptions` — Rebuild captions from text punctuation.\n- `ImportCaptions` — Import SRT or WebVTT onto captions.\n- `ExportCaptions` — Export captions as SRT or WebVTT.\n- `SetMarker` — Label a timeline position.\n- `Print` — Append values to the result's `prints`.\n- `Preview` — Up to 8 frames as inline PNG data URLs.\n\n#### Fields (fields)\n\n- `type` — Clip kind; decides which fields apply.\n- `start` — Clip start in seconds; snaps to frames.\n- `length` — Duration; optional for video and audio.\n- `media` — Source `{ libraryId, assetId }`.\n- `sourceIn` — First source second kept; default 0.\n- `sourceOut` — Exclusive source end; read-only.\n- `text` — Text of a text or caption clip.\n- `color` — Solid colour of a color clip.\n- `shape` — Shape clip kind: `rect` or `ellipse`.\n- `width` — Shape width, a fraction of canvas width.\n- `height` — Shape height, a fraction of canvas height.\n- `radius` — Rect corner rounding, in 1080-height px.\n- `fill` — Shape or text paint: colour or gradient.\n- `stroke` — Shape outline: colour and width.\n- `transform` — Position, scale, rotation, opacity, crop, blur.\n- `fit` — contain, cover, fill or none.\n- `blend` — Layer blend mode; null clears.\n- `style` — Text styling: font, fill, strokes, glow, position.\n- `style.position` — top, middle or bottom; omit it, never null.\n- `playback` — Rate, direction, audio policy, or freeze.\n- `volumeDb` — Audio level in dB; 0 is source level.\n- `gain` — Keyframed audio level in dB.\n- `fadeIn` — Fade-in seconds at the clip's start.\n- `fadeOut` — Fade-out seconds at the clip's end.\n- `duck` — Lower this clip while another track plays.\n- `animate` — Transform keyframes; `at` is clip-relative seconds.\n- `reveal` — Per-character, word or line reveal timing.\n- `animation` — Preset slots `{ in, out, loop }`; null clears.\n- `effects` — Effect stack, at most 8; null clears.\n- `transitionIn` — Entrance effect: kind plus seconds.\n- `transitionOut` — Exit effect: kind plus seconds.\n- `mask` — Shape, path or track matte.\n- `words` — Caption words with clip-local times.\n\n#### Error codes (errors)\n\n- `JOIN_CONFLICT` — A join is invalid or blocks this edit.\n- `INVALID_TRANSITION` — Bad transition kind, parameter or length.\n- `INVALID_STYLE` — A style value is out of range.\n- `INVALID_MASK` — A mask definition is malformed.\n- `MASK_IN_USE` — The edit would break a live mask.\n- `TOO_MANY_MASKS` — At most 16 masks per project.\n- `RATE_OUT_OF_RANGE` — A rate is outside 0.25-4.\n- `UNSUPPORTED_PLAYBACK` — Reverse without an explicit mute.\n- `INVALID_PLAYBACK` — A playback object is partial or malformed.\n- `UNKNOWN_FONT` — The family is not in `ListFonts()`.\n- `UNKNOWN_FIELD` — The field name is not accepted here.\n- `UNKNOWN_TEXT_STYLE` — `style.preset` is not in the catalog.\n- `TEXT_STYLE_TARGET_MISMATCH` — Preset on the wrong clip type.\n- `CAPTION_ALIGN_LOW_CONFIDENCE` — Alignment confidence too low; nothing changed.\n- `OVERLAP` — Two clips on one track would share time.\n- `OUT_OF_SOURCE` — The clip would read past its source.\n- `LOCKED_TRACK` — The edit targets a locked track.\n- `UNBOUND_LIBRARY` — The library is not bound to the project.\n- `TRACK_KIND_MISMATCH` — The clip type does not fit the track.\n- `NOT_FOUND` — The named id is not in this project.\n- `TOO_SHORT` — The result would be under one frame.\n- `INVALID_DUCK` — Bad `duck` level or a missing track.\n- `UNKNOWN_ANIMATION` — The preset is not in `ListAnimations()`.\n- `INVALID_ANIMATION_PARAM` — Bad slot, parameter or keyframe limit.\n- `ANIMATION_TOO_LONG` — In plus out exceed the clip length.\n- `ANIMATION_TARGET_MISMATCH` — The preset does not match the clip type.\n- `ANIMATION_PHASE_MISMATCH` — The preset is in the wrong slot.\n- `UNKNOWN_EFFECT` — The effect is not in `ListEffects()`.\n- `INVALID_EFFECT_PARAM` — Bad effect parameter or keyframe.\n- `TOO_MANY_EFFECTS` — More than 8 effects on one clip.\n- `PROJECT_NOT_FOUND` — No visible project has this id.\n- `EXPORT_NOT_FOUND` — No such export in this project.\n- `VERSION_NOT_FOUND` — No saved version has this revision.\n- `LIBRARY_NOT_FOUND` — The library is missing or invisible.\n- `BINDING_INVALID` — The binding request is malformed.\n- `BINDING_IN_USE` — Clips still use this library's assets.\n- `NOTHING_TO_UNDO` — No earlier revision to return to.\n- `NOTHING_TO_REDO` — No undone revision is waiting.\n- `UNDO_CONFLICT` — The revision to undo is no longer head.\n- `REVISION_CONFLICT` — The project moved; your revision is stale.\n- `CUT_BUSY` — The project is busy; retry.\n- `INVALID_CAPTION_FILE` — The subtitle file is malformed or too big.\n- `SCRIPT_ERROR` — The script threw or did not parse.\n- `SCRIPT_LIMIT` — An execute budget was exceeded.\n- `OPS_REJECTED` — An op failed; the whole edit rolled back.\n- `EDIT_EXPIRED` — The saved edit id is over ten minutes old.\n- `MEDIA_OFFLINE` — The asset cannot be fetched right now.\n- `MEDIA_UNAVAILABLE` — The asset is not usable for rendering.\n- `MEDIA_IMPORT_FAILED` — Importing media failed.\n- `FRAME_OUT_OF_RANGE` — The preview time is outside the project.\n- `PROJECT_TOO_LARGE` — The project exceeds the size limit.\n- `RESPONSE_TOO_LARGE` — The response would exceed its budget.\n- `EXPORT_FAILED` — The render failed; read `error.cause`.\n- `INVALID_PARAMS` — The request is malformed.\n- `PERMISSION_DENIED` — This credential may not do that here.\n- `NOT_IMPLEMENTED` — Not available on this platform yet.\n- `INTERNAL` — Unexpected failure; retry with the request id.\n<!-- cut-reference:end -->\n",
10242
10289
  "http": "POST",
10243
10290
  "path": "/cut/v1/projects/{project_id}:execute",
10244
10291
  "streaming": "no",
@@ -11327,7 +11374,7 @@ export const operations = [
11327
11374
  "resource": "file.files",
11328
11375
  "method": "create",
11329
11376
  "summary": "Upload file",
11330
- "description": "Upload a file to reuse in conversations or attach to a knowledge base. Unlike OpenAI Files, uploads must be nonempty and at most 100000000 bytes, and only user_data and vision purposes are accepted. Send file bytes as a multipart file part, not a filename or file ID; in the SDK use a File or Blob, for example new File([\"Return within 23 days.\"], \"policy.txt\", { type: \"text/plain\" }). Content determines the MIME type. Supported uploads include PDF, DOCX/XLSX/PPTX, PNG/JPEG/GIF/WebP, MP3/WAV/FLAC/OGG/M4A, MP4/WebM, and UTF-8 JSON/NDJSON/CSV/Markdown/plain text; empty, unsupported, oversized files and unsupported purposes return 400. Use Uploads for larger files. The purpose vision accepts only PNG, JPEG, GIF and WebP, while conversation images require user_data. The returned ID belongs to your tenant; upload alone does not ingest the file into Knowledge. Knowledge attachment has a lower limit of 100000000 bytes. Optionally set expires_after[anchor]=created_at with expires_after[seconds] (3600–7776000). Without expiry, the file persists until deleted.",
11377
+ "description": "Upload a file to reuse in conversations or attach to a knowledge base. Unlike OpenAI Files, uploads must be nonempty and at most 100000000 bytes, and only user_data, assistants and vision purposes are accepted. Send file bytes as a multipart file part, not a filename or file ID; in the SDK use a File or Blob, for example new File([\"Return within 23 days.\"], \"policy.txt\", { type: \"text/plain\" }). Content determines the MIME type. Supported uploads include PDF, DOCX/XLSX/PPTX, PNG/JPEG/GIF/WebP, MP3/WAV/FLAC/OGG/M4A, MP4/WebM, and UTF-8 JSON/NDJSON/CSV/Markdown/plain text; empty, unsupported, oversized files and unsupported purposes return 400. Use Uploads for larger files. The purpose vision accepts only PNG, JPEG, GIF and WebP, while conversation images require user_data. The returned ID belongs to your tenant; upload alone does not ingest the file into Knowledge. Knowledge attachment has a lower limit of 100000000 bytes. Optionally set expires_after[anchor]=created_at with expires_after[seconds] (3600–7776000). Without expiry, the file persists until deleted.",
11331
11378
  "http": "POST",
11332
11379
  "path": "/file/v1/files",
11333
11380
  "streaming": "no",
@@ -11349,10 +11396,11 @@ export const operations = [
11349
11396
  "type": "string",
11350
11397
  "enum": [
11351
11398
  "user_data",
11399
+ "assistants",
11352
11400
  "vision"
11353
11401
  ],
11354
11402
  "required": true,
11355
- "description": "Purpose label stored with the file: user_data or vision. The vision purpose accepts only PNG, JPEG, GIF and WebP images. Conversation image references require user_data."
11403
+ "description": "Purpose label stored with the file: user_data, assistants or vision. The label is stored and returned unchanged; assistants follows the same rules as user_data. The vision purpose accepts only PNG, JPEG, GIF and WebP images. Conversation image references require user_data."
11356
11404
  },
11357
11405
  {
11358
11406
  "name": "expires_after",
@@ -11421,7 +11469,7 @@ export const operations = [
11421
11469
  "resource": "file.files.contentLinks",
11422
11470
  "method": "revoke",
11423
11471
  "summary": "Revoke a file content link",
11424
- "description": "Stop a previously issued content link from reading a file. Obtain the link with files.contentUrl.create. Use file_id from file creation or listing and the token path component from a content URL (/c/<token>), not the complete URL. The caller must own the file and have write access; a read-only binding is refused. Revocation propagates through the capability deny list within 30 seconds; the file and other links remain available. Only current IAM capability tokens can be revoked; legacy content links expire at the migration deadline. Example body: {\"token\":\"<token from /c/>\"}.",
11472
+ "description": "Stop a previously issued content link from reading a file. Obtain the link with files.contentUrl.create. Use file_id from file creation or listing and the token path component from a content URL (/c/<token>), not the complete URL. The caller must own the file and have write access; a read-only binding is refused. Revocation propagates through the capability deny list within 15 minutes; the file and other links remain available. Only current IAM capability tokens can be revoked; legacy content links expire at the migration deadline. Example body: {\"token\":\"<token from /c/>\"}.",
11425
11473
  "http": "POST",
11426
11474
  "path": "/file/v1/files/{file_id}/content_links:revoke",
11427
11475
  "streaming": "no",
@@ -11450,7 +11498,7 @@ export const operations = [
11450
11498
  "resource": "file.files.contentUrl",
11451
11499
  "method": "create",
11452
11500
  "summary": "Create a download URL",
11453
- "description": "Download a file's bytes to a local disk from a coding agent without sending them through the model. Use file_id from file creation or listing, then run curl -fsSL -o <filename> '<url>' locally with the returned URL; GET needs no Authorization header. The link is reusable until expiry and supports a single byte Range (for example Range: bytes=0-9 returns 206). Revoke it with files.contentLinks.revoke, passing the token after /c/ in the URL. Expired, revoked, invalid or cross-organization URLs return 404. Lifetime defaults to 3600 seconds and is at most 604800 seconds. Issuance requires the same credential and file-read access as files.retrieveContent; a processing file returns 409 FILE_NOT_READY, so poll files.retrieve until active before retrying. A missing, expired or other-organization file returns 404. Each issuance creates a new link. OpenAI Files has no signed download URL; this follows S3 presigned GET semantics. Example body: {\"ttl_seconds\":3600}.",
11501
+ "description": "Download a file's bytes to a local disk from a coding agent without sending them through the model. Use file_id from file creation or listing, then run curl -fsSL -o <filename> '<url>' locally with the returned URL; GET needs no Authorization header. The link is reusable until expiry and supports a single byte Range (for example Range: bytes=0-9 returns 206). Revoke it with files.contentLinks.revoke, passing the token after /c/ in the URL. Expired, revoked, invalid or cross-organization URLs return 404. Lifetime defaults to 900 seconds and is at most 604800 seconds. Issuance requires the same credential and file-read access as files.retrieveContent; a processing file returns 409 FILE_NOT_READY, so poll files.retrieve until active before retrying. A missing, expired or other-organization file returns 404. Each issuance creates a new link. OpenAI Files has no signed download URL; this follows S3 presigned GET semantics. Example body: {\"ttl_seconds\":3600}.",
11454
11502
  "http": "POST",
11455
11503
  "path": "/file/v1/files/{file_id}/content_url",
11456
11504
  "streaming": "no",
@@ -11470,7 +11518,7 @@ export const operations = [
11470
11518
  "name": "ttl_seconds",
11471
11519
  "type": "integer",
11472
11520
  "required": false,
11473
- "description": "Download link lifetime in seconds, from 1 through 604800; omitted means 3600. This does not change the file's own expiry."
11521
+ "description": "Download link lifetime in seconds, from 1 through 604800; omitted means 900. This does not change the file's own expiry."
11474
11522
  }
11475
11523
  ]
11476
11524
  }
@@ -11479,7 +11527,7 @@ export const operations = [
11479
11527
  "resource": "file.uploads",
11480
11528
  "method": "create",
11481
11529
  "summary": "Create an upload",
11482
- "description": "Start a multipart upload for a file larger than the 100000000-byte direct-upload limit. Supply the exact byte length, filename, MIME type and purpose. Unlike OpenAI, uploads accept at most 2 GiB (2147483648 bytes) and only user_data and vision purposes. Add parts of at most 64000000 bytes and complete within one hour. Optional part_size enables fixed-size, retryable parts. expires_after applies to the resulting file (3600–7776000 seconds on this own face); without it the file persists until deleted.",
11530
+ "description": "Start a multipart upload for a file larger than the 100000000-byte direct-upload limit. Supply the exact byte length, filename, MIME type and purpose. Unlike OpenAI, uploads accept at most 20 GiB (21474836480 bytes) and only user_data, assistants and vision purposes. Send parts of at most 64000000 bytes; an unfinished upload waits for them for 7 days, so a client can create → send parts → query GET /file/v1/uploads/{upload_id} → resend only the missing parts → complete. Optional part_size fixes every part length and makes each numbered part retryable with identical bytes. expires_after applies to the resulting file (3600–7776000 seconds on this own face); without it the file persists until deleted.",
11483
11531
  "http": "POST",
11484
11532
  "path": "/file/v1/uploads",
11485
11533
  "streaming": "no",
@@ -11493,7 +11541,7 @@ export const operations = [
11493
11541
  "name": "bytes",
11494
11542
  "type": "integer",
11495
11543
  "required": true,
11496
- "description": "Exact complete file length in bytes, from 1 through 2147483648 (2 GiB); the sum of completed parts must match."
11544
+ "description": "Exact complete file length in bytes, from 1 through 21474836480 (20 GiB); the sum of completed parts must match."
11497
11545
  },
11498
11546
  {
11499
11547
  "name": "filename",
@@ -11512,10 +11560,11 @@ export const operations = [
11512
11560
  "type": "string",
11513
11561
  "enum": [
11514
11562
  "user_data",
11563
+ "assistants",
11515
11564
  "vision"
11516
11565
  ],
11517
11566
  "required": true,
11518
- "description": "Use user_data for conversation attachments, or vision for PNG, JPEG, GIF and WebP images."
11567
+ "description": "Use user_data for conversation attachments, assistants for assistant files, or vision for PNG, JPEG, GIF and WebP images."
11519
11568
  },
11520
11569
  {
11521
11570
  "name": "expires_after",
@@ -11536,7 +11585,7 @@ export const operations = [
11536
11585
  "resource": "file.uploads",
11537
11586
  "method": "createSigned",
11538
11587
  "summary": "Create a one-time upload URL",
11539
- "description": "Upload a local file of up to 2 GiB from a coding agent without sending bytes through the model. Provide basename, exact byte count and MIME type. Up to 104857600 bytes, PUT the file to url with curl -T photo.png -H 'Content-Type: image/png' '<url>'; success returns 201 with the file object, and reuse returns 410 CAPABILITY_USED. Above that threshold, split the file into part_size chunks (default 64000000 bytes), PUT each chunk to its numbered parts[].url in any order, then POST complete_url without a body. Part PUTs return 200; completion returns 201 with the file object, including its state, or 400 if a part is missing. A processing file can be polled with files.retrieve until active. Identical part bytes may be retried; changed bytes at the same number return 400. Completion reuse returns 410 CAPABILITY_USED. Each PUT requires the exact signed Content-Length; single-PUT Content-Type must match content_type or be omitted. Expired, revoked, invalid, wrong-action or cross-organization URLs return 404. URL lifetime defaults to 900 seconds for single PUT or 3600 for multipart, at most 604800; all multipart URLs share an expiry. Multipart creation reserves storage quota. Issuance requires the same unscoped credential as direct file creation. Each issuance creates a new upload and is not idempotent. Example body: {\"filename\":\"photo.png\",\"bytes\":2048,\"content_type\":\"image/png\"}.",
11588
+ "description": "Upload a local file of up to 20 GiB from a coding agent without sending bytes through the model. Provide basename, exact byte count and MIME type. Up to 104857600 bytes, PUT the file to url with curl -T photo.png -H 'Content-Type: image/png' '<url>'; success returns 201 with the file object, and reuse returns 410 CAPABILITY_USED. Above that threshold, split the file into part_size chunks (default 64000000 bytes) and PUT each chunk to its numbered parts[].url in any order; an interrupted client GETs status_url to see the received parts and resends only what is missing, then POSTs complete_url without a body. Part PUTs return 200; completion returns 201 with the file object, including its state, or 400 if a part is missing. A processing file can be polled with files.retrieve until active. Identical part bytes may be retried; changed bytes at the same number return 400. Completion reuse returns 410 CAPABILITY_USED. Each PUT requires the exact signed Content-Length; single-PUT Content-Type must match content_type or be omitted. Expired, revoked, invalid, wrong-action or cross-organization URLs return 404. URL lifetime defaults to 900 seconds for single PUT or 604800 (7 days) for multipart, at most 604800; all multipart URLs, including status_url, share an expiry. Multipart creation reserves storage quota. Issuance requires the same unscoped credential as direct file creation. Each issuance creates a new upload and is not idempotent. Example body: {\"filename\":\"photo.png\",\"bytes\":2048,\"content_type\":\"image/png\"}.",
11540
11589
  "http": "POST",
11541
11590
  "path": "/file/v1/uploads/signed",
11542
11591
  "streaming": "no",
@@ -11556,7 +11605,7 @@ export const operations = [
11556
11605
  "name": "bytes",
11557
11606
  "type": "integer",
11558
11607
  "required": true,
11559
- "description": "Exact local file size in bytes, from 1 through 2147483648 (2 GiB). Up to 104857600 bytes returns one PUT URL; larger files return numbered part URLs and a completion URL. Every PUT requires its exact signed Content-Length."
11608
+ "description": "Exact local file size in bytes, from 1 through 21474836480 (20 GiB). Up to 104857600 bytes returns one PUT URL; larger files return numbered part URLs, a completion URL and a status URL. Every PUT requires its exact signed Content-Length."
11560
11609
  },
11561
11610
  {
11562
11611
  "name": "content_type",
@@ -11569,16 +11618,17 @@ export const operations = [
11569
11618
  "type": "string",
11570
11619
  "enum": [
11571
11620
  "user_data",
11621
+ "assistants",
11572
11622
  "vision"
11573
11623
  ],
11574
11624
  "required": false,
11575
- "description": "user_data stores ordinary files and conversation images; vision accepts PNG, JPEG, GIF or WebP images only. Omitted means user_data."
11625
+ "description": "user_data and assistants store ordinary files and conversation images with their original purpose label; vision accepts PNG, JPEG, GIF or WebP images only. Omitted means user_data."
11576
11626
  },
11577
11627
  {
11578
11628
  "name": "expires_in",
11579
11629
  "type": "integer",
11580
11630
  "required": false,
11581
- "description": "Lifetime in seconds, from 1 through 604800: defaults to 900 for single PUT or 3600 for multipart. All part URLs and the completion URL share one expiry. This does not set the resulting file's lifetime."
11631
+ "description": "Lifetime in seconds, from 1 through 604800: defaults to 900 for single PUT or 604800 (7 days) for multipart. All part URLs, the status URL and the completion URL share one expiry. This does not set the resulting file's lifetime."
11582
11632
  },
11583
11633
  {
11584
11634
  "name": "part_size",
@@ -11589,6 +11639,24 @@ export const operations = [
11589
11639
  ]
11590
11640
  }
11591
11641
  },
11642
+ {
11643
+ "resource": "file.uploads",
11644
+ "method": "retrieve",
11645
+ "summary": "Retrieve an upload",
11646
+ "description": "Read the state of an unfinished upload — its status, declared bytes, fixed part_size and the parts it already holds (received_parts, each with part_number, bytes and sha256). After a break or a failed part, call it to resend only the missing numbers, then complete. A cancelled or expired upload is refused; a completed one returns its file. A missing or other-organization upload returns 404.",
11647
+ "http": "GET",
11648
+ "path": "/file/v1/uploads/{upload_id}",
11649
+ "streaming": "no",
11650
+ "pagination": false,
11651
+ "pathParams": [
11652
+ {
11653
+ "name": "upload_id",
11654
+ "sdkName": "upload_id",
11655
+ "description": "Upload identifier returned by create; the upload must belong to your organization."
11656
+ }
11657
+ ],
11658
+ "query": []
11659
+ },
11592
11660
  {
11593
11661
  "resource": "file.uploads",
11594
11662
  "method": "cancel",
@@ -11611,7 +11679,7 @@ export const operations = [
11611
11679
  "resource": "file.uploads",
11612
11680
  "method": "complete",
11613
11681
  "summary": "Complete an upload",
11614
- "description": "Assemble the uploaded parts into a file. Supply upload_id from create and part_ids from addPart in file byte order; their sizes must total the declared bytes. Optional md5 verifies the assembled content. Retrying identical part_ids and normalized md5 returns the same result; different inputs return 409. Unlike OpenAI, completed can contain a file still processing (status uploaded). Poll files.retrieve using file.id until status processed (own face state active); error, expiry or 404 means processing failed and the file cannot be used.",
11682
+ "description": "Assemble the uploaded parts into a file. Supply upload_id from create and part_ids from addPart in file byte order; their sizes must total the declared bytes. When parts were lost, query GET /file/v1/uploads/{upload_id} and resend them before completing. Optional md5 verifies the assembled content. Retrying identical part_ids and normalized md5 returns the same result; different inputs return 409. Unlike OpenAI, completed can contain a file still processing (status uploaded). Poll files.retrieve using file.id until status processed (own face state active); error, expiry or 404 means processing failed and the file cannot be used.",
11615
11683
  "http": "POST",
11616
11684
  "path": "/file/v1/uploads/{upload_id}/complete",
11617
11685
  "streaming": "no",
@@ -11647,7 +11715,7 @@ export const operations = [
11647
11715
  "resource": "file.uploads.parts",
11648
11716
  "method": "create",
11649
11717
  "summary": "Add an upload part",
11650
- "description": "Send one nonempty part as the multipart data field, at most 64000000 bytes. Parts may arrive concurrently in any order. Use upload_id from create. For a fixed-size upload, supply part_number starting at 1 and exactly part_size bytes except for the final remainder; retry the same number with identical bytes to recover its part ID. Without part_size, each request creates a new part and part_number is ignored. Save the returned part IDs for complete.",
11718
+ "description": "Send one nonempty part as the multipart data field, at most 64000000 bytes. Parts may arrive concurrently in any order. Use upload_id from create. For a fixed-size upload, supply part_number starting at 1 and exactly part_size bytes except for the final remainder; retry the same number with identical bytes to recover its part ID, and query GET /file/v1/uploads/{upload_id} to see which numbers already arrived. Without part_size, each request creates a new part and part_number is ignored. Save the returned part IDs for complete.",
11651
11719
  "http": "POST",
11652
11720
  "path": "/file/v1/uploads/{upload_id}/parts",
11653
11721
  "streaming": "no",
@@ -11735,7 +11803,7 @@ export const operations = [
11735
11803
  "resource": "knowledge.vectorStores",
11736
11804
  "method": "create",
11737
11805
  "summary": "Create knowledge base",
11738
- "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\"}.",
11806
+ "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\"}.",
11739
11807
  "http": "POST",
11740
11808
  "path": "/knowledge/v1/vector_stores",
11741
11809
  "streaming": "no",
@@ -11774,7 +11842,7 @@ export const operations = [
11774
11842
  "name": "chunking_strategy",
11775
11843
  "type": "object",
11776
11844
  "required": false,
11777
- "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."
11845
+ "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."
11778
11846
  },
11779
11847
  {
11780
11848
  "name": "description",
@@ -12121,7 +12189,7 @@ export const operations = [
12121
12189
  "resource": "knowledge.vectorStores.files",
12122
12190
  "method": "create",
12123
12191
  "summary": "Add file",
12124
- "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.",
12192
+ "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.",
12125
12193
  "http": "POST",
12126
12194
  "path": "/knowledge/v1/vector_stores/{vector_store_id}/files",
12127
12195
  "streaming": "no",
@@ -12153,7 +12221,7 @@ export const operations = [
12153
12221
  "name": "chunking_strategy",
12154
12222
  "type": "object",
12155
12223
  "required": false,
12156
- "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."
12224
+ "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."
12157
12225
  }
12158
12226
  ]
12159
12227
  }
@@ -12460,11 +12528,23 @@ export const operations = [
12460
12528
  ],
12461
12529
  "query": []
12462
12530
  },
12531
+ {
12532
+ "resource": "media.generation.capabilities",
12533
+ "method": "list",
12534
+ "summary": "Get generation capabilities",
12535
+ "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.",
12536
+ "http": "GET",
12537
+ "path": "/media/v1/generation/capabilities",
12538
+ "streaming": "no",
12539
+ "pagination": false,
12540
+ "pathParams": [],
12541
+ "query": []
12542
+ },
12463
12543
  {
12464
12544
  "resource": "media.libraries",
12465
12545
  "method": "list",
12466
12546
  "summary": "List libraries",
12467
- "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.",
12547
+ "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.",
12468
12548
  "http": "GET",
12469
12549
  "path": "/media/v1/libraries",
12470
12550
  "streaming": "no",
@@ -12546,7 +12626,7 @@ export const operations = [
12546
12626
  "resource": "media.libraries",
12547
12627
  "method": "delete",
12548
12628
  "summary": "Delete library",
12549
- "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.",
12629
+ "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.",
12550
12630
  "http": "DELETE",
12551
12631
  "path": "/media/v1/libraries/{library_id}",
12552
12632
  "streaming": "no",
@@ -12564,7 +12644,7 @@ export const operations = [
12564
12644
  "resource": "media.libraries",
12565
12645
  "method": "retrieve",
12566
12646
  "summary": "Get library",
12567
- "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.",
12647
+ "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.",
12568
12648
  "http": "GET",
12569
12649
  "path": "/media/v1/libraries/{library_id}",
12570
12650
  "streaming": "no",
@@ -12582,7 +12662,7 @@ export const operations = [
12582
12662
  "resource": "media.libraries",
12583
12663
  "method": "update",
12584
12664
  "summary": "Update library",
12585
- "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.",
12665
+ "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.",
12586
12666
  "http": "PATCH",
12587
12667
  "path": "/media/v1/libraries/{library_id}",
12588
12668
  "streaming": "no",
@@ -12598,6 +12678,13 @@ export const operations = [
12598
12678
  "body": {
12599
12679
  "required": true,
12600
12680
  "fields": [
12681
+ {
12682
+ "name": "hotwords",
12683
+ "type": "array",
12684
+ "itemType": "string",
12685
+ "required": false,
12686
+ "description": "Correction vocabulary, at most 200 nonblank terms of at most 32 Unicode characters each. Omitted on an unconfigured library: correction derives up to 200 distinct names from the library name and every folder level, excluding generic names such as 原始素材 and 混剪成品. An explicit empty array disables this vocabulary. Updating affects subsequent understanding and explicit reprocessing, not existing results."
12687
+ },
12601
12688
  {
12602
12689
  "name": "models",
12603
12690
  "type": "object",
@@ -12629,7 +12716,7 @@ export const operations = [
12629
12716
  "resource": "media.libraries.assets",
12630
12717
  "method": "list",
12631
12718
  "summary": "List assets",
12632
- "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.",
12719
+ "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.",
12633
12720
  "http": "GET",
12634
12721
  "path": "/media/v1/libraries/{library_id}/assets",
12635
12722
  "streaming": "no",
@@ -12677,7 +12764,7 @@ export const operations = [
12677
12764
  "resource": "media.libraries.assets",
12678
12765
  "method": "create",
12679
12766
  "summary": "Upload asset",
12680
- "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.",
12767
+ "description": " For understanding, Media generates proxies for video sources of 25 MB or more or longer than 10 minutes, and for audio-only sources of 100 MB or more; originals remain available unchanged. Long videos are supported. When a video proxy is needed and is still above 95 MB after recompression, the source is reported as UNSUPPORTED with the limit in the failure message. Proxy preparation uses the organization’s metered sandbox resources.",
12681
12768
  "http": "POST",
12682
12769
  "path": "/media/v1/libraries/{library_id}/assets",
12683
12770
  "streaming": "no",
@@ -12722,7 +12809,7 @@ export const operations = [
12722
12809
  "name": "asset_folder",
12723
12810
  "type": "string",
12724
12811
  "required": false,
12725
- "description": "Organizational folder path, separate from public_id. Empty selects the root; leading or trailing slashes, empty path segments, and . or .. segments are rejected."
12812
+ "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."
12726
12813
  },
12727
12814
  {
12728
12815
  "name": "use_filename",
@@ -12801,7 +12888,7 @@ export const operations = [
12801
12888
  "resource": "media.libraries.assets.import",
12802
12889
  "method": "create",
12803
12890
  "summary": "Import file",
12804
- "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.",
12891
+ "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 or longer than 10 minutes, and for audio-only sources of 100 MB or more; originals remain available unchanged. Long videos are supported. When a video proxy is needed and is still above 95 MB after recompression, the source is reported as UNSUPPORTED with the limit in the failure message. Proxy preparation uses the organization’s metered sandbox resources.",
12805
12892
  "http": "POST",
12806
12893
  "path": "/media/v1/libraries/{library_id}/assets/import",
12807
12894
  "streaming": "no",
@@ -12821,7 +12908,7 @@ export const operations = [
12821
12908
  "name": "file_id",
12822
12909
  "type": "string",
12823
12910
  "required": true,
12824
- "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."
12911
+ "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."
12825
12912
  },
12826
12913
  {
12827
12914
  "name": "public_id",
@@ -12845,7 +12932,7 @@ export const operations = [
12845
12932
  "name": "asset_folder",
12846
12933
  "type": "string",
12847
12934
  "required": false,
12848
- "description": "Organizational folder path, separate from public_id. Empty selects the root; leading or trailing slashes, empty path segments, and . or .. segments are rejected."
12935
+ "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."
12849
12936
  },
12850
12937
  {
12851
12938
  "name": "use_filename",
@@ -12924,7 +13011,7 @@ export const operations = [
12924
13011
  "resource": "media.libraries.assets",
12925
13012
  "method": "delete",
12926
13013
  "summary": "Delete asset",
12927
- "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.",
13014
+ "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.",
12928
13015
  "http": "DELETE",
12929
13016
  "path": "/media/v1/libraries/{library_id}/assets/{asset_id}",
12930
13017
  "streaming": "no",
@@ -12947,7 +13034,7 @@ export const operations = [
12947
13034
  "resource": "media.libraries.assets",
12948
13035
  "method": "retrieve",
12949
13036
  "summary": "Get asset",
12950
- "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.",
13037
+ "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.",
12951
13038
  "http": "GET",
12952
13039
  "path": "/media/v1/libraries/{library_id}/assets/{asset_id}",
12953
13040
  "streaming": "no",
@@ -12970,7 +13057,7 @@ export const operations = [
12970
13057
  "resource": "media.libraries.assets",
12971
13058
  "method": "update",
12972
13059
  "summary": "Update asset",
12973
- "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.",
13060
+ "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.",
12974
13061
  "http": "PATCH",
12975
13062
  "path": "/media/v1/libraries/{library_id}/assets/{asset_id}",
12976
13063
  "streaming": "no",
@@ -13001,7 +13088,7 @@ export const operations = [
13001
13088
  "name": "asset_folder",
13002
13089
  "type": "string",
13003
13090
  "required": false,
13004
- "description": "Organizational folder path, separate from public_id. Empty selects the root; leading or trailing slashes, empty path segments, and . or .. segments are rejected."
13091
+ "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."
13005
13092
  },
13006
13093
  {
13007
13094
  "name": "tags",
@@ -13019,11 +13106,57 @@ export const operations = [
13019
13106
  ]
13020
13107
  }
13021
13108
  },
13109
+ {
13110
+ "resource": "media.libraries.assets.frames",
13111
+ "method": "create",
13112
+ "summary": "Create frame URLs",
13113
+ "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.",
13114
+ "http": "POST",
13115
+ "path": "/media/v1/libraries/{library_id}/assets/{asset_id}/frames",
13116
+ "streaming": "no",
13117
+ "pagination": false,
13118
+ "pathParams": [
13119
+ {
13120
+ "name": "library_id",
13121
+ "sdkName": "library_id",
13122
+ "description": "Library identifier returned by library creation or listing; must be accessible to the current credential."
13123
+ },
13124
+ {
13125
+ "name": "asset_id",
13126
+ "sdkName": "asset_id",
13127
+ "description": "Video asset identifier returned by asset upload or listing in this library; read its duration before choosing timestamps."
13128
+ }
13129
+ ],
13130
+ "query": [],
13131
+ "body": {
13132
+ "required": true,
13133
+ "fields": [
13134
+ {
13135
+ "name": "at_micros",
13136
+ "type": "array",
13137
+ "itemType": "integer",
13138
+ "required": true,
13139
+ "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."
13140
+ },
13141
+ {
13142
+ "name": "width",
13143
+ "type": "integer",
13144
+ "enum": [
13145
+ 160,
13146
+ 320,
13147
+ 640
13148
+ ],
13149
+ "required": false,
13150
+ "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."
13151
+ }
13152
+ ]
13153
+ }
13154
+ },
13022
13155
  {
13023
13156
  "resource": "media.libraries.assets.reprocess",
13024
13157
  "method": "create",
13025
13158
  "summary": "Reprocess asset",
13026
- "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.",
13159
+ "description": " For understanding, Media generates proxies for video sources of 25 MB or more or longer than 10 minutes, and for audio-only sources of 100 MB or more; originals remain available unchanged. Long videos are supported. When a video proxy is needed and is still above 95 MB after recompression, the source is reported as UNSUPPORTED with the limit in the failure message. Proxy preparation uses the organization’s metered sandbox resources.",
13027
13160
  "http": "POST",
13028
13161
  "path": "/media/v1/libraries/{library_id}/assets/{asset_id}/reprocess",
13029
13162
  "streaming": "no",
@@ -13055,7 +13188,7 @@ export const operations = [
13055
13188
  "embedding"
13056
13189
  ],
13057
13190
  "required": false,
13058
- "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."
13191
+ "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."
13059
13192
  }
13060
13193
  ]
13061
13194
  }
@@ -13064,7 +13197,7 @@ export const operations = [
13064
13197
  "resource": "media.libraries.assets.understandings",
13065
13198
  "method": "list",
13066
13199
  "summary": "List understandings",
13067
- "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.",
13200
+ "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.",
13068
13201
  "http": "GET",
13069
13202
  "path": "/media/v1/libraries/{library_id}/assets/{asset_id}/understandings",
13070
13203
  "streaming": "no",
@@ -13096,10 +13229,13 @@ export const operations = [
13096
13229
  "tags",
13097
13230
  "ocr",
13098
13231
  "transcript",
13099
- "frame"
13232
+ "frame",
13233
+ "overview",
13234
+ "audio",
13235
+ "embedding"
13100
13236
  ],
13101
13237
  "required": false,
13102
- "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."
13238
+ "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."
13103
13239
  },
13104
13240
  {
13105
13241
  "name": "cursor",
@@ -13119,7 +13255,7 @@ export const operations = [
13119
13255
  "resource": "media.libraries.assets",
13120
13256
  "method": "batch",
13121
13257
  "summary": "Batch assets alias",
13122
- "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.",
13258
+ "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 or longer than 10 minutes, and for audio-only sources of 100 MB or more; originals remain available unchanged. Long videos are supported. When a video proxy is needed and is still above 95 MB after recompression, the source is reported as UNSUPPORTED with the limit in the failure message. Proxy preparation uses the organization’s metered sandbox resources.",
13123
13259
  "http": "POST",
13124
13260
  "path": "/media/v1/libraries/{library_id}/assets:batch",
13125
13261
  "streaming": "no",
@@ -13140,6 +13276,12 @@ export const operations = [
13140
13276
  "type": "object",
13141
13277
  "required": true,
13142
13278
  "description": "Select assets by ids or by expression, never both. Expression results and exclusions are resolved when the job is created."
13279
+ },
13280
+ {
13281
+ "name": "reason",
13282
+ "type": "string",
13283
+ "required": false,
13284
+ "description": "Audit reason for the operation; required for staff Admin reprocessing and recorded with the initiating actor. Nonblank, at most 2000 characters."
13143
13285
  }
13144
13286
  ]
13145
13287
  }
@@ -13148,7 +13290,7 @@ export const operations = [
13148
13290
  "resource": "media.libraries.batches",
13149
13291
  "method": "create",
13150
13292
  "summary": "Create batch",
13151
- "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.",
13293
+ "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 or longer than 10 minutes, and for audio-only sources of 100 MB or more; originals remain available unchanged. Long videos are supported. When a video proxy is needed and is still above 95 MB after recompression, the source is reported as UNSUPPORTED with the limit in the failure message. Proxy preparation uses the organization’s metered sandbox resources.",
13152
13294
  "http": "POST",
13153
13295
  "path": "/media/v1/libraries/{library_id}/batches",
13154
13296
  "streaming": "no",
@@ -13169,6 +13311,12 @@ export const operations = [
13169
13311
  "type": "object",
13170
13312
  "required": true,
13171
13313
  "description": "Select assets by ids or by expression, never both. Expression results and exclusions are resolved when the job is created."
13314
+ },
13315
+ {
13316
+ "name": "reason",
13317
+ "type": "string",
13318
+ "required": false,
13319
+ "description": "Audit reason for the operation; required for staff Admin reprocessing and recorded with the initiating actor. Nonblank, at most 2000 characters."
13172
13320
  }
13173
13321
  ]
13174
13322
  }
@@ -13177,7 +13325,7 @@ export const operations = [
13177
13325
  "resource": "media.libraries.batches",
13178
13326
  "method": "retrieve",
13179
13327
  "summary": "Get batch",
13180
- "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.",
13328
+ "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.",
13181
13329
  "http": "GET",
13182
13330
  "path": "/media/v1/libraries/{library_id}/batches/{job_id}",
13183
13331
  "streaming": "no",
@@ -13200,7 +13348,7 @@ export const operations = [
13200
13348
  "resource": "media.libraries.deliveryTokens",
13201
13349
  "method": "create",
13202
13350
  "summary": "Create delivery token",
13203
- "description": "Issue a time-limited bearer token for originals and transformed authenticated assets in an active library. Use library_id from library creation or listing; read access is sufficient. Append token as the __cld_token__ query parameter on a matching delivery URL. The default ACL covers this library and the default lifetime is 3600 seconds; narrow acl and expires_in before sharing. Anyone holding the token can read matching paths until expires_at.",
13351
+ "description": "Issue a time-limited bearer token for originals and transformed authenticated assets in an active library. Use library_id from library creation or listing; read access is sufficient. Append token as the __cld_token__ query parameter on a matching delivery URL. The default ACL covers this library and the default lifetime is 900 seconds; narrow acl and expires_in before sharing. Anyone holding the token can read matching paths until expires_at.",
13204
13352
  "http": "POST",
13205
13353
  "path": "/media/v1/libraries/{library_id}/delivery_tokens",
13206
13354
  "streaming": "no",
@@ -13226,7 +13374,7 @@ export const operations = [
13226
13374
  "name": "expires_in",
13227
13375
  "type": "integer",
13228
13376
  "required": false,
13229
- "description": "Token lifetime in seconds, from 1 to 604800 inclusive; defaults to 3600."
13377
+ "description": "Token lifetime in seconds, from 1 to 604800 inclusive; defaults to 900."
13230
13378
  }
13231
13379
  ]
13232
13380
  }
@@ -13235,7 +13383,7 @@ export const operations = [
13235
13383
  "resource": "media.libraries.events",
13236
13384
  "method": "list",
13237
13385
  "summary": "List events",
13238
- "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.",
13386
+ "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.",
13239
13387
  "http": "GET",
13240
13388
  "path": "/media/v1/libraries/{library_id}/events",
13241
13389
  "streaming": "no",
@@ -13282,7 +13430,7 @@ export const operations = [
13282
13430
  "resource": "media.libraries.folders",
13283
13431
  "method": "list",
13284
13432
  "summary": "List folders",
13285
- "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.",
13433
+ "description": "undefined understood_count includes ready and partial assets; failed_count includes failed assets. Both accumulate descendants. counts_complete is false during historical backfill.",
13286
13434
  "http": "GET",
13287
13435
  "path": "/media/v1/libraries/{library_id}/folders",
13288
13436
  "streaming": "no",
@@ -13304,71 +13452,12 @@ export const operations = [
13304
13452
  ]
13305
13453
  },
13306
13454
  {
13307
- "resource": "media.libraries.jobs",
13308
- "method": "retrieve",
13309
- "summary": "Get job alias",
13310
- "description": "Alias of batch retrieval. Read the job returned by a batch request, including terminal status, successful and failed counts, and individual failure codes.",
13311
- "http": "GET",
13312
- "path": "/media/v1/libraries/{library_id}/jobs/{job_id}",
13313
- "streaming": "no",
13314
- "pagination": false,
13315
- "pathParams": [
13316
- {
13317
- "name": "library_id",
13318
- "sdkName": "library_id",
13319
- "description": "Library ID returned by creation."
13320
- },
13321
- {
13322
- "name": "job_id",
13323
- "sdkName": "job_id",
13324
- "description": "Batch identifier returned by createBatch or batchAssets; resolved within this library."
13325
- }
13326
- ],
13327
- "query": []
13328
- },
13329
- {
13330
- "resource": "media.libraries.purge",
13331
- "method": "create",
13332
- "summary": "Purge library",
13333
- "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.",
13334
- "http": "POST",
13335
- "path": "/media/v1/libraries/{library_id}/purge",
13336
- "streaming": "no",
13337
- "pagination": false,
13338
- "pathParams": [
13339
- {
13340
- "name": "library_id",
13341
- "sdkName": "library_id",
13342
- "description": "Library ID returned by creation."
13343
- }
13344
- ],
13345
- "query": []
13346
- },
13347
- {
13348
- "resource": "media.libraries",
13349
- "method": "restore",
13350
- "summary": "Restore library",
13351
- "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.",
13352
- "http": "POST",
13353
- "path": "/media/v1/libraries/{library_id}/restore",
13354
- "streaming": "no",
13355
- "pagination": false,
13356
- "pathParams": [
13357
- {
13358
- "name": "library_id",
13359
- "sdkName": "library_id",
13360
- "description": "Library ID returned by creation."
13361
- }
13362
- ],
13363
- "query": []
13364
- },
13365
- {
13366
- "resource": "media.libraries.search",
13455
+ "resource": "media.libraries.generations",
13367
13456
  "method": "create",
13368
- "summary": "Semantic search alias",
13369
- "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.",
13457
+ "summary": "Create video generation",
13458
+ "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.",
13370
13459
  "http": "POST",
13371
- "path": "/media/v1/libraries/{library_id}/search",
13460
+ "path": "/media/v1/libraries/{library_id}/generations",
13372
13461
  "streaming": "no",
13373
13462
  "pagination": false,
13374
13463
  "pathParams": [
@@ -13383,115 +13472,280 @@ export const operations = [
13383
13472
  "required": true,
13384
13473
  "fields": [
13385
13474
  {
13386
- "name": "query",
13475
+ "name": "intent",
13387
13476
  "type": "string",
13388
13477
  "required": true,
13389
- "description": "Nonblank text to search against asset content and metadata."
13478
+ "description": "Generation operation; v1 accepts only video.generate text-to-video requests."
13390
13479
  },
13391
13480
  {
13392
- "name": "filter",
13481
+ "name": "prompt",
13393
13482
  "type": "string",
13394
- "required": false,
13395
- "description": "Optional expression filter restricting eligible assets; uses the expression-search syntax."
13483
+ "required": true,
13484
+ "description": "Text prompt describing the video to generate."
13396
13485
  },
13397
13486
  {
13398
- "name": "top_k",
13487
+ "name": "count",
13399
13488
  "type": "integer",
13400
13489
  "required": false,
13401
- "description": "Maximum search hits, from 1 to 50; defaults to 20."
13490
+ "description": "Number of videos to generate; defaults to 1 and must be from 1 to 4."
13402
13491
  },
13403
13492
  {
13404
- "name": "mode",
13405
- "type": "string",
13406
- "enum": [
13407
- "hybrid",
13408
- "semantic"
13409
- ],
13493
+ "name": "duration_seconds",
13494
+ "type": "integer",
13410
13495
  "required": false,
13411
- "description": "Ranking mode: hybrid combines semantic and keyword matches; semantic uses vector similarity only. Defaults to hybrid."
13412
- }
13413
- ]
13414
- }
13415
- },
13416
- {
13417
- "resource": "media.libraries.search.expression",
13418
- "method": "create",
13419
- "summary": "Expression search",
13420
- "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.",
13421
- "http": "POST",
13422
- "path": "/media/v1/libraries/{library_id}/search/expression",
13423
- "streaming": "no",
13424
- "pagination": false,
13425
- "pathParams": [
13426
- {
13427
- "name": "library_id",
13428
- "sdkName": "library_id",
13429
- "description": "Library ID returned by creation."
13430
- }
13431
- ],
13432
- "query": [],
13433
- "body": {
13434
- "required": true,
13435
- "fields": [
13496
+ "description": "Requested video duration in seconds; Router validates the model-specific supported durations."
13497
+ },
13436
13498
  {
13437
- "name": "expression",
13499
+ "name": "aspect_ratio",
13438
13500
  "type": "string",
13439
13501
  "required": false,
13440
- "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."
13502
+ "description": "Requested output aspect ratio; defaults to 16:9 and Router validates model support."
13441
13503
  },
13442
13504
  {
13443
- "name": "sort_by",
13444
- "type": "array",
13445
- "itemType": "object",
13505
+ "name": "model",
13506
+ "type": "string",
13446
13507
  "required": false,
13447
- "description": "Ordered list of single-field sort objects. Allowed fields are created_at, public_id, display_name, bytes and uploaded_at; directions are asc or desc. Fields cannot repeat. Defaults to created_at descending."
13508
+ "description": "Router model with video_generation capability; defaults to wan2.7-t2v."
13448
13509
  },
13449
13510
  {
13450
- "name": "max_results",
13451
- "type": "integer",
13511
+ "name": "save",
13512
+ "type": "string",
13513
+ "enum": [
13514
+ "candidate",
13515
+ "library"
13516
+ ],
13452
13517
  "required": false,
13453
- "description": "Maximum assets per page, from 1 to 500; defaults to 100."
13518
+ "description": "candidate keeps outputs temporary for explicit save calls; library saves successful outputs automatically."
13454
13519
  },
13455
13520
  {
13456
- "name": "next_cursor",
13521
+ "name": "asset_folder",
13457
13522
  "type": "string",
13458
13523
  "required": false,
13459
- "description": "Continuation token returned by the previous expression-search page. Keep sort_by unchanged when continuing."
13524
+ "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."
13460
13525
  },
13461
13526
  {
13462
- "name": "with_field",
13527
+ "name": "tags",
13463
13528
  "type": "array",
13464
13529
  "itemType": "string",
13530
+ "required": false,
13531
+ "description": "Tags applied when an output becomes a library asset."
13532
+ },
13533
+ {
13534
+ "name": "understanding",
13535
+ "type": "string",
13465
13536
  "enum": [
13466
- "tags",
13467
- "context"
13537
+ "auto",
13538
+ "skip"
13468
13539
  ],
13469
13540
  "required": false,
13470
- "description": "Additional resource fields to include: tags adds asset labels and context adds custom metadata. Both are omitted unless requested."
13541
+ "description": "Understanding behavior when a candidate is saved as an asset; defaults to auto."
13471
13542
  },
13472
13543
  {
13473
- "name": "aggregate",
13544
+ "name": "references",
13474
13545
  "type": "array",
13475
- "itemType": "string",
13546
+ "itemType": "object",
13547
+ "required": false,
13548
+ "description": "Not supported in v1; omit this field. Only text-to-video is currently available."
13549
+ }
13550
+ ]
13551
+ }
13552
+ },
13553
+ {
13554
+ "resource": "media.libraries.jobs",
13555
+ "method": "list",
13556
+ "summary": "List jobs",
13557
+ "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.",
13558
+ "http": "GET",
13559
+ "path": "/media/v1/libraries/{library_id}/jobs",
13560
+ "streaming": "no",
13561
+ "pagination": true,
13562
+ "pathParams": [
13563
+ {
13564
+ "name": "library_id",
13565
+ "sdkName": "library_id",
13566
+ "description": "Library ID returned by creation."
13567
+ }
13568
+ ],
13569
+ "query": [
13570
+ {
13571
+ "name": "status",
13572
+ "type": "string",
13573
+ "enum": [
13574
+ "queued",
13575
+ "running",
13576
+ "completed",
13577
+ "completed_with_errors",
13578
+ "failed",
13579
+ "cancelled"
13580
+ ],
13581
+ "required": false,
13582
+ "description": "Filter jobs by their current status."
13583
+ },
13584
+ {
13585
+ "name": "limit",
13586
+ "type": "integer",
13587
+ "required": false,
13588
+ "description": "Maximum entries in this page, from 1 through 100; defaults to 100."
13589
+ },
13590
+ {
13591
+ "name": "cursor",
13592
+ "type": "string",
13593
+ "required": false,
13594
+ "description": "Job id from the previous page’s next_cursor; omit for the first page."
13595
+ }
13596
+ ]
13597
+ },
13598
+ {
13599
+ "resource": "media.libraries.jobs",
13600
+ "method": "retrieve",
13601
+ "summary": "Get job",
13602
+ "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.",
13603
+ "http": "GET",
13604
+ "path": "/media/v1/libraries/{library_id}/jobs/{job_id}",
13605
+ "streaming": "no",
13606
+ "pagination": false,
13607
+ "pathParams": [
13608
+ {
13609
+ "name": "library_id",
13610
+ "sdkName": "library_id",
13611
+ "description": "Library ID returned by creation."
13612
+ },
13613
+ {
13614
+ "name": "job_id",
13615
+ "sdkName": "job_id",
13616
+ "description": "Job identifier returned by batch creation, video-generation creation or job listing; resolved within this library."
13617
+ }
13618
+ ],
13619
+ "query": []
13620
+ },
13621
+ {
13622
+ "resource": "media.libraries.jobs",
13623
+ "method": "cancel",
13624
+ "summary": "Cancel job",
13625
+ "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.",
13626
+ "http": "POST",
13627
+ "path": "/media/v1/libraries/{library_id}/jobs/{job_id}/cancel",
13628
+ "streaming": "no",
13629
+ "pagination": false,
13630
+ "pathParams": [
13631
+ {
13632
+ "name": "library_id",
13633
+ "sdkName": "library_id",
13634
+ "description": "Library ID returned by creation."
13635
+ },
13636
+ {
13637
+ "name": "job_id",
13638
+ "sdkName": "job_id",
13639
+ "description": "Job identifier returned by batch or generation creation; the job is resolved within the specified library."
13640
+ }
13641
+ ],
13642
+ "query": []
13643
+ },
13644
+ {
13645
+ "resource": "media.libraries.jobs.outputs.save",
13646
+ "method": "create",
13647
+ "summary": "Save generation output",
13648
+ "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.",
13649
+ "http": "POST",
13650
+ "path": "/media/v1/libraries/{library_id}/jobs/{job_id}/outputs/{index}/save",
13651
+ "streaming": "no",
13652
+ "pagination": false,
13653
+ "pathParams": [
13654
+ {
13655
+ "name": "library_id",
13656
+ "sdkName": "library_id",
13657
+ "description": "Library ID returned by creation."
13658
+ },
13659
+ {
13660
+ "name": "job_id",
13661
+ "sdkName": "job_id",
13662
+ "description": "Job identifier returned by batch or generation creation; the job is resolved within the specified library."
13663
+ },
13664
+ {
13665
+ "name": "index",
13666
+ "sdkName": "index",
13667
+ "description": "Zero-based position of the candidate in the Job outputs array."
13668
+ }
13669
+ ],
13670
+ "query": [],
13671
+ "body": {
13672
+ "required": false,
13673
+ "fields": [
13674
+ {
13675
+ "name": "public_id",
13676
+ "type": "string",
13677
+ "required": false,
13678
+ "description": "Delivery identifier for the saved asset; defaults to gen_<job_id>_<index> and is idempotent."
13679
+ },
13680
+ {
13681
+ "name": "asset_folder",
13682
+ "type": "string",
13683
+ "required": false,
13684
+ "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."
13685
+ },
13686
+ {
13687
+ "name": "tags",
13688
+ "type": "array",
13689
+ "itemType": "string",
13690
+ "required": false,
13691
+ "description": "Tags to apply to the saved asset."
13692
+ },
13693
+ {
13694
+ "name": "understanding",
13695
+ "type": "string",
13476
13696
  "enum": [
13477
- "resource_type",
13478
- "format",
13479
- "asset_folder",
13480
- "processing_state"
13697
+ "auto",
13698
+ "skip"
13481
13699
  ],
13482
13700
  "required": false,
13483
- "description": "Facets to count over matching assets, returned under aggregations."
13701
+ "description": "Understanding behavior for the saved asset; defaults to auto."
13484
13702
  }
13485
13703
  ]
13486
13704
  }
13487
13705
  },
13488
13706
  {
13489
- "resource": "media.libraries.search.semantic",
13707
+ "resource": "media.libraries.purge",
13490
13708
  "method": "create",
13491
- "summary": "Semantic search",
13492
- "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.",
13709
+ "summary": "Purge library",
13710
+ "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.",
13493
13711
  "http": "POST",
13494
- "path": "/media/v1/libraries/{library_id}/search/semantic",
13712
+ "path": "/media/v1/libraries/{library_id}/purge",
13713
+ "streaming": "no",
13714
+ "pagination": false,
13715
+ "pathParams": [
13716
+ {
13717
+ "name": "library_id",
13718
+ "sdkName": "library_id",
13719
+ "description": "Library ID returned by creation."
13720
+ }
13721
+ ],
13722
+ "query": []
13723
+ },
13724
+ {
13725
+ "resource": "media.libraries",
13726
+ "method": "restore",
13727
+ "summary": "Restore library",
13728
+ "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.",
13729
+ "http": "POST",
13730
+ "path": "/media/v1/libraries/{library_id}/restore",
13731
+ "streaming": "no",
13732
+ "pagination": false,
13733
+ "pathParams": [
13734
+ {
13735
+ "name": "library_id",
13736
+ "sdkName": "library_id",
13737
+ "description": "Library ID returned by creation."
13738
+ }
13739
+ ],
13740
+ "query": []
13741
+ },
13742
+ {
13743
+ "resource": "media.libraries.search",
13744
+ "method": "create",
13745
+ "summary": "Semantic search alias",
13746
+ "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.",
13747
+ "http": "POST",
13748
+ "path": "/media/v1/libraries/{library_id}/search",
13495
13749
  "streaming": "no",
13496
13750
  "pagination": false,
13497
13751
  "pathParams": [
@@ -13537,12 +13791,12 @@ export const operations = [
13537
13791
  }
13538
13792
  },
13539
13793
  {
13540
- "resource": "media.libraries.search.visual",
13794
+ "resource": "media.libraries.search.expression",
13541
13795
  "method": "create",
13542
- "summary": "Visual search",
13796
+ "summary": "Expression search",
13543
13797
  "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.",
13544
13798
  "http": "POST",
13545
- "path": "/media/v1/libraries/{library_id}/search/visual",
13799
+ "path": "/media/v1/libraries/{library_id}/search/expression",
13546
13800
  "streaming": "no",
13547
13801
  "pagination": false,
13548
13802
  "pathParams": [
@@ -13557,63 +13811,247 @@ export const operations = [
13557
13811
  "required": true,
13558
13812
  "fields": [
13559
13813
  {
13560
- "name": "asset_id",
13814
+ "name": "expression",
13561
13815
  "type": "string",
13562
13816
  "required": false,
13563
- "description": "Asset identifier returned by upload or asset listing; distinct from public_id and content hashes."
13817
+ "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."
13564
13818
  },
13565
13819
  {
13566
- "name": "image",
13567
- "type": "object",
13820
+ "name": "sort_by",
13821
+ "type": "array",
13822
+ "itemType": "object",
13568
13823
  "required": false,
13569
- "description": "Inline image used as the visual query; mutually exclusive with asset_id."
13824
+ "description": "Ordered list of single-field sort objects. Allowed fields are created_at, public_id, display_name, bytes and uploaded_at; directions are asc or desc. Fields cannot repeat. Defaults to created_at descending."
13570
13825
  },
13571
13826
  {
13572
- "name": "top_k",
13827
+ "name": "max_results",
13573
13828
  "type": "integer",
13574
13829
  "required": false,
13575
- "description": "Maximum visual-search hits, from 1 to 50; defaults to 20."
13830
+ "description": "Maximum assets per page, from 1 to 500; defaults to 100."
13576
13831
  },
13577
13832
  {
13578
- "name": "filter",
13833
+ "name": "next_cursor",
13579
13834
  "type": "string",
13580
13835
  "required": false,
13581
- "description": "Expression filter restricting eligible result assets."
13836
+ "description": "Continuation token returned by the previous expression-search page. Keep sort_by unchanged when continuing."
13837
+ },
13838
+ {
13839
+ "name": "with_field",
13840
+ "type": "array",
13841
+ "itemType": "string",
13842
+ "enum": [
13843
+ "tags",
13844
+ "context"
13845
+ ],
13846
+ "required": false,
13847
+ "description": "Additional resource fields to include: tags adds asset labels and context adds custom metadata. Both are omitted unless requested."
13848
+ },
13849
+ {
13850
+ "name": "aggregate",
13851
+ "type": "array",
13852
+ "itemType": "string",
13853
+ "enum": [
13854
+ "resource_type",
13855
+ "format",
13856
+ "asset_folder",
13857
+ "processing_state"
13858
+ ],
13859
+ "required": false,
13860
+ "description": "Facets to count over matching assets, returned under aggregations."
13582
13861
  }
13583
13862
  ]
13584
13863
  }
13585
13864
  },
13586
13865
  {
13587
- "resource": "meta.docs",
13588
- "method": "search",
13589
- "summary": "Search platform documentation",
13590
- "description": "Find guides and references by keyword before reading them with praxis.meta.docs.retrieve. Public; no API key required. Matches documentation titles, headings and page text without case sensitivity; all query words must occur. q is required; limit defaults to 20 and accepts 1–50. lang defaults to zh or use en for English. Returns paths, page titles, canonical URLs and short matching snippets; no matches returns an empty array.",
13591
- "http": "GET",
13592
- "path": "/meta/v1/docs/search",
13866
+ "resource": "media.libraries.search.semantic",
13867
+ "method": "create",
13868
+ "summary": "Semantic search",
13869
+ "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.",
13870
+ "http": "POST",
13871
+ "path": "/media/v1/libraries/{library_id}/search/semantic",
13593
13872
  "streaming": "no",
13594
13873
  "pagination": false,
13595
- "pathParams": [],
13596
- "query": [
13597
- {
13598
- "name": "q",
13599
- "type": "string",
13600
- "required": true,
13601
- "description": "Keywords describing the syntax or guide needed, for example export or workflow."
13602
- },
13603
- {
13604
- "name": "limit",
13605
- "type": "integer",
13606
- "required": false,
13607
- "description": "Maximum number of matching pages returned; integer 1–50, default 20."
13608
- },
13874
+ "pathParams": [
13609
13875
  {
13610
- "name": "lang",
13611
- "type": "string",
13612
- "enum": [
13613
- "zh",
13614
- "en"
13615
- ],
13616
- "required": false,
13876
+ "name": "library_id",
13877
+ "sdkName": "library_id",
13878
+ "description": "Library ID returned by creation."
13879
+ }
13880
+ ],
13881
+ "query": [],
13882
+ "body": {
13883
+ "required": true,
13884
+ "fields": [
13885
+ {
13886
+ "name": "query",
13887
+ "type": "string",
13888
+ "required": true,
13889
+ "description": "Nonblank text to search against asset content and metadata."
13890
+ },
13891
+ {
13892
+ "name": "filter",
13893
+ "type": "string",
13894
+ "required": false,
13895
+ "description": "Optional expression filter restricting eligible assets; uses the expression-search syntax."
13896
+ },
13897
+ {
13898
+ "name": "top_k",
13899
+ "type": "integer",
13900
+ "required": false,
13901
+ "description": "Maximum search hits, from 1 to 50; defaults to 20."
13902
+ },
13903
+ {
13904
+ "name": "mode",
13905
+ "type": "string",
13906
+ "enum": [
13907
+ "hybrid",
13908
+ "semantic"
13909
+ ],
13910
+ "required": false,
13911
+ "description": "Ranking mode: hybrid combines semantic and keyword matches; semantic uses vector similarity only. Defaults to hybrid."
13912
+ }
13913
+ ]
13914
+ }
13915
+ },
13916
+ {
13917
+ "resource": "media.libraries.search.visual",
13918
+ "method": "create",
13919
+ "summary": "Visual search",
13920
+ "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.",
13921
+ "http": "POST",
13922
+ "path": "/media/v1/libraries/{library_id}/search/visual",
13923
+ "streaming": "no",
13924
+ "pagination": false,
13925
+ "pathParams": [
13926
+ {
13927
+ "name": "library_id",
13928
+ "sdkName": "library_id",
13929
+ "description": "Library ID returned by creation."
13930
+ }
13931
+ ],
13932
+ "query": [],
13933
+ "body": {
13934
+ "required": true,
13935
+ "fields": [
13936
+ {
13937
+ "name": "asset_id",
13938
+ "type": "string",
13939
+ "required": false,
13940
+ "description": "Asset identifier returned by upload or asset listing; distinct from public_id and content hashes."
13941
+ },
13942
+ {
13943
+ "name": "image",
13944
+ "type": "object",
13945
+ "required": false,
13946
+ "description": "Inline image used as the visual query; mutually exclusive with asset_id."
13947
+ },
13948
+ {
13949
+ "name": "top_k",
13950
+ "type": "integer",
13951
+ "required": false,
13952
+ "description": "Maximum visual-search hits, from 1 to 50; defaults to 20."
13953
+ },
13954
+ {
13955
+ "name": "filter",
13956
+ "type": "string",
13957
+ "required": false,
13958
+ "description": "Expression filter restricting eligible result assets."
13959
+ }
13960
+ ]
13961
+ }
13962
+ },
13963
+ {
13964
+ "resource": "media.libraries.understandings",
13965
+ "method": "list",
13966
+ "summary": "List understanding results across a library",
13967
+ "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.",
13968
+ "http": "GET",
13969
+ "path": "/media/v1/libraries/{library_id}/understandings",
13970
+ "streaming": "no",
13971
+ "pagination": true,
13972
+ "pathParams": [
13973
+ {
13974
+ "name": "library_id",
13975
+ "sdkName": "library_id",
13976
+ "description": "Library ID returned by creation."
13977
+ }
13978
+ ],
13979
+ "query": [
13980
+ {
13981
+ "name": "folder",
13982
+ "type": "string",
13983
+ "required": false,
13984
+ "description": "Folder path including all descendants; omitted or empty selects the entire library."
13985
+ },
13986
+ {
13987
+ "name": "kinds",
13988
+ "type": "string",
13989
+ "required": false,
13990
+ "description": "Comma-separated output kinds: caption, tags, ocr, frame, transcript, overview, audio, embedding. Omit or empty to include every kind."
13991
+ },
13992
+ {
13993
+ "name": "cursor",
13994
+ "type": "string",
13995
+ "required": false,
13996
+ "description": "Cursor from the previous next_cursor."
13997
+ },
13998
+ {
13999
+ "name": "limit",
14000
+ "type": "integer",
14001
+ "required": false,
14002
+ "description": "Maximum entries in this page, from 1 through 100; defaults to 100."
14003
+ }
14004
+ ]
14005
+ },
14006
+ {
14007
+ "resource": "media.libraries.understandings",
14008
+ "method": "retrieveFailureSummary",
14009
+ "summary": "Summarize understanding failures",
14010
+ "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.",
14011
+ "http": "GET",
14012
+ "path": "/media/v1/libraries/{library_id}/understandings/failure_summary",
14013
+ "streaming": "no",
14014
+ "pagination": false,
14015
+ "pathParams": [
14016
+ {
14017
+ "name": "library_id",
14018
+ "sdkName": "library_id",
14019
+ "description": "Library ID returned by creation."
14020
+ }
14021
+ ],
14022
+ "query": []
14023
+ },
14024
+ {
14025
+ "resource": "meta.docs",
14026
+ "method": "search",
14027
+ "summary": "Search platform documentation",
14028
+ "description": "Find guides and references by keyword before reading them with praxis.meta.docs.retrieve. Public; no API key required. Matches documentation titles, headings and page text without case sensitivity; all query words must occur. q is required; limit defaults to 20 and accepts 1–50. lang defaults to zh or use en for English. Returns paths, page titles, canonical URLs and short matching snippets; no matches returns an empty array.",
14029
+ "http": "GET",
14030
+ "path": "/meta/v1/docs/search",
14031
+ "streaming": "no",
14032
+ "pagination": false,
14033
+ "pathParams": [],
14034
+ "query": [
14035
+ {
14036
+ "name": "q",
14037
+ "type": "string",
14038
+ "required": true,
14039
+ "description": "Keywords describing the syntax or guide needed, for example export or workflow."
14040
+ },
14041
+ {
14042
+ "name": "limit",
14043
+ "type": "integer",
14044
+ "required": false,
14045
+ "description": "Maximum number of matching pages returned; integer 1–50, default 20."
14046
+ },
14047
+ {
14048
+ "name": "lang",
14049
+ "type": "string",
14050
+ "enum": [
14051
+ "zh",
14052
+ "en"
14053
+ ],
14054
+ "required": false,
13617
14055
  "description": "Documentation language: zh for Chinese (default), en for English."
13618
14056
  }
13619
14057
  ]
@@ -13866,25 +14304,25 @@ export const operations = [
13866
14304
  "name": "model",
13867
14305
  "type": "string",
13868
14306
  "required": true,
13869
- "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."
14307
+ "description": "Model catalog identifier declaring openai.audio.transcriptions; use it unchanged, including any creator prefix."
13870
14308
  },
13871
14309
  {
13872
14310
  "name": "file",
13873
14311
  "type": "string",
13874
14312
  "required": true,
13875
- "description": "Audio file to transcribe, uploaded as multipart/form-data. Router support (supported): Verified to take effect."
14313
+ "description": "Audio bytes uploaded as a multipart file; supported formats and input limits depend on the selected model."
13876
14314
  },
13877
14315
  {
13878
14316
  "name": "language",
13879
14317
  "type": "string",
13880
14318
  "required": false,
13881
- "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."
14319
+ "description": "Source language code when known; omit to let the model detect the language."
13882
14320
  },
13883
14321
  {
13884
14322
  "name": "prompt",
13885
14323
  "type": "string",
13886
14324
  "required": false,
13887
- "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."
14325
+ "description": "Optional vocabulary or contextual guidance for recognizing the audio; support depends on the selected model."
13888
14326
  },
13889
14327
  {
13890
14328
  "name": "response_format",
@@ -13892,20 +14330,22 @@ export const operations = [
13892
14330
  "enum": [
13893
14331
  "json",
13894
14332
  "text",
13895
- "verbose_json"
14333
+ "verbose_json",
14334
+ "diarized_json"
13896
14335
  ],
13897
14336
  "required": false,
13898
- "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."
14337
+ "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."
13899
14338
  },
13900
14339
  {
13901
14340
  "name": "timestamp_granularities[]",
13902
14341
  "type": "array",
13903
14342
  "itemType": "string",
13904
14343
  "enum": [
14344
+ "word",
13905
14345
  "segment"
13906
14346
  ],
13907
14347
  "required": false,
13908
- "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."
14348
+ "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."
13909
14349
  },
13910
14350
  {
13911
14351
  "name": "temperature",
@@ -15640,219 +16080,752 @@ export const operations = [
15640
16080
  "pathParams": [],
15641
16081
  "query": [
15642
16082
  {
15643
- "name": "after",
16083
+ "name": "after",
16084
+ "type": "string",
16085
+ "required": false,
16086
+ "description": "Cursor: the id of the video job after which the page starts, normally the `last_id` of the previous page. It must refer to an existing job of yours, otherwise the call fails."
16087
+ },
16088
+ {
16089
+ "name": "limit",
16090
+ "type": "integer",
16091
+ "required": false,
16092
+ "description": "Maximum number of jobs per page, from 1 to 100; defaults to 20."
16093
+ },
16094
+ {
16095
+ "name": "order",
16096
+ "type": "string",
16097
+ "enum": [
16098
+ "asc",
16099
+ "desc"
16100
+ ],
16101
+ "required": false,
16102
+ "description": "Sort order by creation time: desc (default) lists the newest job first, asc the oldest first."
16103
+ }
16104
+ ]
16105
+ },
16106
+ {
16107
+ "resource": "model.videos",
16108
+ "method": "create",
16109
+ "summary": "Create video",
16110
+ "description": "OpenAI video API with OpenRouter request and response extensions.",
16111
+ "http": "POST",
16112
+ "path": "/model/v1/videos",
16113
+ "streaming": "no",
16114
+ "pagination": false,
16115
+ "multipart": true,
16116
+ "pathParams": [],
16117
+ "query": [],
16118
+ "body": {
16119
+ "required": true,
16120
+ "fields": [
16121
+ {
16122
+ "name": "model",
16123
+ "type": "string",
16124
+ "required": false,
16125
+ "description": "Video model id, for example `wan2.7-t2v`; list candidates with listModels?type=video. Router support (partial): Select a registered video model explicitly, for example wan2.7-t2v (size=1280x720, seconds=4). Capability preflight errors are reported before creation."
16126
+ },
16127
+ {
16128
+ "name": "prompt",
16129
+ "type": "string",
16130
+ "required": true,
16131
+ "description": "Text description of the video, at least 1 character. Router support (supported): Controls video content; missing or empty values return 400."
16132
+ },
16133
+ {
16134
+ "name": "seconds",
16135
+ "type": "object",
16136
+ "required": false,
16137
+ "description": "Takes precedence over duration."
16138
+ },
16139
+ {
16140
+ "name": "duration",
16141
+ "type": "integer",
16142
+ "required": false,
16143
+ "description": "Length of the video in whole seconds. `seconds` takes precedence when both are given."
16144
+ },
16145
+ {
16146
+ "name": "size",
16147
+ "type": "string",
16148
+ "required": false,
16149
+ "description": "Output resolution as `WIDTHxHEIGHT`, for example `1280x720`. Router support (partial): Subject to model capability preflight. Earlier wan2.7-t2v samples always produced 1280x720; accepted sizes are not guaranteed pixel-for-pixel."
16150
+ },
16151
+ {
16152
+ "name": "input_reference",
16153
+ "type": "object",
16154
+ "required": false,
16155
+ "description": "Reference image for image-to-video: a URL or base64 data URL, an object with `image_url`, or an uploaded image file (multipart, at most 20 MiB)."
16156
+ },
16157
+ {
16158
+ "name": "input_references",
16159
+ "type": "array",
16160
+ "itemType": "object",
16161
+ "required": false,
16162
+ "description": "Several reference images; each entry is a URL or base64 data URL, or an object with `image_url`."
16163
+ },
16164
+ {
16165
+ "name": "frame_images",
16166
+ "type": "array",
16167
+ "itemType": "object",
16168
+ "required": false,
16169
+ "description": "Images that pin the first and last frame; at most 2 entries."
16170
+ },
16171
+ {
16172
+ "name": "resolution",
16173
+ "type": "string",
16174
+ "required": false,
16175
+ "description": "Output resolution label such as `720p`, for models that take a label instead of `size`."
16176
+ },
16177
+ {
16178
+ "name": "aspect_ratio",
16179
+ "type": "string",
16180
+ "required": false,
16181
+ "description": "Aspect ratio of the video such as `16:9`."
16182
+ },
16183
+ {
16184
+ "name": "generate_audio",
16185
+ "type": "boolean",
16186
+ "required": false,
16187
+ "description": "Whether the video carries a generated audio track. Router support (supported): false produces no audio track on wan2.7-t2v; the default output includes audio."
16188
+ },
16189
+ {
16190
+ "name": "seed",
16191
+ "type": "integer",
16192
+ "required": false,
16193
+ "description": "Seed for reproducible generation, on models that support it."
16194
+ },
16195
+ {
16196
+ "name": "callback_url",
16197
+ "type": "string",
16198
+ "required": false,
16199
+ "description": "HTTP or HTTPS callback URL, forwarded to models that support completion callbacks."
16200
+ },
16201
+ {
16202
+ "name": "quality",
16203
+ "type": "string",
16204
+ "required": false,
16205
+ "description": "Provider-specific quality setting."
16206
+ }
16207
+ ]
16208
+ }
16209
+ },
16210
+ {
16211
+ "resource": "model.videos",
16212
+ "method": "delete",
16213
+ "summary": "Delete video",
16214
+ "description": "OpenAI video API with OpenRouter request and response extensions.",
16215
+ "http": "DELETE",
16216
+ "path": "/model/v1/videos/{video_id}",
16217
+ "streaming": "no",
16218
+ "pagination": false,
16219
+ "pathParams": [
16220
+ {
16221
+ "name": "video_id",
16222
+ "sdkName": "video_id",
16223
+ "description": "Id of the video job whose output you want, the `id` returned by createVideo. The job must be completed; before that the call answers 400."
16224
+ }
16225
+ ],
16226
+ "query": []
16227
+ },
16228
+ {
16229
+ "resource": "model.videos",
16230
+ "method": "retrieve",
16231
+ "summary": "Retrieve video",
16232
+ "description": "OpenAI video API with OpenRouter request and response extensions.",
16233
+ "http": "GET",
16234
+ "path": "/model/v1/videos/{video_id}",
16235
+ "streaming": "no",
16236
+ "pagination": false,
16237
+ "pathParams": [
16238
+ {
16239
+ "name": "video_id",
16240
+ "sdkName": "video_id",
16241
+ "description": "Id of the video job whose output you want, the `id` returned by createVideo. The job must be completed; before that the call answers 400."
16242
+ }
16243
+ ],
16244
+ "query": []
16245
+ },
16246
+ {
16247
+ "resource": "model.videos",
16248
+ "method": "retrieveContent",
16249
+ "summary": "Download video",
16250
+ "description": "OpenAI video API with OpenRouter request and response extensions.",
16251
+ "http": "GET",
16252
+ "path": "/model/v1/videos/{video_id}/content",
16253
+ "streaming": "no",
16254
+ "pagination": false,
16255
+ "pathParams": [
16256
+ {
16257
+ "name": "video_id",
16258
+ "sdkName": "video_id",
16259
+ "description": "Id of the video job whose output you want, the `id` returned by createVideo. The job must be completed; before that the call answers 400."
16260
+ }
16261
+ ],
16262
+ "query": [
16263
+ {
16264
+ "name": "variant",
16265
+ "type": "string",
16266
+ "enum": [
16267
+ "video",
16268
+ "thumbnail",
16269
+ "spritesheet"
16270
+ ],
16271
+ "required": false,
16272
+ "description": "Spritesheet is not available in this release (400)."
16273
+ },
16274
+ {
16275
+ "name": "index",
16276
+ "type": "integer",
16277
+ "required": false,
16278
+ "description": "Output index; this release produces index 0. variant takes precedence."
16279
+ }
16280
+ ]
16281
+ },
16282
+ {
16283
+ "resource": "model.videos",
16284
+ "method": "remix",
16285
+ "summary": "Remix video",
16286
+ "description": "Not supported in this release; always returns 400.",
16287
+ "http": "POST",
16288
+ "path": "/model/v1/videos/{video_id}/remix",
16289
+ "streaming": "no",
16290
+ "pagination": false,
16291
+ "pathParams": [
16292
+ {
16293
+ "name": "video_id",
16294
+ "sdkName": "video_id",
16295
+ "description": "Id of the video job whose output you want, the `id` returned by createVideo. The job must be completed; before that the call answers 400."
16296
+ }
16297
+ ],
16298
+ "query": []
16299
+ },
16300
+ {
16301
+ "resource": "ontology.changesets",
16302
+ "method": "create",
16303
+ "summary": "Apply changeset",
16304
+ "description": "Apply a batch of node, relation and invalidation operations as one transaction, when a mirror has several records to write together and a partial write would leave the graph inconsistent. Every operation succeeds or none is applied. Send an Idempotency-Key header; the same key with the same content replays the first result, and the same key with different content is ONTOLOGY_CONFLICT.",
16305
+ "http": "POST",
16306
+ "path": "/ontology/v1/changesets",
16307
+ "streaming": "no",
16308
+ "pagination": false,
16309
+ "pathParams": [],
16310
+ "query": [],
16311
+ "body": {
16312
+ "required": true,
16313
+ "fields": [
16314
+ {
16315
+ "name": "at",
16316
+ "type": "string",
16317
+ "required": true,
16318
+ "description": "World time the batch describes, in ISO 8601 UTC; operations without their own time are dated by it."
16319
+ },
16320
+ {
16321
+ "name": "scope",
16322
+ "type": "string",
16323
+ "required": false,
16324
+ "description": "Scope the batch came from, normally the session id it was observed in; it is stored with the operations for later reading."
16325
+ },
16326
+ {
16327
+ "name": "ops",
16328
+ "type": "array",
16329
+ "itemType": "object",
16330
+ "required": true,
16331
+ "description": "At most 500 operations, applied in order; each names its kind in op and the fields that kind requires."
16332
+ }
16333
+ ]
16334
+ }
16335
+ },
16336
+ {
16337
+ "resource": "ontology.nodes",
16338
+ "method": "list",
16339
+ "summary": "List nodes",
16340
+ "description": "Discover the entities in this organization's graph and obtain node ids for retrieval, updates and relations. Filter by type, by free text over names, aliases, descriptions and facts, or by owner; limit is 1–100 and defaults to 50. Omit cursor for the first page, then copy next_cursor into the next request until it is null. A node whose content belongs to somebody else comes back as a restricted entry carrying only its id, type and name.",
16341
+ "http": "GET",
16342
+ "path": "/ontology/v1/nodes",
16343
+ "streaming": "no",
16344
+ "pagination": true,
16345
+ "pathParams": [],
16346
+ "query": [
16347
+ {
16348
+ "name": "type",
16349
+ "type": "array",
16350
+ "itemType": "string",
16351
+ "required": false,
16352
+ "description": "Repeat to filter to any of several registered node type names, for example type=file&type=ticket; omit to list every type."
16353
+ },
16354
+ {
16355
+ "name": "q",
16356
+ "type": "string",
16357
+ "required": false,
16358
+ "description": "Free text matched against node names, aliases and descriptions; omit to list without a text filter."
16359
+ },
16360
+ {
16361
+ "name": "owner",
16362
+ "type": "string",
16363
+ "required": false,
16364
+ "description": "Filter to nodes owned by this member id, or omit to list nodes of every owner; organization-wide nodes carry no owner."
16365
+ },
16366
+ {
16367
+ "name": "as_of",
16368
+ "type": "string",
16369
+ "required": false,
16370
+ "description": "ISO 8601 timestamp; return the graph as it was then, so a node recorded later is absent. Omit to read current state."
16371
+ },
16372
+ {
16373
+ "name": "limit",
16374
+ "type": "integer",
16375
+ "required": false,
16376
+ "description": "Maximum items to return per page, from 1 to 100; defaults to 50 when omitted. Values above 100 are clamped to 100."
16377
+ },
16378
+ {
16379
+ "name": "cursor",
16380
+ "type": "string",
16381
+ "required": false,
16382
+ "description": "Opaque next_cursor from the preceding list response; omit for the first page and stop when next_cursor is null."
16383
+ }
16384
+ ]
16385
+ },
16386
+ {
16387
+ "resource": "ontology.nodes",
16388
+ "method": "create",
16389
+ "summary": "Create node",
16390
+ "description": "Record one entity in the graph, for a system mirroring a record it owns. type must already be registered and ref, when given, must match that type's ref_prefix. Send an Idempotency-Key header; repeating the same key with the same content returns the first result instead of creating a second node. This writes structure only — to give an agent something to remember, use POST /agent/v1/agents/{agent_id}/consolidations.",
16391
+ "http": "POST",
16392
+ "path": "/ontology/v1/nodes",
16393
+ "streaming": "no",
16394
+ "pagination": false,
16395
+ "pathParams": [],
16396
+ "query": [],
16397
+ "body": {
16398
+ "required": true,
16399
+ "fields": [
16400
+ {
16401
+ "name": "type",
16402
+ "type": "string",
16403
+ "required": true,
16404
+ "description": "Registered node type name from types.list; an unregistered name is refused and nothing is written."
16405
+ },
16406
+ {
16407
+ "name": "ref",
16408
+ "type": "string",
16409
+ "required": false,
16410
+ "description": "Id of the mirrored record in the owning service, which must start with the type's ref_prefix; omit or null for a concept with no external record."
16411
+ },
16412
+ {
16413
+ "name": "name",
16414
+ "type": "string",
16415
+ "required": true,
16416
+ "description": "Display name of the entity, at most 200 characters."
16417
+ },
16418
+ {
16419
+ "name": "aliases",
16420
+ "type": "array",
16421
+ "itemType": "string",
16422
+ "required": false,
16423
+ "description": "Other names this entity is known by; they are matched by search alongside the name."
16424
+ },
16425
+ {
16426
+ "name": "description",
16427
+ "type": "string",
16428
+ "required": false,
16429
+ "description": "Profile of the entity, at most 500 characters; omit or null for none."
16430
+ },
16431
+ {
16432
+ "name": "owner",
16433
+ "type": "string",
16434
+ "required": false,
16435
+ "description": "Member id whose content this is, restricting it to that member; omit or null to make it readable organization-wide."
16436
+ }
16437
+ ]
16438
+ }
16439
+ },
16440
+ {
16441
+ "resource": "ontology.nodes",
16442
+ "method": "retrieve",
16443
+ "summary": "Retrieve node",
16444
+ "description": "Read one node's content and, with expand=relations, every relation on and around it. as_of reads the node as it was at that time. A node id from another organization, or one that never existed, answers ONTOLOGY_NODE_NOT_FOUND; a node you may reach but not read returns restricted true with its name only.",
16445
+ "http": "GET",
16446
+ "path": "/ontology/v1/nodes/{node_id}",
16447
+ "streaming": "no",
16448
+ "pagination": false,
16449
+ "pathParams": [
16450
+ {
16451
+ "name": "node_id",
16452
+ "sdkName": "node_id",
16453
+ "description": "Node id returned by nodes.list, nodes.create or a changeset, in the form ond_ followed by 32 lowercase letters or digits; a name or an external record id is not accepted."
16454
+ }
16455
+ ],
16456
+ "query": [
16457
+ {
16458
+ "name": "expand",
16459
+ "type": "string",
16460
+ "enum": [
16461
+ "relations"
16462
+ ],
16463
+ "required": false,
16464
+ "description": "Set to relations to include the node's incoming and outgoing relations in the same response; omit for the node alone."
16465
+ },
16466
+ {
16467
+ "name": "as_of",
16468
+ "type": "string",
16469
+ "required": false,
16470
+ "description": "ISO 8601 timestamp; read the node and its relations as they were then, including relations invalidated since. Omit to read current state."
16471
+ }
16472
+ ]
16473
+ },
16474
+ {
16475
+ "resource": "ontology.nodes",
16476
+ "method": "update",
16477
+ "summary": "Update node",
16478
+ "description": "Change a node's name, aliases or description when the mirrored record was renamed, without touching its type or identity. Send only the fields to change; omitted fields keep their current values and an explicitly null description clears it. Repeating the same edit converges on the same node, so this needs no Idempotency-Key.",
16479
+ "http": "PATCH",
16480
+ "path": "/ontology/v1/nodes/{node_id}",
16481
+ "streaming": "no",
16482
+ "pagination": false,
16483
+ "pathParams": [
16484
+ {
16485
+ "name": "node_id",
16486
+ "sdkName": "node_id",
16487
+ "description": "Node id returned by nodes.list, nodes.create or a changeset, in the form ond_ followed by 32 lowercase letters or digits; a name or an external record id is not accepted."
16488
+ }
16489
+ ],
16490
+ "query": [],
16491
+ "body": {
16492
+ "required": true,
16493
+ "fields": [
16494
+ {
16495
+ "name": "name",
16496
+ "type": "string",
16497
+ "required": false,
16498
+ "description": "New display name, at most 200 characters; omit to keep the current name."
16499
+ },
16500
+ {
16501
+ "name": "aliases",
16502
+ "type": "array",
16503
+ "itemType": "string",
16504
+ "required": false,
16505
+ "description": "Replacement alias list; an empty array clears the aliases and omitting the field keeps them."
16506
+ },
16507
+ {
16508
+ "name": "description",
16509
+ "type": "string",
16510
+ "required": false,
16511
+ "description": "Replacement profile, at most 500 characters; an explicit null clears it and omitting the field keeps it."
16512
+ }
16513
+ ]
16514
+ }
16515
+ },
16516
+ {
16517
+ "resource": "ontology.nodes.merge",
16518
+ "method": "create",
16519
+ "summary": "Merge node",
16520
+ "description": "Fold a duplicate node into the node that should survive, when two records are discovered to be the same entity. The merged node's relations and aliases move to the survivor and later reads of the duplicate resolve to it. Send an Idempotency-Key header; repeating the same key replays the first result. Reversal is a staff operation, not available here.",
16521
+ "http": "POST",
16522
+ "path": "/ontology/v1/nodes/{node_id}/merge",
16523
+ "streaming": "no",
16524
+ "pagination": false,
16525
+ "pathParams": [
16526
+ {
16527
+ "name": "node_id",
16528
+ "sdkName": "node_id",
16529
+ "description": "Node id returned by nodes.list, nodes.create or a changeset, in the form ond_ followed by 32 lowercase letters or digits; a name or an external record id is not accepted."
16530
+ }
16531
+ ],
16532
+ "query": [],
16533
+ "body": {
16534
+ "required": true,
16535
+ "fields": [
16536
+ {
16537
+ "name": "into",
16538
+ "type": "string",
16539
+ "required": true,
16540
+ "description": "Node id that should survive, from nodes.list or search; the merged node's relations and aliases move to it."
16541
+ }
16542
+ ]
16543
+ }
16544
+ },
16545
+ {
16546
+ "resource": "ontology.relations",
16547
+ "method": "list",
16548
+ "summary": "List relations",
16549
+ "description": "Read the facts in the graph and obtain relation ids for retrieval, invalidation or spreading. Filter by endpoint node, by type and by direction; as_of reads the relations as they were then. Invalidated relations are omitted unless include_invalid is true. limit is 1–100 and defaults to 50; follow next_cursor until it is null.",
16550
+ "http": "GET",
16551
+ "path": "/ontology/v1/relations",
16552
+ "streaming": "no",
16553
+ "pagination": true,
16554
+ "pathParams": [],
16555
+ "query": [
16556
+ {
16557
+ "name": "node",
16558
+ "type": "string",
16559
+ "required": false,
16560
+ "description": "A node id from nodes.list or nodes.create; returns the relations this node takes part in, narrowed by direction. Omit to list relations between every node."
16561
+ },
16562
+ {
16563
+ "name": "type",
16564
+ "type": "array",
16565
+ "itemType": "string",
16566
+ "required": false,
16567
+ "description": "Repeat to filter to any of several registered relation type names, for example type=references&type=serves; omit to list every type."
16568
+ },
16569
+ {
16570
+ "name": "direction",
16571
+ "type": "string",
16572
+ "enum": [
16573
+ "out",
16574
+ "in",
16575
+ "both"
16576
+ ],
16577
+ "required": false,
16578
+ "description": "Which side of node to follow; out returns relations the node is the source of, in returns those it is the target of. Only meaningful together with node."
16579
+ },
16580
+ {
16581
+ "name": "as_of",
15644
16582
  "type": "string",
15645
16583
  "required": false,
15646
- "description": "Cursor: the id of the video job after which the page starts, normally the `last_id` of the previous page. It must refer to an existing job of yours, otherwise the call fails."
16584
+ "description": "ISO 8601 timestamp; read relations as they were then, so one recorded or invalidated later is judged by that time. Omit to read current state."
16585
+ },
16586
+ {
16587
+ "name": "include_invalid",
16588
+ "type": "boolean",
16589
+ "required": false,
16590
+ "description": "Set true to include relations whose invalid_at has passed, which is how a relation that stopped being true stays readable. Omit or false for currently valid relations only."
15647
16591
  },
15648
16592
  {
15649
16593
  "name": "limit",
15650
16594
  "type": "integer",
15651
16595
  "required": false,
15652
- "description": "Maximum number of jobs per page, from 1 to 100; defaults to 20."
16596
+ "description": "Maximum items to return per page, from 1 to 100; defaults to 50 when omitted. Values above 100 are clamped to 100."
15653
16597
  },
15654
16598
  {
15655
- "name": "order",
16599
+ "name": "cursor",
15656
16600
  "type": "string",
15657
- "enum": [
15658
- "asc",
15659
- "desc"
15660
- ],
15661
16601
  "required": false,
15662
- "description": "Sort order by creation time: desc (default) lists the newest job first, asc the oldest first."
16602
+ "description": "Opaque next_cursor from the preceding list response; omit for the first page and stop when next_cursor is null."
15663
16603
  }
15664
16604
  ]
15665
16605
  },
15666
16606
  {
15667
- "resource": "model.videos",
16607
+ "resource": "ontology.relations",
15668
16608
  "method": "create",
15669
- "summary": "Create video",
15670
- "description": "OpenAI video API with OpenRouter request and response extensions.",
16609
+ "summary": "Create relation",
16610
+ "description": "Record one fact between two existing nodes, for a system mirroring a relationship it owns. type must be registered and must admit these endpoints; fact states the relationship in one sentence. Send an Idempotency-Key header; repeating the same key returns the first result instead of writing a second relation. This writes structure only — to give an agent something to remember, use POST /agent/v1/agents/{agent_id}/consolidations.",
15671
16611
  "http": "POST",
15672
- "path": "/model/v1/videos",
16612
+ "path": "/ontology/v1/relations",
15673
16613
  "streaming": "no",
15674
16614
  "pagination": false,
15675
- "multipart": true,
15676
16615
  "pathParams": [],
15677
16616
  "query": [],
15678
16617
  "body": {
15679
16618
  "required": true,
15680
16619
  "fields": [
15681
16620
  {
15682
- "name": "model",
16621
+ "name": "type",
15683
16622
  "type": "string",
15684
- "required": false,
15685
- "description": "Video model id, for example `wan2.7-t2v`; list candidates with listModels?type=video. Router support (partial): Select a registered video model explicitly, for example wan2.7-t2v (size=1280x720, seconds=4). Capability preflight errors are reported before creation."
16623
+ "required": true,
16624
+ "description": "Registered relation type name from types.list; it must admit both endpoints or the write is refused."
15686
16625
  },
15687
16626
  {
15688
- "name": "prompt",
16627
+ "name": "source",
15689
16628
  "type": "string",
15690
16629
  "required": true,
15691
- "description": "Text description of the video, at least 1 character. Router support (supported): Controls video content; missing or empty values return 400."
15692
- },
15693
- {
15694
- "name": "seconds",
15695
- "type": "object",
15696
- "required": false,
15697
- "description": "Takes precedence over duration."
16630
+ "description": "Node id the fact starts from, from nodes.list or nodes.create."
15698
16631
  },
15699
16632
  {
15700
- "name": "duration",
15701
- "type": "integer",
15702
- "required": false,
15703
- "description": "Length of the video in whole seconds. `seconds` takes precedence when both are given."
16633
+ "name": "target",
16634
+ "type": "string",
16635
+ "required": true,
16636
+ "description": "Node id the fact points at, from nodes.list or nodes.create."
15704
16637
  },
15705
16638
  {
15706
- "name": "size",
16639
+ "name": "fact",
15707
16640
  "type": "string",
15708
- "required": false,
15709
- "description": "Output resolution as `WIDTHxHEIGHT`, for example `1280x720`. Router support (partial): Subject to model capability preflight. Earlier wan2.7-t2v samples always produced 1280x720; accepted sizes are not guaranteed pixel-for-pixel."
16641
+ "required": true,
16642
+ "description": "The relationship in one sentence, at most 280 characters, written to read back on its own."
15710
16643
  },
15711
16644
  {
15712
- "name": "input_reference",
15713
- "type": "object",
16645
+ "name": "valid_at",
16646
+ "type": "string",
15714
16647
  "required": false,
15715
- "description": "Reference image for image-to-video: a URL or base64 data URL, an object with `image_url`, or an uploaded image file (multipart, at most 20 MiB)."
16648
+ "description": "World time the fact became true, when the mirrored record dates it; omit to leave it undated."
15716
16649
  },
15717
16650
  {
15718
- "name": "input_references",
15719
- "type": "array",
15720
- "itemType": "object",
16651
+ "name": "owner",
16652
+ "type": "string",
15721
16653
  "required": false,
15722
- "description": "Several reference images; each entry is a URL or base64 data URL, or an object with `image_url`."
15723
- },
16654
+ "description": "Member id whose content this fact is, restricting it to that member; omit or null for organization-wide."
16655
+ }
16656
+ ]
16657
+ }
16658
+ },
16659
+ {
16660
+ "resource": "ontology.relations",
16661
+ "method": "retrieve",
16662
+ "summary": "Retrieve relation",
16663
+ "description": "Read one relation's fact and both of its clocks — valid_at and invalid_at for when it was true in the world, created_at and expired_at for when it was recorded and retired. An id from another organization, or one that never existed, answers ONTOLOGY_EDGE_NOT_FOUND.",
16664
+ "http": "GET",
16665
+ "path": "/ontology/v1/relations/{relation_id}",
16666
+ "streaming": "no",
16667
+ "pagination": false,
16668
+ "pathParams": [
16669
+ {
16670
+ "name": "relation_id",
16671
+ "sdkName": "relation_id",
16672
+ "description": "Relation id returned by relations.list, relations.create or a changeset, in the form oed_ followed by 32 lowercase letters or digits; a node id is not accepted."
16673
+ }
16674
+ ],
16675
+ "query": []
16676
+ },
16677
+ {
16678
+ "resource": "ontology.relations.invalidate",
16679
+ "method": "create",
16680
+ "summary": "Invalidate relation",
16681
+ "description": "Mark a relation as no longer true from a world time, when the mirrored record changed. The relation is kept — invalid_at moves and the relation still reads at an earlier as_of, so history stays answerable. Send an Idempotency-Key header; repeating the same key replays the first result. There is no delete.",
16682
+ "http": "POST",
16683
+ "path": "/ontology/v1/relations/{relation_id}/invalidate",
16684
+ "streaming": "no",
16685
+ "pagination": false,
16686
+ "pathParams": [
16687
+ {
16688
+ "name": "relation_id",
16689
+ "sdkName": "relation_id",
16690
+ "description": "Relation id returned by relations.list, relations.create or a changeset, in the form oed_ followed by 32 lowercase letters or digits; a node id is not accepted."
16691
+ }
16692
+ ],
16693
+ "query": [],
16694
+ "body": {
16695
+ "required": true,
16696
+ "fields": [
15724
16697
  {
15725
- "name": "frame_images",
15726
- "type": "array",
15727
- "itemType": "object",
15728
- "required": false,
15729
- "description": "Images that pin the first and last frame; at most 2 entries."
16698
+ "name": "invalid_at",
16699
+ "type": "string",
16700
+ "required": true,
16701
+ "description": "World time the fact stopped being true, in ISO 8601 UTC; reads at an earlier as_of still return the relation."
15730
16702
  },
15731
16703
  {
15732
- "name": "resolution",
16704
+ "name": "superseded_by",
15733
16705
  "type": "string",
15734
16706
  "required": false,
15735
- "description": "Output resolution label such as `720p`, for models that take a label instead of `size`."
16707
+ "description": "Relation id that replaces this one, when a successor was recorded; omit or null when nothing replaced it."
15736
16708
  },
15737
16709
  {
15738
- "name": "aspect_ratio",
16710
+ "name": "reason",
15739
16711
  "type": "string",
15740
16712
  "required": false,
15741
- "description": "Aspect ratio of the video such as `16:9`."
15742
- },
16713
+ "description": "Why it stopped being true, for people reading the history later; not enforced and safe to omit."
16714
+ }
16715
+ ]
16716
+ }
16717
+ },
16718
+ {
16719
+ "resource": "ontology.search",
16720
+ "method": "create",
16721
+ "summary": "Search nodes",
16722
+ "description": "Resolve text to the nodes it most likely names, when a mirror holds a name and needs the node id it corresponds to. Results are ranked candidates, not an answer, each reporting whether the match came from the node's name, an alias, its description or a relation's fact. Narrow with types, and cap the result count with limit (1–50, default 20). This reads structure; it is not an agent recall — agents recall through POST /agent/v1/agents/{agent_id}/consolidations.",
16723
+ "http": "POST",
16724
+ "path": "/ontology/v1/search",
16725
+ "streaming": "no",
16726
+ "pagination": false,
16727
+ "pathParams": [],
16728
+ "query": [],
16729
+ "body": {
16730
+ "required": true,
16731
+ "fields": [
15743
16732
  {
15744
- "name": "generate_audio",
15745
- "type": "boolean",
15746
- "required": false,
15747
- "description": "Whether the video carries a generated audio track. Router support (supported): false produces no audio track on wan2.7-t2v; the default output includes audio."
16733
+ "name": "text",
16734
+ "type": "string",
16735
+ "required": true,
16736
+ "description": "Text to find nodes for, matched against names, aliases, descriptions and relation facts; an empty string is refused."
15748
16737
  },
15749
16738
  {
15750
- "name": "seed",
15751
- "type": "integer",
16739
+ "name": "types",
16740
+ "type": "array",
16741
+ "itemType": "string",
15752
16742
  "required": false,
15753
- "description": "Seed for reproducible generation, on models that support it."
16743
+ "description": "Registered node type names to search within; omit to search every type."
15754
16744
  },
15755
16745
  {
15756
- "name": "callback_url",
15757
- "type": "string",
16746
+ "name": "window",
16747
+ "type": "object",
15758
16748
  "required": false,
15759
- "description": "HTTP or HTTPS callback URL, forwarded to models that support completion callbacks."
16749
+ "description": "Restrict matches to facts recorded within a period; omit to search all time."
15760
16750
  },
15761
16751
  {
15762
- "name": "quality",
15763
- "type": "string",
16752
+ "name": "limit",
16753
+ "type": "integer",
15764
16754
  "required": false,
15765
- "description": "Provider-specific quality setting."
16755
+ "description": "Maximum candidate nodes to return, from 1 to 50; defaults to 20 when omitted."
15766
16756
  }
15767
16757
  ]
15768
16758
  }
15769
16759
  },
15770
16760
  {
15771
- "resource": "model.videos",
15772
- "method": "delete",
15773
- "summary": "Delete video",
15774
- "description": "OpenAI video API with OpenRouter request and response extensions.",
15775
- "http": "DELETE",
15776
- "path": "/model/v1/videos/{video_id}",
15777
- "streaming": "no",
15778
- "pagination": false,
15779
- "pathParams": [
15780
- {
15781
- "name": "video_id",
15782
- "sdkName": "video_id",
15783
- "description": "Id of the video job whose output you want, the `id` returned by createVideo. The job must be completed; before that the call answers 400."
15784
- }
15785
- ],
15786
- "query": []
15787
- },
15788
- {
15789
- "resource": "model.videos",
15790
- "method": "retrieve",
15791
- "summary": "Retrieve video",
15792
- "description": "OpenAI video API with OpenRouter request and response extensions.",
16761
+ "resource": "ontology.types",
16762
+ "method": "list",
16763
+ "summary": "List types",
16764
+ "description": "Read the node and relation types registered for this organization before writing, so a create names a type the graph accepts. Each entry is one registrant's registration with its owner, version and definitions. Types cannot be created at runtime; they are registered by the owning service at deploy time, so a type missing here is not available to write.",
15793
16765
  "http": "GET",
15794
- "path": "/model/v1/videos/{video_id}",
16766
+ "path": "/ontology/v1/types",
15795
16767
  "streaming": "no",
15796
16768
  "pagination": false,
15797
- "pathParams": [
15798
- {
15799
- "name": "video_id",
15800
- "sdkName": "video_id",
15801
- "description": "Id of the video job whose output you want, the `id` returned by createVideo. The job must be completed; before that the call answers 400."
15802
- }
15803
- ],
16769
+ "pathParams": [],
15804
16770
  "query": []
15805
16771
  },
15806
16772
  {
15807
- "resource": "model.videos",
15808
- "method": "retrieveContent",
15809
- "summary": "Download video",
15810
- "description": "OpenAI video API with OpenRouter request and response extensions.",
15811
- "http": "GET",
15812
- "path": "/model/v1/videos/{video_id}/content",
16773
+ "resource": "ontology.types",
16774
+ "method": "create",
16775
+ "summary": "Register type",
16776
+ "description": "Register a node or relation type for this organization. Not open yet — this call currently answers 501 NOT_IMPLEMENTED and writes nothing, because a registration is checked and stored by the deploy gate that ships the registering service, not by a runtime call. Until it opens, read the types already in force with praxis.ontology.types.list and create records only of those types.",
16777
+ "http": "POST",
16778
+ "path": "/ontology/v1/types",
15813
16779
  "streaming": "no",
15814
16780
  "pagination": false,
15815
- "pathParams": [
15816
- {
15817
- "name": "video_id",
15818
- "sdkName": "video_id",
15819
- "description": "Id of the video job whose output you want, the `id` returned by createVideo. The job must be completed; before that the call answers 400."
15820
- }
15821
- ],
15822
- "query": [
15823
- {
15824
- "name": "variant",
15825
- "type": "string",
15826
- "enum": [
15827
- "video",
15828
- "thumbnail",
15829
- "spritesheet"
15830
- ],
15831
- "required": false,
15832
- "description": "Spritesheet is not available in this release (400)."
15833
- },
15834
- {
15835
- "name": "index",
15836
- "type": "integer",
15837
- "required": false,
15838
- "description": "Output index; this release produces index 0. variant takes precedence."
15839
- }
15840
- ]
16781
+ "pathParams": [],
16782
+ "query": [],
16783
+ "body": {
16784
+ "required": true,
16785
+ "fields": [
16786
+ {
16787
+ "name": "owner",
16788
+ "type": "string",
16789
+ "required": true,
16790
+ "description": "Service that registered these types, for example file or ticket; it is the registrant a later change to a type is checked against."
16791
+ },
16792
+ {
16793
+ "name": "version",
16794
+ "type": "integer",
16795
+ "required": true,
16796
+ "description": "Monotonic version of this owner's registration; a later registration must extend this one without removing or narrowing anything."
16797
+ },
16798
+ {
16799
+ "name": "nodes",
16800
+ "type": "array",
16801
+ "itemType": "object",
16802
+ "required": true,
16803
+ "description": "Node types this owner registers."
16804
+ },
16805
+ {
16806
+ "name": "edges",
16807
+ "type": "array",
16808
+ "itemType": "object",
16809
+ "required": true,
16810
+ "description": "Relation types this owner registers."
16811
+ }
16812
+ ]
16813
+ }
15841
16814
  },
15842
16815
  {
15843
- "resource": "model.videos",
15844
- "method": "remix",
15845
- "summary": "Remix video",
15846
- "description": "Not supported in this release; always returns 400.",
15847
- "http": "POST",
15848
- "path": "/model/v1/videos/{video_id}/remix",
16816
+ "resource": "ontology.types",
16817
+ "method": "retrieve",
16818
+ "summary": "Retrieve type",
16819
+ "description": "Read one registered type's definition before writing a record of it, to learn whether it is a node or an edge, which endpoints an edge type admits, and which origins it accepts. The name comes from types.list; a name that is not registered answers ONTOLOGY_TYPE_UNKNOWN, and writes of that type are refused.",
16820
+ "http": "GET",
16821
+ "path": "/ontology/v1/types/{name}",
15849
16822
  "streaming": "no",
15850
16823
  "pagination": false,
15851
16824
  "pathParams": [
15852
16825
  {
15853
- "name": "video_id",
15854
- "sdkName": "video_id",
15855
- "description": "Id of the video job whose output you want, the `id` returned by createVideo. The job must be completed; before that the call answers 400."
16826
+ "name": "name",
16827
+ "sdkName": "name",
16828
+ "description": "A type name from types.list, with its dots preserved — a display label is not accepted."
15856
16829
  }
15857
16830
  ],
15858
16831
  "query": []
@@ -16219,6 +17192,31 @@ export const operations = [
16219
17192
  ]
16220
17193
  }
16221
17194
  },
17195
+ {
17196
+ "resource": "organization.members",
17197
+ "method": "list",
17198
+ "summary": "List organization members",
17199
+ "description": "Concepts follow GitHub org members: find a person's user id, for example to assign an approver to an approval task. Lists only members of the organization behind your API key or runtime token, ordered by joined_at ascending (membership id breaks ties). Ask the user who should approve, then use that member's id. Emails are visible only within this organization. The request cannot select another organization. Pass next_page unchanged as page; null means the end. Read-only; no usage charge. Example: GET /organization/v1/members?limit=20.",
17200
+ "http": "GET",
17201
+ "path": "/organization/v1/members",
17202
+ "streaming": "no",
17203
+ "pagination": false,
17204
+ "pathParams": [],
17205
+ "query": [
17206
+ {
17207
+ "name": "limit",
17208
+ "type": "integer",
17209
+ "required": false,
17210
+ "description": "Maximum members per page, from 1 to 100; defaults to 20."
17211
+ },
17212
+ {
17213
+ "name": "page",
17214
+ "type": "string",
17215
+ "required": false,
17216
+ "description": "Opaque next_page cursor returned by the previous response; omit for the first page."
17217
+ }
17218
+ ]
17219
+ },
16222
17220
  {
16223
17221
  "resource": "organization.usage",
16224
17222
  "method": "list",
@@ -18545,7 +19543,7 @@ export const operations = [
18545
19543
  "resource": "ticket.labels",
18546
19544
  "method": "create",
18547
19545
  "summary": "Create or add labels",
18548
- "description": "Create or add labels within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Writes complete synchronously; read the returned resource to observe the result. Organization owner or admin authority is required for this write; API keys without role information act as members.",
19546
+ "description": "Create or add labels within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Writes complete synchronously; read the returned resource to observe the result. Service authorization applies to the verified human subject.",
18549
19547
  "http": "POST",
18550
19548
  "path": "/ticket/v1/labels",
18551
19549
  "streaming": "no",
@@ -18587,7 +19585,7 @@ export const operations = [
18587
19585
  "resource": "ticket.labels",
18588
19586
  "method": "delete",
18589
19587
  "summary": "Remove labels",
18590
- "description": "Remove labels within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Writes complete synchronously; read the returned resource to observe the result. Organization owner or admin authority is required for this write; API keys without role information act as members.",
19588
+ "description": "Remove labels within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Writes complete synchronously; read the returned resource to observe the result. Service authorization applies to the verified human subject.",
18591
19589
  "http": "DELETE",
18592
19590
  "path": "/ticket/v1/labels/{name}",
18593
19591
  "streaming": "no",
@@ -18612,7 +19610,7 @@ export const operations = [
18612
19610
  "resource": "ticket.labels",
18613
19611
  "method": "update",
18614
19612
  "summary": "Update labels",
18615
- "description": "Update labels within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Writes complete synchronously; read the returned resource to observe the result. Organization owner or admin authority is required for this write; API keys without role information act as members.",
19613
+ "description": "Update labels within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Writes complete synchronously; read the returned resource to observe the result. Service authorization applies to the verified human subject.",
18616
19614
  "http": "PATCH",
18617
19615
  "path": "/ticket/v1/labels/{name}",
18618
19616
  "streaming": "no",
@@ -18908,7 +19906,7 @@ export const operations = [
18908
19906
  "name": "filter",
18909
19907
  "type": "string",
18910
19908
  "required": false,
18911
- "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."
19909
+ "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."
18912
19910
  }
18913
19911
  ]
18914
19912
  },
@@ -20014,7 +21012,7 @@ export const operations = [
20014
21012
  "resource": "vault.vaults",
20015
21013
  "method": "create",
20016
21014
  "summary": "Create vault",
20017
- "description": "Create an empty, active vault to hold credentials for your account, with a display name and optional metadata. Use its returned id as vault_id when creating secrets or OAuth authorizations. Unlike Anthropic, Agent sessions do not accept nonempty vault_ids; storing a credential or adding its ID to metadata does not enable vault-backed MCP authentication. Application vault references are also unavailable; praxis_vault_ref version bindings and secret writes with a vault source return 501, so creating a vault does not yet enable either consumer.",
21015
+ "description": "Create an empty, active vault to hold credentials for your account, with a display name and optional metadata. Use its returned id as vault_id when creating secrets or OAuth authorizations. Agent sessions and deployments accept up to 50 vault_ids and match their credentials against the session's MCP servers, so a stored static or oauth credential does serve as vault-backed MCP authentication; only environment_variable credentials are not yet placed, because the egress proxy ADR-058 §6 gives them is not built. Application vault references are also unavailable; praxis_vault_ref version bindings and secret writes with a vault source return 501, so creating a vault does not yet enable either consumer.",
20018
21016
  "http": "POST",
20019
21017
  "path": "/vault/v1/vaults",
20020
21018
  "streaming": "no",