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

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.
@@ -185,7 +185,7 @@ export const operations = [
185
185
  "name": "settings",
186
186
  "type": "object",
187
187
  "required": false,
188
- "description": "Praxis extension: managed settings saved with the configuration revision. Omit to preserve; null clears. Configuration storage only; these switches and hooks are not applied to runtime yet. /agent/v1 only."
188
+ "description": "Agent runtime settings follow Claude Code managed settings. Praxis freezes output-style selection for each new session; inline output_styles extend file-based styles. Omit settings to keep saved settings; null clears them."
189
189
  },
190
190
  {
191
191
  "name": "models",
@@ -222,6 +222,13 @@ export const operations = [
222
222
  ],
223
223
  "required": false,
224
224
  "description": "Optional tool preset. minimal enables read, glob, grep and ask_user_question; data-editor also enables write and edit; full uses the default toolset with always_allow. Explicit tools override matching preset entries. codemode requires bash and is absent from data-editor."
225
+ },
226
+ {
227
+ "name": "output_styles",
228
+ "type": "array",
229
+ "itemType": "object",
230
+ "required": false,
231
+ "description": "Inline custom output styles, including for agents without a computer. Omit to keep the saved list; null or [] clears it. Same-name precedence is inline, project files, personal files, then plugins. Selection is settings.outputStyle; styles apply to main conversations and are frozen per session."
225
232
  }
226
233
  ]
227
234
  }
@@ -401,7 +408,7 @@ export const operations = [
401
408
  "name": "settings",
402
409
  "type": "object",
403
410
  "required": false,
404
- "description": "Praxis extension: managed settings saved with the configuration revision. Omit to preserve; null clears. Configuration storage only; these switches and hooks are not applied to runtime yet. /agent/v1 only."
411
+ "description": "Agent runtime settings follow Claude Code managed settings. Praxis freezes output-style selection for each new session; inline output_styles extend file-based styles. Omit settings to keep saved settings; null clears them."
405
412
  },
406
413
  {
407
414
  "name": "models",
@@ -438,6 +445,13 @@ export const operations = [
438
445
  ],
439
446
  "required": false,
440
447
  "description": "Optional tool preset. minimal enables read, glob, grep and ask_user_question; data-editor also enables write and edit; full uses the default toolset with always_allow. Explicit tools override matching preset entries. codemode requires bash and is absent from data-editor."
448
+ },
449
+ {
450
+ "name": "output_styles",
451
+ "type": "array",
452
+ "itemType": "object",
453
+ "required": false,
454
+ "description": "Inline custom output styles, including for agents without a computer. Omit to keep the saved list; null or [] clears it. Same-name precedence is inline, project files, personal files, then plugins. Selection is settings.outputStyle; styles apply to main conversations and are frozen per session."
441
455
  }
442
456
  ]
443
457
  }
@@ -3967,7 +3981,7 @@ export const operations = [
3967
3981
  "name": "timeout_ms",
3968
3982
  "type": "number",
3969
3983
  "required": false,
3970
- "description": "Positive integer milliseconds; code defaults to and is capped at 30,000. container/shell are not yet available."
3984
+ "description": "Positive integer milliseconds; code defaults to and is capped at 300,000. container/shell are not yet available."
3971
3985
  },
3972
3986
  {
3973
3987
  "name": "implementation",
@@ -4017,7 +4031,7 @@ export const operations = [
4017
4031
  "resource": "automation.actions",
4018
4032
  "method": "update",
4019
4033
  "summary": "Update an action",
4020
- "description": "Update after checking compatibility against the current and five recent revisions. Widening inputs and narrowing outputs are compatible, including length, item count, property count, type (integer/number), and multipleOf (the new input factor divides the old one; the reverse holds for outputs). dry_run=true returns only CompatResult and may omit If-Match; a supplied header is still checked, and * matches any existing representation. Normal updates require If-Match and return ActionDef with ETag; previews return no ETag. Omitted optional fields retain their existing values only for description and labels; when constructing a new revision, errors defaults to [], omitted annotations keys to false, timeout_ms to 30000, and message to null. Incompatible normal updates return 422 SCHEMA_INCOMPATIBLE with issues; unchanged contents retain the existing revision.",
4034
+ "description": "Update after checking compatibility against the current and five recent revisions. Widening inputs and narrowing outputs are compatible, including length, item count, property count, type (integer/number), and multipleOf (the new input factor divides the old one; the reverse holds for outputs). dry_run=true returns only CompatResult and may omit If-Match; a supplied header is still checked, and * matches any existing representation. Normal updates require If-Match and return ActionDef with ETag; previews return no ETag. Omitted optional fields retain their existing values only for description and labels; when constructing a new revision, errors defaults to [], omitted annotations keys to false, timeout_ms to 300000, and message to null. Incompatible normal updates return 422 SCHEMA_INCOMPATIBLE with issues; unchanged contents retain the existing revision.",
4021
4035
  "http": "PUT",
4022
4036
  "path": "/automation/v1/actions/{ns}/{name}",
4023
4037
  "streaming": "no",
@@ -4086,7 +4100,7 @@ export const operations = [
4086
4100
  "name": "timeout_ms",
4087
4101
  "type": "number",
4088
4102
  "required": false,
4089
- "description": "Positive integer milliseconds; code defaults to and is capped at 30,000. container/shell are not yet available."
4103
+ "description": "Positive integer milliseconds; code defaults to and is capped at 300,000. container/shell are not yet available."
4090
4104
  },
4091
4105
  {
4092
4106
  "name": "implementation",
@@ -4761,7 +4775,7 @@ export const operations = [
4761
4775
  "resource": "automation.runs",
4762
4776
  "method": "create",
4763
4777
  "summary": "Run a published target or execute draft source",
4764
- "description": "Execute a published script or workflow with target, or test unpublished code directly with source and language (ts for TypeScript, yaml for workflow YAML), without first saving or publishing a definition. Minimal script: `export default async ({ file_id }: { file_id: string }) => { const result = await call(\"ocr\", { document: { type: \"file\", file_id } }); return result; }`; send it as source with language=\"ts\", input={\"file_id\":\"<uploaded file ID>\"} and wait=0, using a PDF or image already uploaded to your account. To call a platform API directly in the same script, use the praxis SDK object, for example `praxis.model.ocr.create({ body: { model: \"glm-ocr\", document: { type: \"file\", file_id } } })`; Action IDs are strings passed to call(), not SDK methods such as praxis.ocr(...). praxis, call, invoke, console and codemode are module-scope bindings, not on globalThis, and need no import; invoke(\"namespace/name\", input) starts a child run. target and source are mutually exclusive; target accepts ns/name@version, @tag or @range and defaults to latest when @ is omitted. Source/input validation precedes run creation, so a separate validate call is optional. input defaults to {} and must match the input schema and fit within 1 MiB. wait is 0–60 seconds (default 0): a terminal run returns 200, otherwise 202. Use the returned id with praxis.automation.runs.retrieve and inspect status, output and error; acceptance does not mean successful completion. For long-running, background or batch work, use wait: 0 and poll the run, or split work into child runs or a workflow; wait only controls the response wait and does not extend execution limits. Actions time out after 30 s (run-sandbox after 10 min); scripts have a 5 min wall-clock limit and a 30 s CPU limit; workflows default to 24 h and allow up to 30 days. Each run can start at most 100 child runs, with at most 20 active at once; nesting depth is limited to 10. Idempotency-Key is scoped to tenant, method and path for 24 hours, excluding wait from the fingerprint; replay returns the current run with Idempotent-Replayed: true, changed contents return 422 and an in-flight request returns 409. With language=yaml, source is a workflow YAML: the run input is . in the first step, and the shape is described in create workflow. Error details are in errors[] (pointer, detail, hint). New non-deterministic run IDs contain 78 characters, compared with 46 for legacy random IDs; treat IDs as opaque strings. Historical and deterministic IDs remain valid; same-millisecond order is not guaranteed.",
4778
+ "description": "Execute a published script or workflow with target, or test unpublished code directly with source and language (ts for TypeScript, yaml for workflow YAML), without first saving or publishing a definition. Minimal script: `export default async ({ file_id }: { file_id: string }) => { const result = await call(\"ocr\", { document: { type: \"file\", file_id } }); return result; }`; send it as source with language=\"ts\", input={\"file_id\":\"<uploaded file ID>\"} and wait=0, using a PDF or image already uploaded to your account. To call a platform API directly in the same script, use the praxis SDK object, for example `praxis.model.ocr.create({ body: { model: \"glm-ocr\", document: { type: \"file\", file_id } } })`; Action IDs are strings passed to call(), not SDK methods such as praxis.ocr(...). praxis, call, invoke, console and codemode are module-scope bindings, not on globalThis, and need no import; invoke(\"namespace/name\", input) starts a child run. target and source are mutually exclusive; target accepts ns/name@version, @tag or @range and defaults to latest when @ is omitted. Source/input validation precedes run creation, so a separate validate call is optional. input defaults to {} and must match the input schema and fit within 1 MiB. wait is 0–60 seconds (default 0): a terminal run returns 200, otherwise 202. Use the returned id with praxis.automation.runs.retrieve and inspect status, output and error; acceptance does not mean successful completion. For long-running, background or batch work, use wait: 0 and poll the run, or split work into child runs or a workflow; wait only controls the response wait and does not extend execution limits. Actions time out after 5 min (run-sandbox after 6 h); scripts have a 30 min wall-clock limit and a 30 s CPU limit; workflows default to 24 h and allow up to 30 days. Each run can start at most 1,000 child runs, with at most 100 active at once; nesting depth is limited to 10. Idempotency-Key is scoped to tenant, method and path for 24 hours, excluding wait from the fingerprint; replay returns the current run with Idempotent-Replayed: true, changed contents return 422 and an in-flight request returns 409. With language=yaml, source is a workflow YAML: the run input is . in the first step, and the shape is described in create workflow. Error details are in errors[] (pointer, detail, hint). New non-deterministic run IDs contain 78 characters, compared with 46 for legacy random IDs; treat IDs as opaque strings. Historical and deterministic IDs remain valid; same-millisecond order is not guaranteed.",
4765
4779
  "http": "POST",
4766
4780
  "path": "/automation/v1/runs",
4767
4781
  "streaming": "no",
@@ -5509,6 +5523,96 @@ export const operations = [
5509
5523
  "fields": []
5510
5524
  }
5511
5525
  },
5526
+ {
5527
+ "resource": "automation.scripts.vaults",
5528
+ "method": "list",
5529
+ "summary": "List script vault bindings",
5530
+ "description": "Inspect the whole vaults attached to a saved script, including archived definitions, without reading secret values. Obtain ns and name from automation.scripts.list. Bindings belong to the definition rather than a published version. When vault or secret metadata cannot be read, the binding remains visible with secrets: [] and secrets_unavailable: true.",
5531
+ "http": "GET",
5532
+ "path": "/automation/v1/scripts/{ns}/{name}/vaults",
5533
+ "streaming": "no",
5534
+ "pagination": false,
5535
+ "pathParams": [
5536
+ {
5537
+ "name": "ns",
5538
+ "sdkName": "ns",
5539
+ "description": "Namespace from automation.scripts.list or create; identifies the saved script, independently of versions."
5540
+ },
5541
+ {
5542
+ "name": "name",
5543
+ "sdkName": "name",
5544
+ "description": "Resource name from automation.scripts.list or create; combine with ns to identify the saved script."
5545
+ }
5546
+ ],
5547
+ "query": []
5548
+ },
5549
+ {
5550
+ "resource": "automation.scripts.vaults",
5551
+ "method": "delete",
5552
+ "summary": "Delete a script vault binding",
5553
+ "description": "Remove the vault assignment from this saved script without deleting the vault or its secrets. Obtain aliases from automation.scripts.vaults.list. Repeating deletion of an absent alias on an existing definition succeeds. Bindings also disappear when the definition is permanently deleted, while archival retains them.",
5554
+ "http": "DELETE",
5555
+ "path": "/automation/v1/scripts/{ns}/{name}/vaults/{alias}",
5556
+ "streaming": "no",
5557
+ "pagination": false,
5558
+ "pathParams": [
5559
+ {
5560
+ "name": "ns",
5561
+ "sdkName": "ns",
5562
+ "description": "Namespace from automation.scripts.list or create; identifies the saved script, independently of versions."
5563
+ },
5564
+ {
5565
+ "name": "name",
5566
+ "sdkName": "name",
5567
+ "description": "Resource name from automation.scripts.list or create; combine with ns to identify the saved script."
5568
+ },
5569
+ {
5570
+ "name": "alias",
5571
+ "sdkName": "alias",
5572
+ "description": "Binding alias chosen by the caller: 1–40 lowercase letters, digits or hyphens, beginning with a letter."
5573
+ }
5574
+ ],
5575
+ "query": []
5576
+ },
5577
+ {
5578
+ "resource": "automation.scripts.vaults",
5579
+ "method": "set",
5580
+ "summary": "Set a script vault binding",
5581
+ "description": "Attach an entire active vault in your organization to a saved script, or replace the vault at an existing alias. Obtain the vault ID or display name from praxis.vault.vaults.list; ambiguous names require an ID. Bindings are independent of published versions and survive archival. The same vault cannot be assigned to two aliases on one definition. Repeating the same assignment is idempotent. Example body: {\"vault\":\"Production\"}.",
5582
+ "http": "PUT",
5583
+ "path": "/automation/v1/scripts/{ns}/{name}/vaults/{alias}",
5584
+ "streaming": "no",
5585
+ "pagination": false,
5586
+ "pathParams": [
5587
+ {
5588
+ "name": "ns",
5589
+ "sdkName": "ns",
5590
+ "description": "Namespace from automation.scripts.list or create; identifies the saved script, independently of versions."
5591
+ },
5592
+ {
5593
+ "name": "name",
5594
+ "sdkName": "name",
5595
+ "description": "Resource name from automation.scripts.list or create; combine with ns to identify the saved script."
5596
+ },
5597
+ {
5598
+ "name": "alias",
5599
+ "sdkName": "alias",
5600
+ "description": "Binding alias chosen by the caller: 1–40 lowercase letters, digits or hyphens, beginning with a letter."
5601
+ }
5602
+ ],
5603
+ "query": [],
5604
+ "body": {
5605
+ "required": true,
5606
+ "fields": [
5607
+ {
5608
+ "name": "vault",
5609
+ "type": "string",
5610
+ "required": true,
5611
+ "description": "Active vault ID or exact display name from praxis.vault.vaults.list in your organization. Use an ID if display names are duplicated."
5612
+ }
5613
+ ]
5614
+ }
5615
+ },
5512
5616
  {
5513
5617
  "resource": "automation.scripts.versions",
5514
5618
  "method": "list",
@@ -6309,7 +6413,7 @@ export const operations = [
6309
6413
  "resource": "automation.workflows",
6310
6414
  "method": "create",
6311
6415
  "summary": "Create a workflow",
6312
- "description": "Workflow syntax reference: https://deepraxis.com/docs/developers/automation/reference/workflow-syntax. Save a YAML workflow as an editable draft; this does not validate, publish or run it, so check it with validate (kind=workflow) first. Minimal draft: document with dsl (\"1.0.3\"), namespace, name and version, plus a do list of steps, for example document: {dsl: \"1.0.3\", namespace: demo, name: add, version: \"1.0.0\"} and do: [{first: {call: demo/add-one, with: {n: \"${ .n }\"}}}]. call: <ns/name> calls an Action directly (bare name for built-ins such as ocr) and with is the Action input; the input contract is at current_revision.input_schema in the get-action response. run: starts a saved script or child workflow. The run input is . in the first step, and expressions are jq written as a whole ${ ... } string. Limits: Action 30 s (run-sandbox 10 min), workflow 24 h by default and 30 days at most, payload 1 MiB. Test the draft by sending its source and language=yaml to praxis.automation.runs.create. To pause for a person, call praxis/approval (it opens a human task; the step output is the decision); agents answer with praxis.automation.humanTasks.respond on behalf of their user. Guide: /docs/developers/automation/guides/approvals Guide: /docs/developers/automation/guides/write-workflow. Error details are in the errors[] of the response (pointer, detail, hint). Choose your own namespace without registering it first; praxis is reserved for built-in Actions. Scripts and workflows share names within the tenant; a duplicate returns NAME_TAKEN. run.workflow accepts ns/name@range or {namespace, name, version, input}; run.script uses the same reference shape as a platform extension. Object namespace, name and version are required; version accepts an exact version, dist-tag or range, locked at publication. Object input defaults to {} and supports expressions; string references retain task-level with. run.await defaults to true and returns the child output. With false, the child uses detach and the task immediately returns {run_id}; parent cancellation does not cascade. Inline script.code returns DEFINITION_INVALID with a detail asking you to save a script and reference it first. raise.error retains its type URI, status, title and detail in the run error.",
6416
+ "description": "Workflow syntax reference: https://deepraxis.com/docs/developers/automation/reference/workflow-syntax. Save a YAML workflow as an editable draft; this does not validate, publish or run it, so check it with validate (kind=workflow) first. Minimal draft: document with dsl (\"1.0.3\"), namespace, name and version, plus a do list of steps, for example document: {dsl: \"1.0.3\", namespace: demo, name: add, version: \"1.0.0\"} and do: [{first: {call: demo/add-one, with: {n: \"${ .n }\"}}}]. call: <ns/name> calls an Action directly (bare name for built-ins such as ocr) and with is the Action input; the input contract is at current_revision.input_schema in the get-action response. run: starts a saved script or child workflow. The run input is . in the first step, and expressions are jq written as a whole ${ ... } string. Limits: Action 5 min (run-sandbox 6 h), workflow 24 h by default and 30 days at most, payload 1 MiB. Test the draft by sending its source and language=yaml to praxis.automation.runs.create. To pause for a person, call praxis/approval (it opens a human task; the step output is the decision); agents answer with praxis.automation.humanTasks.respond on behalf of their user. Guide: /docs/developers/automation/guides/approvals Guide: /docs/developers/automation/guides/write-workflow. Error details are in the errors[] of the response (pointer, detail, hint). Choose your own namespace without registering it first; praxis is reserved for built-in Actions. Scripts and workflows share names within the tenant; a duplicate returns NAME_TAKEN. run.workflow accepts ns/name@range or {namespace, name, version, input}; run.script uses the same reference shape as a platform extension. Object namespace, name and version are required; version accepts an exact version, dist-tag or range, locked at publication. Object input defaults to {} and supports expressions; string references retain task-level with. run.await defaults to true and returns the child output. With false, the child uses detach and the task immediately returns {run_id}; parent cancellation does not cascade. Inline script.code returns DEFINITION_INVALID with a detail asking you to save a script and reference it first. raise.error retains its type URI, status, title and detail in the run error.",
6313
6417
  "http": "POST",
6314
6418
  "path": "/automation/v1/workflows",
6315
6419
  "streaming": "no",
@@ -6565,6 +6669,96 @@ export const operations = [
6565
6669
  "fields": []
6566
6670
  }
6567
6671
  },
6672
+ {
6673
+ "resource": "automation.workflows.vaults",
6674
+ "method": "list",
6675
+ "summary": "List workflow vault bindings",
6676
+ "description": "Inspect the whole vaults attached to a saved workflow, including archived definitions, without reading secret values. Obtain ns and name from automation.workflows.list. Bindings belong to the definition rather than a published version. When vault or secret metadata cannot be read, the binding remains visible with secrets: [] and secrets_unavailable: true.",
6677
+ "http": "GET",
6678
+ "path": "/automation/v1/workflows/{ns}/{name}/vaults",
6679
+ "streaming": "no",
6680
+ "pagination": false,
6681
+ "pathParams": [
6682
+ {
6683
+ "name": "ns",
6684
+ "sdkName": "ns",
6685
+ "description": "Namespace from automation.workflows.list or create; identifies the saved workflow, independently of versions."
6686
+ },
6687
+ {
6688
+ "name": "name",
6689
+ "sdkName": "name",
6690
+ "description": "Resource name from automation.workflows.list or create; combine with ns to identify the saved workflow."
6691
+ }
6692
+ ],
6693
+ "query": []
6694
+ },
6695
+ {
6696
+ "resource": "automation.workflows.vaults",
6697
+ "method": "delete",
6698
+ "summary": "Delete a workflow vault binding",
6699
+ "description": "Remove the vault assignment from this saved workflow without deleting the vault or its secrets. Obtain aliases from automation.workflows.vaults.list. Repeating deletion of an absent alias on an existing definition succeeds. Bindings also disappear when the definition is permanently deleted, while archival retains them.",
6700
+ "http": "DELETE",
6701
+ "path": "/automation/v1/workflows/{ns}/{name}/vaults/{alias}",
6702
+ "streaming": "no",
6703
+ "pagination": false,
6704
+ "pathParams": [
6705
+ {
6706
+ "name": "ns",
6707
+ "sdkName": "ns",
6708
+ "description": "Namespace from automation.workflows.list or create; identifies the saved workflow, independently of versions."
6709
+ },
6710
+ {
6711
+ "name": "name",
6712
+ "sdkName": "name",
6713
+ "description": "Resource name from automation.workflows.list or create; combine with ns to identify the saved workflow."
6714
+ },
6715
+ {
6716
+ "name": "alias",
6717
+ "sdkName": "alias",
6718
+ "description": "Binding alias chosen by the caller: 1–40 lowercase letters, digits or hyphens, beginning with a letter."
6719
+ }
6720
+ ],
6721
+ "query": []
6722
+ },
6723
+ {
6724
+ "resource": "automation.workflows.vaults",
6725
+ "method": "set",
6726
+ "summary": "Set a workflow vault binding",
6727
+ "description": "Attach an entire active vault in your organization to a saved workflow, or replace the vault at an existing alias. Obtain the vault ID or display name from praxis.vault.vaults.list; ambiguous names require an ID. Bindings are independent of published versions and survive archival. The same vault cannot be assigned to two aliases on one definition. Repeating the same assignment is idempotent. Example body: {\"vault\":\"Production\"}.",
6728
+ "http": "PUT",
6729
+ "path": "/automation/v1/workflows/{ns}/{name}/vaults/{alias}",
6730
+ "streaming": "no",
6731
+ "pagination": false,
6732
+ "pathParams": [
6733
+ {
6734
+ "name": "ns",
6735
+ "sdkName": "ns",
6736
+ "description": "Namespace from automation.workflows.list or create; identifies the saved workflow, independently of versions."
6737
+ },
6738
+ {
6739
+ "name": "name",
6740
+ "sdkName": "name",
6741
+ "description": "Resource name from automation.workflows.list or create; combine with ns to identify the saved workflow."
6742
+ },
6743
+ {
6744
+ "name": "alias",
6745
+ "sdkName": "alias",
6746
+ "description": "Binding alias chosen by the caller: 1–40 lowercase letters, digits or hyphens, beginning with a letter."
6747
+ }
6748
+ ],
6749
+ "query": [],
6750
+ "body": {
6751
+ "required": true,
6752
+ "fields": [
6753
+ {
6754
+ "name": "vault",
6755
+ "type": "string",
6756
+ "required": true,
6757
+ "description": "Active vault ID or exact display name from praxis.vault.vaults.list in your organization. Use an ID if display names are duplicated."
6758
+ }
6759
+ ]
6760
+ }
6761
+ },
6568
6762
  {
6569
6763
  "resource": "automation.workflows.versions",
6570
6764
  "method": "list",
@@ -7314,6 +7508,12 @@ export const operations = [
7314
7508
  "type": "string",
7315
7509
  "required": false,
7316
7510
  "description": "Opaque next_cursor from the preceding list response; omit for the first page and stop when next_cursor is null."
7511
+ },
7512
+ {
7513
+ "name": "collection_id",
7514
+ "type": "string",
7515
+ "required": false,
7516
+ "description": "Filter to a collection id from collections.list, or the literal none for uncategorized canvases. Omit to list all canvases; keep the same filter when following next_cursor."
7317
7517
  }
7318
7518
  ]
7319
7519
  },
@@ -7376,6 +7576,41 @@ export const operations = [
7376
7576
  ],
7377
7577
  "query": []
7378
7578
  },
7579
+ {
7580
+ "resource": "canvas.canvases",
7581
+ "method": "update",
7582
+ "summary": "Update canvas",
7583
+ "description": "Rename a canvas or move it to a collection without editing its design content. Use a canvas id from canvases.list and a collection id from collections.list. Send collection_id=null to make it uncategorized; omit either field to preserve its current value. A canvas belongs to at most one collection. The destination must belong to your organization. Renaming keeps the canvas version unchanged.",
7584
+ "http": "PATCH",
7585
+ "path": "/canvas/v1/canvases/{canvas_id}",
7586
+ "streaming": "no",
7587
+ "pagination": false,
7588
+ "pathParams": [
7589
+ {
7590
+ "name": "canvas_id",
7591
+ "sdkName": "canvas_id",
7592
+ "description": "Canvas id returned by create or list, in the form cvs_ followed by 16 lowercase letters or digits; a display name is not accepted."
7593
+ }
7594
+ ],
7595
+ "query": [],
7596
+ "body": {
7597
+ "required": true,
7598
+ "fields": [
7599
+ {
7600
+ "name": "name",
7601
+ "type": "string",
7602
+ "required": false,
7603
+ "description": "New canvas display name; surrounding whitespace is trimmed, blank names use Untitled, and omission preserves the current name."
7604
+ },
7605
+ {
7606
+ "name": "collection_id",
7607
+ "type": "string",
7608
+ "required": false,
7609
+ "description": "Move to this collection id from collections.list; null removes the canvas from its collection. Omission preserves the current assignment."
7610
+ }
7611
+ ]
7612
+ }
7613
+ },
7379
7614
  {
7380
7615
  "resource": "canvas.canvases.images",
7381
7616
  "method": "list",
@@ -7393,6 +7628,12 @@ export const operations = [
7393
7628
  }
7394
7629
  ],
7395
7630
  "query": [
7631
+ {
7632
+ "name": "version",
7633
+ "type": "string",
7634
+ "required": false,
7635
+ "description": "Decimal version from versions.list, or its earliest_restorable_version, for a read-only historical snapshot; omit to read current state. Unavailable versions return VERSION_NOT_FOUND."
7636
+ },
7396
7637
  {
7397
7638
  "name": "ids",
7398
7639
  "type": "string",
@@ -7433,6 +7674,12 @@ export const operations = [
7433
7674
  }
7434
7675
  ],
7435
7676
  "query": [
7677
+ {
7678
+ "name": "version",
7679
+ "type": "string",
7680
+ "required": false,
7681
+ "description": "Decimal version from versions.list, or its earliest_restorable_version, for a read-only historical snapshot; omit to read current state. Unavailable versions return VERSION_NOT_FOUND."
7682
+ },
7436
7683
  {
7437
7684
  "name": "ids",
7438
7685
  "type": "string",
@@ -7447,11 +7694,42 @@ export const operations = [
7447
7694
  }
7448
7695
  ]
7449
7696
  },
7697
+ {
7698
+ "resource": "canvas.canvases.versions",
7699
+ "method": "list",
7700
+ "summary": "List canvas versions",
7701
+ "description": "Inspect retained edits before restoring a canvas or reading historical nodes and images. Supply a canvas_id from canvases.list or create. Results include successful execute, import and restore commits since history was enabled, newest first. limit is 1–100 and defaults to 30; pass next_cursor as cursor until it is null. All versions from the last 30 days are retained unless the 256 MiB history budget requires pruning; the newest 100 versions are always retained regardless of age or size. earliest_restorable_version is the oldest readable and restorable version, including the state immediately before the first retained commit; null means no history has been recorded. Listing does not change the canvas.",
7702
+ "http": "GET",
7703
+ "path": "/canvas/v1/canvases/{canvas_id}/versions",
7704
+ "streaming": "no",
7705
+ "pagination": false,
7706
+ "pathParams": [
7707
+ {
7708
+ "name": "canvas_id",
7709
+ "sdkName": "canvas_id",
7710
+ "description": "Canvas id returned by create or list, in the form cvs_ followed by 16 lowercase letters or digits; a display name is not accepted."
7711
+ }
7712
+ ],
7713
+ "query": [
7714
+ {
7715
+ "name": "limit",
7716
+ "type": "integer",
7717
+ "required": false,
7718
+ "description": "Maximum commits to return, from 1 to 100 inclusive; omission uses 30."
7719
+ },
7720
+ {
7721
+ "name": "cursor",
7722
+ "type": "string",
7723
+ "required": false,
7724
+ "description": "Copy next_cursor from the preceding page to continue toward older commits; omit for the first page."
7725
+ }
7726
+ ]
7727
+ },
7450
7728
  {
7451
7729
  "resource": "canvas.canvases",
7452
7730
  "method": "execute",
7453
7731
  "summary": "Execute canvas script",
7454
- "description": "Draw or edit a canvas atomically with a synchronous Pencil execute script. First create a canvas with praxis.canvas.canvases.create and use its id as canvas_id; inspect an existing canvas with retrieve before modifying it. Send exactly one of script (new source) or edit_id (a failed script to patch using edits). Unlike Figma REST, :execute writes design content; nodes use Pencil .pen schema 2.21 (frame/group/rectangle/ellipse/polygon/path/text/icon/ref/note), not Figma node fields.\n\nThe root variable is document. Synchronous functions are Insert / Copy / Update / Replace / Move / Delete / SetVariables / Get / GetVariables / FindEmptySpace / Print / TakeScreenshot; globals persist for the next call. A first frame needs only this body.script:\n\n```js\nconst f = Insert(document, { type: \"frame\", name: \"Hero\", width: 1200, layout: \"vertical\", padding: 48, fill: \"#FFFFFF\" }); Insert(f, { type: \"text\", content: \"Hello\", fontSize: 32, fill: \"#111111\" }); Print(f)\n```\n\nUse viewer_url to watch the result in Console. TakeScreenshot records node ids in screenshots; call images.list with those ids to fetch PNG data URLs. See the [Canvas execute reference](https://deepraxis.com/en/docs/api/native/canvas/execute) for request fields and results, and the [Canvas node reference](https://deepraxis.com/en/docs/developers/canvas/nodes) for node content.\n\nA successful write increments version by one. Optionally set expected_version to the version from retrieve or nodes.list; on 409 REVISION_CONFLICT read again, merge your intent and retry with the current version. Every script failure rolls back all writes. On 400 SCRIPT_ERROR, SCRIPT_LIMIT or OPS_REJECTED, use error.details.edit_id plus edits to repair and rerun the stored source without resending the entire script; details may include line, column and rejection. On 400 EDIT_EXPIRED the saved script is older than ten minutes: submit a corrected new script. On 429 CANVAS_BUSY, more than four calls are queued for this canvas: wait for pending calls before retrying.\n",
7732
+ "description": "Draw or edit a canvas atomically with a synchronous Pencil execute script. First create a canvas with praxis.canvas.canvases.create and use its id as canvas_id; inspect an existing canvas with retrieve before modifying it. Send exactly one of script (new source) or edit_id (a failed script to patch using edits). Unlike Figma REST, :execute writes design content; nodes use Pencil .pen schema 2.21 (frame/group/rectangle/ellipse/polygon/path/text/icon/ref/note), not Figma node fields.\n\nThe root variable is document. Synchronous functions are Insert / Copy / Update / Replace / Move / Delete / SetVariables / Get / GetVariables / FindEmptySpace / Print / TakeScreenshot; globals persist for the next call. A first frame needs only this body.script:\n\n```js\nconst f = Insert(document, { type: \"frame\", name: \"Hero\", width: 1200, layout: \"vertical\", padding: 48, fill: \"#FFFFFF\" }); Insert(f, { type: \"text\", content: \"Hello\", fontSize: 32, fill: \"#111111\" }); Print(f)\n```\n\nInsert/Copy return the new node id; read the copy with Get(id) — copied descendants get new ids, so change them through Copy's third argument `descendants` keyed by the source node ids. To copy a page and change its title in the same script:\n\n```js canvas-example=\"copy-page\"\nconst page = Insert(document, {type:\"frame\",name:\"Original\",width:320,height:160,layout:\"vertical\",padding:16});\nconst title = Insert(page, {type:\"text\",name:\"Title\",content:\"Original\",fontSize:24});\nconst copy = Copy(page, document, {name:\"Copy\",x:360,descendants:{[title]:{content:\"Updated\"}}});\nPrint(copy); Print(Get(copy).children[0].content);\n```\n\nUse viewer_url to watch the result in Console. TakeScreenshot records node ids in screenshots; call images.list with those ids to fetch PNG data URLs. See the [Canvas execute reference](https://deepraxis.com/en/docs/api/native/canvas/execute) for request fields and results, and the [Canvas node reference](https://deepraxis.com/en/docs/developers/canvas/nodes) for node content.\n\nA successful write increments version by one. Optionally set expected_version to the version from retrieve or nodes.list; on 409 REVISION_CONFLICT read again, merge your intent and retry with the current version. Every script failure rolls back all writes. On 400 SCRIPT_ERROR, SCRIPT_LIMIT or OPS_REJECTED, use error.details.edit_id plus edits to repair and rerun the stored source without resending the entire script; details may include line, column and rejection. On 400 EDIT_EXPIRED the saved script is older than ten minutes: submit a corrected new script. On 429 CANVAS_BUSY, more than four calls are queued for this canvas: wait for pending calls before retrying.\n\nExecution errors include error.details.prints containing output printed before failure, with the same string-array shape and output limit as successful prints; rolled-back writes still create no version.\n",
7455
7733
  "http": "POST",
7456
7734
  "path": "/canvas/v1/canvases/{canvas_id}:execute",
7457
7735
  "streaming": "no",
@@ -7496,43 +7774,1889 @@ export const operations = [
7496
7774
  }
7497
7775
  },
7498
7776
  {
7499
- "resource": "cut.exports",
7500
- "method": "retrieve",
7501
- "summary": "Retrieve video export",
7502
- "description": "Poll an export id returned by projects.exports.create or list to observe render progress. queued, fetching, rendering, stitching and saving are in progress; done provides asset in the target library, failed provides error, and canceled means the job stopped. Only done confirms a usable output asset.",
7503
- "http": "GET",
7504
- "path": "/cut/v1/exports/{export_id}",
7777
+ "resource": "canvas.canvases",
7778
+ "method": "restore",
7779
+ "summary": "Restore canvas version",
7780
+ "description": "Recover a canvas after an unwanted edit by restoring a retained version from versions.list or its earliest_restorable_version. This replaces current nodes, variables and themes with the target state and creates one new version; history remains available, so restoring can itself be undone with another restore. Restoring the current version succeeds without creating a version. Optionally guard the write with expected_version from retrieve or nodes.list; if it is stale, inspect current state and retry with the new value. Repeating an unguarded request after another edit can create another restore version. Versions from before history was enabled or outside retention cannot be recovered. Connected viewers resync after a successful restore.",
7781
+ "http": "POST",
7782
+ "path": "/canvas/v1/canvases/{canvas_id}:restore",
7505
7783
  "streaming": "no",
7506
7784
  "pagination": false,
7507
7785
  "pathParams": [
7508
7786
  {
7509
- "name": "export_id",
7510
- "sdkName": "export_id",
7511
- "description": "Export identifier returned by its create or list operation; use the id, not a display name."
7787
+ "name": "canvas_id",
7788
+ "sdkName": "canvas_id",
7789
+ "description": "Canvas id returned by create or list, in the form cvs_ followed by 16 lowercase letters or digits; a display name is not accepted."
7512
7790
  }
7513
7791
  ],
7514
- "query": []
7792
+ "query": [],
7793
+ "body": {
7794
+ "required": true,
7795
+ "fields": [
7796
+ {
7797
+ "name": "version",
7798
+ "type": "string",
7799
+ "required": true,
7800
+ "description": "Historical target from versions.list or earliest_restorable_version; restoring the current version creates no new commit."
7801
+ },
7802
+ {
7803
+ "name": "expected_version",
7804
+ "type": "string",
7805
+ "required": false,
7806
+ "description": "Current version from retrieve or nodes.list to guard against concurrent edits; omission applies the restore to whichever version is current."
7807
+ }
7808
+ ]
7809
+ }
7515
7810
  },
7516
7811
  {
7517
- "resource": "cut.exports",
7518
- "method": "cancel",
7519
- "summary": "Cancel video export",
7520
- "description": "Request cancellation of an export obtained from projects.exports.create or list when its output is no longer needed. Read the returned job status and retrieve it to confirm the terminal outcome; do not interpret a cancellation request as successful rendering.",
7521
- "http": "POST",
7522
- "path": "/cut/v1/exports/{export_id}:cancel",
7812
+ "resource": "canvas.collections",
7813
+ "method": "list",
7814
+ "summary": "List collections",
7815
+ "description": "Find collections and ids for filtering or moving canvases. All organization collections are returned in name order in one response; next_cursor is always null. canvas_count excludes deleted canvases. total_count counts all live canvases, rather than collections, and uncategorized_count counts live canvases without a collection. Use canvases.list with collection_id to read a collection or none to read uncategorized canvases.",
7816
+ "http": "GET",
7817
+ "path": "/canvas/v1/collections",
7523
7818
  "streaming": "no",
7524
7819
  "pagination": false,
7525
- "pathParams": [
7526
- {
7527
- "name": "export_id",
7528
- "sdkName": "export_id",
7529
- "description": "Export identifier returned by its create or list operation; use the id, not a display name."
7530
- }
7531
- ],
7820
+ "pathParams": [],
7532
7821
  "query": []
7533
7822
  },
7534
7823
  {
7535
- "resource": "cut.projects",
7824
+ "resource": "canvas.collections",
7825
+ "method": "create",
7826
+ "summary": "Create collection",
7827
+ "description": "Organize canvases by creating a one-level collection in your organization. Send a name of 1–100 characters after trimming; duplicate names are allowed. Each call creates a new collection, initially containing no canvases. Use canvases.update with its id as collection_id to move existing canvases into it. Collections cannot be nested and an organization can have at most 200.",
7828
+ "http": "POST",
7829
+ "path": "/canvas/v1/collections",
7830
+ "streaming": "no",
7831
+ "pagination": false,
7832
+ "pathParams": [],
7833
+ "query": [],
7834
+ "body": {
7835
+ "required": true,
7836
+ "fields": [
7837
+ {
7838
+ "name": "name",
7839
+ "type": "string",
7840
+ "required": true,
7841
+ "description": "Collection display name, 1–100 characters after trimming surrounding whitespace; duplicate names within the organization are allowed."
7842
+ }
7843
+ ]
7844
+ }
7845
+ },
7846
+ {
7847
+ "resource": "canvas.collections",
7848
+ "method": "delete",
7849
+ "summary": "Delete collection",
7850
+ "description": "Remove a collection using an id from collections.list. All its canvases are preserved and become uncategorized, with collection_id set to null; read them using canvases.list with collection_id=none. The removed collection cannot be retrieved again, and repeating deletion returns COLLECTION_NOT_FOUND.",
7851
+ "http": "DELETE",
7852
+ "path": "/canvas/v1/collections/{collection_id}",
7853
+ "streaming": "no",
7854
+ "pagination": false,
7855
+ "pathParams": [
7856
+ {
7857
+ "name": "collection_id",
7858
+ "sdkName": "collection_id",
7859
+ "description": "Collection id from collections.create or collections.list, in the form col_ followed by 16 lowercase letters or digits; a display name is not an identifier."
7860
+ }
7861
+ ],
7862
+ "query": []
7863
+ },
7864
+ {
7865
+ "resource": "canvas.collections",
7866
+ "method": "retrieve",
7867
+ "summary": "Retrieve collection",
7868
+ "description": "Inspect one collection and its current live canvas count using an id from collections.list or collections.create. The collection must belong to the API key organization. To read its canvases, pass the same id as collection_id to canvases.list; this response contains collection metadata only.",
7869
+ "http": "GET",
7870
+ "path": "/canvas/v1/collections/{collection_id}",
7871
+ "streaming": "no",
7872
+ "pagination": false,
7873
+ "pathParams": [
7874
+ {
7875
+ "name": "collection_id",
7876
+ "sdkName": "collection_id",
7877
+ "description": "Collection id from collections.create or collections.list, in the form col_ followed by 16 lowercase letters or digits; a display name is not an identifier."
7878
+ }
7879
+ ],
7880
+ "query": []
7881
+ },
7882
+ {
7883
+ "resource": "canvas.collections",
7884
+ "method": "update",
7885
+ "summary": "Rename collection",
7886
+ "description": "Change the display name of a collection from collections.list without changing its id or canvas assignments. Names contain 1–100 characters after trimming and may match another collection name. This operation does not move canvases; use canvases.update with collection_id for that.",
7887
+ "http": "PATCH",
7888
+ "path": "/canvas/v1/collections/{collection_id}",
7889
+ "streaming": "no",
7890
+ "pagination": false,
7891
+ "pathParams": [
7892
+ {
7893
+ "name": "collection_id",
7894
+ "sdkName": "collection_id",
7895
+ "description": "Collection id from collections.create or collections.list, in the form col_ followed by 16 lowercase letters or digits; a display name is not an identifier."
7896
+ }
7897
+ ],
7898
+ "query": [],
7899
+ "body": {
7900
+ "required": true,
7901
+ "fields": [
7902
+ {
7903
+ "name": "name",
7904
+ "type": "string",
7905
+ "required": true,
7906
+ "description": "Collection display name, 1–100 characters after trimming surrounding whitespace; duplicate names within the organization are allowed."
7907
+ }
7908
+ ]
7909
+ }
7910
+ },
7911
+ {
7912
+ "resource": "crm.changes",
7913
+ "method": "revert",
7914
+ "summary": "Revert change set",
7915
+ "description": "Reverse property changes made by one earlier request. Unlike HubSpot, CRM exposes change-set reversal because agents need to undo a whole recorded action rather than manually reconstructing individual values. Supply the changeSetId recorded in property history. A later conflicting value prevents reversal with HTTP 409 CONFLICT; inspect current records before resolving the conflict. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations.",
7916
+ "http": "POST",
7917
+ "path": "/crm/v1/changes/{changeSetId}:revert",
7918
+ "streaming": "no",
7919
+ "pagination": false,
7920
+ "pathParams": [
7921
+ {
7922
+ "name": "changeSetId",
7923
+ "sdkName": "changeSetId",
7924
+ "description": "Change-set identifier recorded for the original write in property history; one request forms one change set."
7925
+ }
7926
+ ],
7927
+ "query": []
7928
+ },
7929
+ {
7930
+ "resource": "crm.layouts",
7931
+ "method": "retrieve",
7932
+ "summary": "Retrieve record layout",
7933
+ "description": "Read the shared record-page layout for an object type from schemas.list. Unlike HubSpot, CRM exposes this presentation as an API resource so people and agents can share the same record layout instead of relying on interface-only settings. The response orders summary tiles, sidebar properties and main-column sections.",
7934
+ "http": "GET",
7935
+ "path": "/crm/v1/layouts/{objectType}",
7936
+ "streaming": "no",
7937
+ "pagination": false,
7938
+ "pathParams": [
7939
+ {
7940
+ "name": "objectType",
7941
+ "sdkName": "objectType",
7942
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
7943
+ }
7944
+ ],
7945
+ "query": []
7946
+ },
7947
+ {
7948
+ "resource": "crm.layouts",
7949
+ "method": "update",
7950
+ "summary": "Update record layout",
7951
+ "description": "Replace the shared record-page layout for an object type from schemas.list. Unlike HubSpot, CRM exposes this presentation as an API resource so agents can configure the same record view used by people. Send the complete layout with at most three summary tiles and property names from properties.list; omitted prior sections are removed. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations.",
7952
+ "http": "PUT",
7953
+ "path": "/crm/v1/layouts/{objectType}",
7954
+ "streaming": "no",
7955
+ "pagination": false,
7956
+ "pathParams": [
7957
+ {
7958
+ "name": "objectType",
7959
+ "sdkName": "objectType",
7960
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
7961
+ }
7962
+ ],
7963
+ "query": [],
7964
+ "body": {
7965
+ "required": true,
7966
+ "fields": [
7967
+ {
7968
+ "name": "objectType",
7969
+ "type": "string",
7970
+ "required": true,
7971
+ "description": "Object type whose record page uses this layout, matching the path parameter."
7972
+ },
7973
+ {
7974
+ "name": "summary",
7975
+ "type": "array",
7976
+ "itemType": "object",
7977
+ "required": true,
7978
+ "description": "Ordered statistic tiles below the record header, with at most three tiles."
7979
+ },
7980
+ {
7981
+ "name": "sidebar",
7982
+ "type": "array",
7983
+ "itemType": "string",
7984
+ "required": true,
7985
+ "description": "Ordered internal property names shown in the record property sidebar."
7986
+ },
7987
+ {
7988
+ "name": "sections",
7989
+ "type": "array",
7990
+ "itemType": "string",
7991
+ "required": true,
7992
+ "description": "Ordered main-column sections for activity, relationships, tables and property groups."
7993
+ }
7994
+ ]
7995
+ }
7996
+ },
7997
+ {
7998
+ "resource": "crm.leads",
7999
+ "method": "qualify",
8000
+ "summary": "Qualify lead",
8001
+ "description": "Qualify a lead with explicit contact, company and optional deal choices in one operation. Unlike HubSpot, CRM exposes these decisions as a single action because qualification coordinates several related record edits rather than editing only the lead stage. Obtain leadId from objects.list for leads and qualifiedStageId from its pipeline; choose a won stage and satisfy its required properties. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations.",
8002
+ "http": "POST",
8003
+ "path": "/crm/v1/leads/{leadId}:qualify",
8004
+ "streaming": "no",
8005
+ "pagination": false,
8006
+ "pathParams": [
8007
+ {
8008
+ "name": "leadId",
8009
+ "sdkName": "leadId",
8010
+ "description": "Lead record identifier from objects.list or objects.search with objectType=leads."
8011
+ }
8012
+ ],
8013
+ "query": [],
8014
+ "body": {
8015
+ "required": true,
8016
+ "fields": [
8017
+ {
8018
+ "name": "contact",
8019
+ "type": "object",
8020
+ "required": true,
8021
+ "description": "Keep the existing contact, or merge it into the chosen contact record."
8022
+ },
8023
+ {
8024
+ "name": "company",
8025
+ "type": "object",
8026
+ "required": true,
8027
+ "description": "Leave company unchanged, associate an existing company, or create one with explicit properties."
8028
+ },
8029
+ {
8030
+ "name": "deal",
8031
+ "type": "object",
8032
+ "required": false,
8033
+ "description": "Optional deal to create as part of qualification; omit to qualify without creating a deal."
8034
+ },
8035
+ {
8036
+ "name": "qualifiedStageId",
8037
+ "type": "string",
8038
+ "required": true,
8039
+ "description": "Lead stage id with praxis_category=won, obtained from the leads pipeline."
8040
+ }
8041
+ ]
8042
+ }
8043
+ },
8044
+ {
8045
+ "resource": "crm.objects",
8046
+ "method": "list",
8047
+ "summary": "List records",
8048
+ "description": "Browse records of one object type and obtain ids for retrieval or edits. Discover objectType with schemas.list; select properties by internal names from properties.list. Omit after for the first page, then copy paging.next.after until no next page is returned. archived defaults to false; use objects.search for property filters.",
8049
+ "http": "GET",
8050
+ "path": "/crm/v1/objects/{objectType}",
8051
+ "streaming": "no",
8052
+ "pagination": false,
8053
+ "pathParams": [
8054
+ {
8055
+ "name": "objectType",
8056
+ "sdkName": "objectType",
8057
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8058
+ }
8059
+ ],
8060
+ "query": [
8061
+ {
8062
+ "name": "after",
8063
+ "type": "string",
8064
+ "required": false,
8065
+ "description": "The paging cursor token of the last successfully read resource will be returned as the `paging.next.after` JSON property of a paged response containing more results."
8066
+ },
8067
+ {
8068
+ "name": "archived",
8069
+ "type": "boolean",
8070
+ "required": false,
8071
+ "description": "Whether to return only results that have been archived."
8072
+ },
8073
+ {
8074
+ "name": "associations",
8075
+ "type": "array",
8076
+ "itemType": "string",
8077
+ "required": false,
8078
+ "description": "A comma separated list of object types to retrieve associated IDs for. If any of the specified associations do not exist, they will be ignored."
8079
+ },
8080
+ {
8081
+ "name": "limit",
8082
+ "type": "integer",
8083
+ "required": false,
8084
+ "description": "The maximum number of results to display per page."
8085
+ },
8086
+ {
8087
+ "name": "properties",
8088
+ "type": "array",
8089
+ "itemType": "string",
8090
+ "required": false,
8091
+ "description": "A comma separated list of the properties to be returned in the response. If any of the specified properties are not present on the requested object(s), they will be ignored."
8092
+ },
8093
+ {
8094
+ "name": "propertiesWithHistory",
8095
+ "type": "array",
8096
+ "itemType": "string",
8097
+ "required": false,
8098
+ "description": "A comma separated list of the properties to be returned along with their history of previous values. If any of the specified properties are not present on the requested object(s), they will be ignored. Usage of this parameter will reduce the maximum number of objects that can be read by a single request."
8099
+ }
8100
+ ]
8101
+ },
8102
+ {
8103
+ "resource": "crm.objects",
8104
+ "method": "create",
8105
+ "summary": "Create record",
8106
+ "description": "Create a customer record with property values and optional initial associations. Discover objectType with schemas.list and allowed property names with properties.list; save the returned id for subsequent calls. Each call creates a record. Example for contacts: {\"properties\":{\"email\":\"person@example.com\"}}. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations.",
8107
+ "http": "POST",
8108
+ "path": "/crm/v1/objects/{objectType}",
8109
+ "streaming": "no",
8110
+ "pagination": false,
8111
+ "pathParams": [
8112
+ {
8113
+ "name": "objectType",
8114
+ "sdkName": "objectType",
8115
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8116
+ }
8117
+ ],
8118
+ "query": [],
8119
+ "body": {
8120
+ "required": true,
8121
+ "fields": [
8122
+ {
8123
+ "name": "associations",
8124
+ "type": "array",
8125
+ "itemType": "object",
8126
+ "required": true,
8127
+ "description": "Initial relationships to existing records; choose destination ids and association type ids before creating the record."
8128
+ },
8129
+ {
8130
+ "name": "properties",
8131
+ "type": "object",
8132
+ "required": true,
8133
+ "description": "Key-value pairs for setting properties for the new object."
8134
+ }
8135
+ ]
8136
+ }
8137
+ },
8138
+ {
8139
+ "resource": "crm.objects.batch",
8140
+ "method": "archive",
8141
+ "summary": "Batch archive records",
8142
+ "description": "Archive known records of one object type using inputs[].id from objects.list or objects.search. Archived records leave active lists but retain their history; confirm all ids before calling. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations. Unlike HubSpot, this own-face archive returns HTTP 200 with a JSON refs body instead of HTTP 204.",
8143
+ "http": "POST",
8144
+ "path": "/crm/v1/objects/{objectType}/batch/archive",
8145
+ "streaming": "no",
8146
+ "pagination": false,
8147
+ "pathParams": [
8148
+ {
8149
+ "name": "objectType",
8150
+ "sdkName": "objectType",
8151
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8152
+ }
8153
+ ],
8154
+ "query": [],
8155
+ "body": {
8156
+ "required": true,
8157
+ "fields": [
8158
+ {
8159
+ "name": "inputs",
8160
+ "type": "array",
8161
+ "itemType": "object",
8162
+ "required": true,
8163
+ "description": "Records to process in this batch, each using the identifiers and properties described by its item schema."
8164
+ }
8165
+ ]
8166
+ }
8167
+ },
8168
+ {
8169
+ "resource": "crm.objects.batch",
8170
+ "method": "create",
8171
+ "summary": "Batch create records",
8172
+ "description": "Create several records of one object type using inputs with properties and optional associations. Obtain property names from properties.list; each successful input creates a record, so inspect per-item errors before resubmitting failed inputs. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations.",
8173
+ "http": "POST",
8174
+ "path": "/crm/v1/objects/{objectType}/batch/create",
8175
+ "streaming": "no",
8176
+ "pagination": false,
8177
+ "pathParams": [
8178
+ {
8179
+ "name": "objectType",
8180
+ "sdkName": "objectType",
8181
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8182
+ }
8183
+ ],
8184
+ "query": [],
8185
+ "body": {
8186
+ "required": true,
8187
+ "fields": [
8188
+ {
8189
+ "name": "inputs",
8190
+ "type": "array",
8191
+ "itemType": "object",
8192
+ "required": true,
8193
+ "description": "Records to process in this batch, each using the identifiers and properties described by its item schema."
8194
+ }
8195
+ ]
8196
+ }
8197
+ },
8198
+ {
8199
+ "resource": "crm.objects.batch",
8200
+ "method": "read",
8201
+ "summary": "Batch read records",
8202
+ "description": "Read a set of known record ids in one call; use objects.search to discover ids first. Supply inputs with ids plus requested properties; set idProperty only when the inputs use unique-property values rather than record ids.",
8203
+ "http": "POST",
8204
+ "path": "/crm/v1/objects/{objectType}/batch/read",
8205
+ "streaming": "no",
8206
+ "pagination": false,
8207
+ "pathParams": [
8208
+ {
8209
+ "name": "objectType",
8210
+ "sdkName": "objectType",
8211
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8212
+ }
8213
+ ],
8214
+ "query": [
8215
+ {
8216
+ "name": "archived",
8217
+ "type": "boolean",
8218
+ "required": false,
8219
+ "description": "Whether to return only results that have been archived."
8220
+ }
8221
+ ],
8222
+ "body": {
8223
+ "required": true,
8224
+ "fields": [
8225
+ {
8226
+ "name": "idProperty",
8227
+ "type": "string",
8228
+ "required": false,
8229
+ "description": "When using a custom unique value property to retrieve records, the name of the property. Do not include this parameter if retrieving by record ID."
8230
+ },
8231
+ {
8232
+ "name": "inputs",
8233
+ "type": "array",
8234
+ "itemType": "object",
8235
+ "required": true,
8236
+ "description": "Records to process in this batch, each using the identifiers and properties described by its item schema."
8237
+ },
8238
+ {
8239
+ "name": "properties",
8240
+ "type": "array",
8241
+ "itemType": "string",
8242
+ "required": true,
8243
+ "description": "Internal property names to include in each returned record; obtain them from properties.list."
8244
+ },
8245
+ {
8246
+ "name": "propertiesWithHistory",
8247
+ "type": "array",
8248
+ "itemType": "string",
8249
+ "required": true,
8250
+ "description": "Internal property names whose previous values should be returned with each record; use an empty array when no history is needed."
8251
+ }
8252
+ ]
8253
+ }
8254
+ },
8255
+ {
8256
+ "resource": "crm.objects.batch",
8257
+ "method": "update",
8258
+ "summary": "Batch update records",
8259
+ "description": "Apply distinct property patches to existing records identified by inputs[].id. Obtain ids from objects.list or objects.search and property names from properties.list. Omitted properties retain their values; inspect results and errors for each input. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations.",
8260
+ "http": "POST",
8261
+ "path": "/crm/v1/objects/{objectType}/batch/update",
8262
+ "streaming": "no",
8263
+ "pagination": false,
8264
+ "pathParams": [
8265
+ {
8266
+ "name": "objectType",
8267
+ "sdkName": "objectType",
8268
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8269
+ }
8270
+ ],
8271
+ "query": [],
8272
+ "body": {
8273
+ "required": true,
8274
+ "fields": [
8275
+ {
8276
+ "name": "inputs",
8277
+ "type": "array",
8278
+ "itemType": "object",
8279
+ "required": true,
8280
+ "description": "Records to process in this batch, each using the identifiers and properties described by its item schema."
8281
+ }
8282
+ ]
8283
+ }
8284
+ },
8285
+ {
8286
+ "resource": "crm.objects.batch",
8287
+ "method": "upsert",
8288
+ "summary": "Batch upsert records",
8289
+ "description": "Create records that do not yet exist or update matches using a unique property. Provide idProperty and its value in each input, plus properties; choose a property with hasUniqueValue from properties.list. Inspect each result to determine whether it was newly created. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations.",
8290
+ "http": "POST",
8291
+ "path": "/crm/v1/objects/{objectType}/batch/upsert",
8292
+ "streaming": "no",
8293
+ "pagination": false,
8294
+ "pathParams": [
8295
+ {
8296
+ "name": "objectType",
8297
+ "sdkName": "objectType",
8298
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8299
+ }
8300
+ ],
8301
+ "query": [],
8302
+ "body": {
8303
+ "required": true,
8304
+ "fields": [
8305
+ {
8306
+ "name": "inputs",
8307
+ "type": "array",
8308
+ "itemType": "object",
8309
+ "required": true,
8310
+ "description": "Records to process in this batch, each using the identifiers and properties described by its item schema."
8311
+ }
8312
+ ]
8313
+ }
8314
+ },
8315
+ {
8316
+ "resource": "crm.objects",
8317
+ "method": "search",
8318
+ "summary": "Search records",
8319
+ "description": "Find records using text query, property filters and sort order rather than scanning a list. Obtain objectType from schemas.list and filter propertyName values from properties.list. Supply filterGroups, sorts, properties, limit and after; use empty arrays for no filters, sorts or property selection, and an empty after for the first page. Copy paging.next.after with the same query to continue. This operation reads records without changing them.",
8320
+ "http": "POST",
8321
+ "path": "/crm/v1/objects/{objectType}/search",
8322
+ "streaming": "no",
8323
+ "pagination": false,
8324
+ "pathParams": [
8325
+ {
8326
+ "name": "objectType",
8327
+ "sdkName": "objectType",
8328
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8329
+ }
8330
+ ],
8331
+ "query": [],
8332
+ "body": {
8333
+ "required": true,
8334
+ "fields": [
8335
+ {
8336
+ "name": "after",
8337
+ "type": "string",
8338
+ "required": true,
8339
+ "description": "A paging cursor token for retrieving subsequent pages."
8340
+ },
8341
+ {
8342
+ "name": "filterGroups",
8343
+ "type": "array",
8344
+ "itemType": "object",
8345
+ "required": true,
8346
+ "description": "Up to 6 groups of filters defining additional query criteria."
8347
+ },
8348
+ {
8349
+ "name": "limit",
8350
+ "type": "integer",
8351
+ "required": true,
8352
+ "description": "The maximum results to return, up to 200 objects."
8353
+ },
8354
+ {
8355
+ "name": "properties",
8356
+ "type": "array",
8357
+ "itemType": "string",
8358
+ "required": true,
8359
+ "description": "Internal property names to include in each returned record; obtain them from properties.list."
8360
+ },
8361
+ {
8362
+ "name": "query",
8363
+ "type": "string",
8364
+ "required": false,
8365
+ "description": "The search query string, up to 3000 characters."
8366
+ },
8367
+ {
8368
+ "name": "sorts",
8369
+ "type": "array",
8370
+ "itemType": "string",
8371
+ "required": true,
8372
+ "description": "Property names controlling ordering; prefix a property name with a minus sign for descending order."
8373
+ }
8374
+ ]
8375
+ }
8376
+ },
8377
+ {
8378
+ "resource": "crm.objects",
8379
+ "method": "archive",
8380
+ "summary": "Archive record",
8381
+ "description": "Archive a record selected from objects.list or objects.search when it should leave active results. This removes it from normal lists without deleting its history; archived=true can be used to read archived records. Confirm objectType and objectId before calling. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations. Unlike HubSpot, this own-face archive returns HTTP 200 with a JSON refs body instead of HTTP 204.",
8382
+ "http": "DELETE",
8383
+ "path": "/crm/v1/objects/{objectType}/{objectId}",
8384
+ "streaming": "no",
8385
+ "pagination": false,
8386
+ "pathParams": [
8387
+ {
8388
+ "name": "objectType",
8389
+ "sdkName": "objectType",
8390
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8391
+ },
8392
+ {
8393
+ "name": "objectId",
8394
+ "sdkName": "objectId",
8395
+ "description": "Record id from objects.list, objects.search or objects.create for this objectType."
8396
+ }
8397
+ ],
8398
+ "query": []
8399
+ },
8400
+ {
8401
+ "resource": "crm.objects",
8402
+ "method": "retrieve",
8403
+ "summary": "Retrieve record",
8404
+ "description": "Read one record by id from objects.list, objects.search or objects.create. Select property names with properties and associated object types with associations; use idProperty only when objectId is a value of that unique property. Use archived=true to inspect an archived record.",
8405
+ "http": "GET",
8406
+ "path": "/crm/v1/objects/{objectType}/{objectId}",
8407
+ "streaming": "no",
8408
+ "pagination": false,
8409
+ "pathParams": [
8410
+ {
8411
+ "name": "objectType",
8412
+ "sdkName": "objectType",
8413
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8414
+ },
8415
+ {
8416
+ "name": "objectId",
8417
+ "sdkName": "objectId",
8418
+ "description": "Record id from objects.list, objects.search or objects.create for this objectType."
8419
+ }
8420
+ ],
8421
+ "query": [
8422
+ {
8423
+ "name": "archived",
8424
+ "type": "boolean",
8425
+ "required": false,
8426
+ "description": "Whether to return only results that have been archived."
8427
+ },
8428
+ {
8429
+ "name": "associations",
8430
+ "type": "array",
8431
+ "itemType": "string",
8432
+ "required": false,
8433
+ "description": "A comma separated list of object types to retrieve associated IDs for. If any of the specified associations do not exist, they will be ignored."
8434
+ },
8435
+ {
8436
+ "name": "idProperty",
8437
+ "type": "string",
8438
+ "required": false,
8439
+ "description": "The name of a property whose values are unique for this object"
8440
+ },
8441
+ {
8442
+ "name": "properties",
8443
+ "type": "array",
8444
+ "itemType": "string",
8445
+ "required": false,
8446
+ "description": "A comma separated list of the properties to be returned in the response. If any of the specified properties are not present on the requested object(s), they will be ignored."
8447
+ },
8448
+ {
8449
+ "name": "propertiesWithHistory",
8450
+ "type": "array",
8451
+ "itemType": "string",
8452
+ "required": false,
8453
+ "description": "A comma separated list of the properties to be returned along with their history of previous values. If any of the specified properties are not present on the requested object(s), they will be ignored."
8454
+ }
8455
+ ]
8456
+ },
8457
+ {
8458
+ "resource": "crm.objects",
8459
+ "method": "update",
8460
+ "summary": "Update record",
8461
+ "description": "Change only the supplied properties of a record selected from objects.list or objects.search. Omitted properties retain their values. Use property names from properties.list and valid stage ids from pipelines.retrieve. Stage-entry requirements must be satisfied by the resulting record; inspect 400 errors before retrying. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations.",
8462
+ "http": "PATCH",
8463
+ "path": "/crm/v1/objects/{objectType}/{objectId}",
8464
+ "streaming": "no",
8465
+ "pagination": false,
8466
+ "pathParams": [
8467
+ {
8468
+ "name": "objectType",
8469
+ "sdkName": "objectType",
8470
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8471
+ },
8472
+ {
8473
+ "name": "objectId",
8474
+ "sdkName": "objectId",
8475
+ "description": "Record id from objects.list, objects.search or objects.create for this objectType."
8476
+ }
8477
+ ],
8478
+ "query": [
8479
+ {
8480
+ "name": "idProperty",
8481
+ "type": "string",
8482
+ "required": false,
8483
+ "description": "The name of a property whose values are unique for this object"
8484
+ }
8485
+ ],
8486
+ "body": {
8487
+ "required": true,
8488
+ "fields": [
8489
+ {
8490
+ "name": "properties",
8491
+ "type": "object",
8492
+ "required": true,
8493
+ "description": "Key value pairs representing the properties of the object."
8494
+ }
8495
+ ]
8496
+ }
8497
+ },
8498
+ {
8499
+ "resource": "crm.associations",
8500
+ "method": "createDefault",
8501
+ "summary": "Create default association",
8502
+ "description": "Link two existing records with the default unlabelled association. Obtain each record id from objects.list or objects.search for its type. No request body is required; use associations.create to choose explicit association labels. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations.",
8503
+ "http": "PUT",
8504
+ "path": "/crm/v1/objects/{objectType}/{objectId}/associations/default/{toObjectType}/{toObjectId}",
8505
+ "streaming": "no",
8506
+ "pagination": false,
8507
+ "pathParams": [
8508
+ {
8509
+ "name": "objectType",
8510
+ "sdkName": "objectType",
8511
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8512
+ },
8513
+ {
8514
+ "name": "objectId",
8515
+ "sdkName": "objectId",
8516
+ "description": "Record id from objects.list, objects.search or objects.create for this objectType."
8517
+ },
8518
+ {
8519
+ "name": "toObjectType",
8520
+ "sdkName": "toObjectType",
8521
+ "description": "Destination object type from schemas.list; use the type of the record being linked."
8522
+ },
8523
+ {
8524
+ "name": "toObjectId",
8525
+ "sdkName": "toObjectId",
8526
+ "description": "Destination record identifier from objects.list or objects.search for toObjectType."
8527
+ }
8528
+ ],
8529
+ "query": []
8530
+ },
8531
+ {
8532
+ "resource": "crm.associations",
8533
+ "method": "list",
8534
+ "summary": "List record associations",
8535
+ "description": "Read records linked to a source record, including association labels and type ids. Obtain source and destination object types from schemas.list and objectId from objects.list or objects.search. Follow paging.next.after to continue reading associated records.",
8536
+ "http": "GET",
8537
+ "path": "/crm/v1/objects/{objectType}/{objectId}/associations/{toObjectType}",
8538
+ "streaming": "no",
8539
+ "pagination": false,
8540
+ "pathParams": [
8541
+ {
8542
+ "name": "objectType",
8543
+ "sdkName": "objectType",
8544
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8545
+ },
8546
+ {
8547
+ "name": "objectId",
8548
+ "sdkName": "objectId",
8549
+ "description": "Record id from objects.list, objects.search or objects.create for this objectType."
8550
+ },
8551
+ {
8552
+ "name": "toObjectType",
8553
+ "sdkName": "toObjectType",
8554
+ "description": "Destination object type from schemas.list; use the type of the record being linked."
8555
+ }
8556
+ ],
8557
+ "query": [
8558
+ {
8559
+ "name": "after",
8560
+ "type": "string",
8561
+ "required": false,
8562
+ "description": "The paging cursor token of the last successfully read resource will be returned as the `paging.next.after` JSON property of a paged response containing more results."
8563
+ },
8564
+ {
8565
+ "name": "limit",
8566
+ "type": "integer",
8567
+ "required": false,
8568
+ "description": "The maximum number of results to display per page."
8569
+ }
8570
+ ]
8571
+ },
8572
+ {
8573
+ "resource": "crm.associations",
8574
+ "method": "remove",
8575
+ "summary": "Remove association",
8576
+ "description": "Remove the association between two existing records without archiving either record. Obtain the linked destination id from associations.list and confirm the source and destination object types before calling. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations. Unlike HubSpot, this own-face archive returns HTTP 200 with a JSON refs body instead of HTTP 204.",
8577
+ "http": "DELETE",
8578
+ "path": "/crm/v1/objects/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId}",
8579
+ "streaming": "no",
8580
+ "pagination": false,
8581
+ "pathParams": [
8582
+ {
8583
+ "name": "objectType",
8584
+ "sdkName": "objectType",
8585
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8586
+ },
8587
+ {
8588
+ "name": "objectId",
8589
+ "sdkName": "objectId",
8590
+ "description": "Record id from objects.list, objects.search or objects.create for this objectType."
8591
+ },
8592
+ {
8593
+ "name": "toObjectType",
8594
+ "sdkName": "toObjectType",
8595
+ "description": "Destination object type from schemas.list; use the type of the record being linked."
8596
+ },
8597
+ {
8598
+ "name": "toObjectId",
8599
+ "sdkName": "toObjectId",
8600
+ "description": "Destination record identifier from objects.list or objects.search for toObjectType."
8601
+ }
8602
+ ],
8603
+ "query": []
8604
+ },
8605
+ {
8606
+ "resource": "crm.associations",
8607
+ "method": "create",
8608
+ "summary": "Create labelled association",
8609
+ "description": "Associate two existing records using the requested association category and type id. Obtain record ids from objects.list or objects.search; reuse known association type ids from associations.list. Send the association-spec array as the body; use associations.createDefault when no label is needed. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations.",
8610
+ "http": "PUT",
8611
+ "path": "/crm/v1/objects/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId}",
8612
+ "streaming": "no",
8613
+ "pagination": false,
8614
+ "pathParams": [
8615
+ {
8616
+ "name": "objectType",
8617
+ "sdkName": "objectType",
8618
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8619
+ },
8620
+ {
8621
+ "name": "objectId",
8622
+ "sdkName": "objectId",
8623
+ "description": "Record id from objects.list, objects.search or objects.create for this objectType."
8624
+ },
8625
+ {
8626
+ "name": "toObjectType",
8627
+ "sdkName": "toObjectType",
8628
+ "description": "Destination object type from schemas.list; use the type of the record being linked."
8629
+ },
8630
+ {
8631
+ "name": "toObjectId",
8632
+ "sdkName": "toObjectId",
8633
+ "description": "Destination record identifier from objects.list or objects.search for toObjectType."
8634
+ }
8635
+ ],
8636
+ "query": [],
8637
+ "body": {
8638
+ "required": true,
8639
+ "fields": []
8640
+ }
8641
+ },
8642
+ {
8643
+ "resource": "crm.pipelines",
8644
+ "method": "list",
8645
+ "summary": "List pipelines",
8646
+ "description": "Discover pipelines and stage ids for records of one object type from schemas.list. Reuse pipeline and stage ids in record property updates or lead qualification. Stage rules are string values in stage.metadata: praxis_category is open (active), won (successful) or lost (unsuccessful); praxis_terminal is \"true\" (no further transition) or \"false\" (transitions allowed); praxis_allowed_next is a JSON-encoded array string of permitted next stage ids, with the string \"null\" meaning unrestricted; praxis_required is a JSON-encoded array string of property names (\"[]\" means none) that must be non-empty on entry (boolean properties must be \"true\"). Rule violations return HTTP 400 VALIDATION_ERROR; errors[0].context.properties lists missing required property names. Correct those values or choose an allowed stage before retrying. Example metadata: {\"praxis_category\":\"open\",\"praxis_terminal\":\"false\",\"praxis_allowed_next\":\"[\\\"proposal\\\",\\\"lost\\\"]\",\"praxis_required\":\"[\\\"budget\\\",\\\"decision_maker\\\"]\"}.",
8647
+ "http": "GET",
8648
+ "path": "/crm/v1/pipelines/{objectType}",
8649
+ "streaming": "no",
8650
+ "pagination": false,
8651
+ "pathParams": [
8652
+ {
8653
+ "name": "objectType",
8654
+ "sdkName": "objectType",
8655
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8656
+ }
8657
+ ],
8658
+ "query": []
8659
+ },
8660
+ {
8661
+ "resource": "crm.pipelines",
8662
+ "method": "create",
8663
+ "summary": "Create pipeline",
8664
+ "description": "Create a pipeline with its ordered stages for an object type from schemas.list. Provide a display label, displayOrder and initial stages, then use the returned ids when assigning records. Stage rules are string values in stage.metadata: praxis_category is open (active), won (successful) or lost (unsuccessful); praxis_terminal is \"true\" (no further transition) or \"false\" (transitions allowed); praxis_allowed_next is a JSON-encoded array string of permitted next stage ids, with the string \"null\" meaning unrestricted; praxis_required is a JSON-encoded array string of property names (\"[]\" means none) that must be non-empty on entry (boolean properties must be \"true\"). Rule violations return HTTP 400 VALIDATION_ERROR; errors[0].context.properties lists missing required property names. Correct those values or choose an allowed stage before retrying. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations. Example metadata: {\"praxis_category\":\"open\",\"praxis_terminal\":\"false\",\"praxis_allowed_next\":\"[\\\"proposal\\\",\\\"lost\\\"]\",\"praxis_required\":\"[\\\"budget\\\",\\\"decision_maker\\\"]\"}.",
8665
+ "http": "POST",
8666
+ "path": "/crm/v1/pipelines/{objectType}",
8667
+ "streaming": "no",
8668
+ "pagination": false,
8669
+ "pathParams": [
8670
+ {
8671
+ "name": "objectType",
8672
+ "sdkName": "objectType",
8673
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8674
+ }
8675
+ ],
8676
+ "query": [],
8677
+ "body": {
8678
+ "required": true,
8679
+ "fields": [
8680
+ {
8681
+ "name": "displayOrder",
8682
+ "type": "integer",
8683
+ "required": true,
8684
+ "description": "An integer indicating the order in which the pipeline appears relative to other pipelines."
8685
+ },
8686
+ {
8687
+ "name": "label",
8688
+ "type": "string",
8689
+ "required": true,
8690
+ "description": "A string representing the name or title of the pipeline."
8691
+ },
8692
+ {
8693
+ "name": "pipelineId",
8694
+ "type": "string",
8695
+ "required": false,
8696
+ "description": "A string that uniquely identifies the pipeline. This property is optional when creating a new pipeline."
8697
+ },
8698
+ {
8699
+ "name": "stages",
8700
+ "type": "array",
8701
+ "itemType": "object",
8702
+ "required": true,
8703
+ "description": "An array of PipelineStageInput objects, each representing a stage within the pipeline."
8704
+ }
8705
+ ]
8706
+ }
8707
+ },
8708
+ {
8709
+ "resource": "crm.pipelines",
8710
+ "method": "archive",
8711
+ "summary": "Archive pipeline",
8712
+ "description": "Archive a pipeline selected from pipelines.list when records no longer depend on it. Check current records and stage usage first; resolve references reported by validation before retrying. Stage rules are string values in stage.metadata: praxis_category is open (active), won (successful) or lost (unsuccessful); praxis_terminal is \"true\" (no further transition) or \"false\" (transitions allowed); praxis_allowed_next is a JSON-encoded array string of permitted next stage ids, with the string \"null\" meaning unrestricted; praxis_required is a JSON-encoded array string of property names (\"[]\" means none) that must be non-empty on entry (boolean properties must be \"true\"). Rule violations return HTTP 400 VALIDATION_ERROR; errors[0].context.properties lists missing required property names. Correct those values or choose an allowed stage before retrying. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations. Unlike HubSpot, this own-face archive returns HTTP 200 with a JSON refs body instead of HTTP 204. Example metadata: {\"praxis_category\":\"open\",\"praxis_terminal\":\"false\",\"praxis_allowed_next\":\"[\\\"proposal\\\",\\\"lost\\\"]\",\"praxis_required\":\"[\\\"budget\\\",\\\"decision_maker\\\"]\"}.",
8713
+ "http": "DELETE",
8714
+ "path": "/crm/v1/pipelines/{objectType}/{pipelineId}",
8715
+ "streaming": "no",
8716
+ "pagination": false,
8717
+ "pathParams": [
8718
+ {
8719
+ "name": "objectType",
8720
+ "sdkName": "objectType",
8721
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8722
+ },
8723
+ {
8724
+ "name": "pipelineId",
8725
+ "sdkName": "pipelineId",
8726
+ "description": "Pipeline identifier from pipelines.list for this objectType."
8727
+ }
8728
+ ],
8729
+ "query": [
8730
+ {
8731
+ "name": "validateDealStageUsagesBeforeDelete",
8732
+ "type": "boolean",
8733
+ "required": false,
8734
+ "description": "A boolean indicating whether to validate deal stage usages before deleting the pipeline. Defaults to true."
8735
+ },
8736
+ {
8737
+ "name": "validateReferencesBeforeDelete",
8738
+ "type": "boolean",
8739
+ "required": false,
8740
+ "description": "A boolean indicating whether to validate references before deleting the pipeline. Defaults to true."
8741
+ }
8742
+ ]
8743
+ },
8744
+ {
8745
+ "resource": "crm.pipelines",
8746
+ "method": "retrieve",
8747
+ "summary": "Retrieve pipeline",
8748
+ "description": "Inspect the stage ids and metadata of a pipeline before moving a record or editing its workflow. Obtain pipelineId from pipelines.list and use the returned stages array to select a destination. Stage rules are string values in stage.metadata: praxis_category is open (active), won (successful) or lost (unsuccessful); praxis_terminal is \"true\" (no further transition) or \"false\" (transitions allowed); praxis_allowed_next is a JSON-encoded array string of permitted next stage ids, with the string \"null\" meaning unrestricted; praxis_required is a JSON-encoded array string of property names (\"[]\" means none) that must be non-empty on entry (boolean properties must be \"true\"). Rule violations return HTTP 400 VALIDATION_ERROR; errors[0].context.properties lists missing required property names. Correct those values or choose an allowed stage before retrying. Example metadata: {\"praxis_category\":\"open\",\"praxis_terminal\":\"false\",\"praxis_allowed_next\":\"[\\\"proposal\\\",\\\"lost\\\"]\",\"praxis_required\":\"[\\\"budget\\\",\\\"decision_maker\\\"]\"}.",
8749
+ "http": "GET",
8750
+ "path": "/crm/v1/pipelines/{objectType}/{pipelineId}",
8751
+ "streaming": "no",
8752
+ "pagination": false,
8753
+ "pathParams": [
8754
+ {
8755
+ "name": "objectType",
8756
+ "sdkName": "objectType",
8757
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8758
+ },
8759
+ {
8760
+ "name": "pipelineId",
8761
+ "sdkName": "pipelineId",
8762
+ "description": "Pipeline identifier from pipelines.list for this objectType."
8763
+ }
8764
+ ],
8765
+ "query": []
8766
+ },
8767
+ {
8768
+ "resource": "crm.pipelines",
8769
+ "method": "update",
8770
+ "summary": "Update pipeline",
8771
+ "description": "Change editable pipeline settings selected by pipelineId from pipelines.list. Omit settings that should remain unchanged and inspect current stages with pipelines.retrieve before modifying the workflow. Stage rules are string values in stage.metadata: praxis_category is open (active), won (successful) or lost (unsuccessful); praxis_terminal is \"true\" (no further transition) or \"false\" (transitions allowed); praxis_allowed_next is a JSON-encoded array string of permitted next stage ids, with the string \"null\" meaning unrestricted; praxis_required is a JSON-encoded array string of property names (\"[]\" means none) that must be non-empty on entry (boolean properties must be \"true\"). Rule violations return HTTP 400 VALIDATION_ERROR; errors[0].context.properties lists missing required property names. Correct those values or choose an allowed stage before retrying. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations. Example metadata: {\"praxis_category\":\"open\",\"praxis_terminal\":\"false\",\"praxis_allowed_next\":\"[\\\"proposal\\\",\\\"lost\\\"]\",\"praxis_required\":\"[\\\"budget\\\",\\\"decision_maker\\\"]\"}.",
8772
+ "http": "PATCH",
8773
+ "path": "/crm/v1/pipelines/{objectType}/{pipelineId}",
8774
+ "streaming": "no",
8775
+ "pagination": false,
8776
+ "pathParams": [
8777
+ {
8778
+ "name": "objectType",
8779
+ "sdkName": "objectType",
8780
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8781
+ },
8782
+ {
8783
+ "name": "pipelineId",
8784
+ "sdkName": "pipelineId",
8785
+ "description": "Pipeline identifier from pipelines.list for this objectType."
8786
+ }
8787
+ ],
8788
+ "query": [
8789
+ {
8790
+ "name": "validateDealStageUsagesBeforeDelete",
8791
+ "type": "boolean",
8792
+ "required": false,
8793
+ "description": "A boolean indicating whether to validate deal stage usages before deleting. Defaults to true."
8794
+ },
8795
+ {
8796
+ "name": "validateReferencesBeforeDelete",
8797
+ "type": "boolean",
8798
+ "required": false,
8799
+ "description": "A boolean indicating whether to validate references before deleting. Defaults to true."
8800
+ }
8801
+ ],
8802
+ "body": {
8803
+ "required": true,
8804
+ "fields": [
8805
+ {
8806
+ "name": "archived",
8807
+ "type": "boolean",
8808
+ "required": false,
8809
+ "description": "A boolean value that indicates whether the pipeline is archived."
8810
+ },
8811
+ {
8812
+ "name": "displayOrder",
8813
+ "type": "integer",
8814
+ "required": false,
8815
+ "description": "An integer indicating the position of the pipeline in a list, which determines its display order."
8816
+ },
8817
+ {
8818
+ "name": "label",
8819
+ "type": "string",
8820
+ "required": false,
8821
+ "description": "The name of the pipeline, represented as a string."
8822
+ }
8823
+ ]
8824
+ }
8825
+ },
8826
+ {
8827
+ "resource": "crm.pipelines.stages",
8828
+ "method": "create",
8829
+ "summary": "Create pipeline stage",
8830
+ "description": "Add an ordered stage to a pipeline from pipelines.list. Provide its display label, displayOrder and metadata; save the returned stage id for record updates. Stage rules are string values in stage.metadata: praxis_category is open (active), won (successful) or lost (unsuccessful); praxis_terminal is \"true\" (no further transition) or \"false\" (transitions allowed); praxis_allowed_next is a JSON-encoded array string of permitted next stage ids, with the string \"null\" meaning unrestricted; praxis_required is a JSON-encoded array string of property names (\"[]\" means none) that must be non-empty on entry (boolean properties must be \"true\"). Rule violations return HTTP 400 VALIDATION_ERROR; errors[0].context.properties lists missing required property names. Correct those values or choose an allowed stage before retrying. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations. Example metadata: {\"praxis_category\":\"open\",\"praxis_terminal\":\"false\",\"praxis_allowed_next\":\"[\\\"proposal\\\",\\\"lost\\\"]\",\"praxis_required\":\"[\\\"budget\\\",\\\"decision_maker\\\"]\"}.",
8831
+ "http": "POST",
8832
+ "path": "/crm/v1/pipelines/{objectType}/{pipelineId}/stages",
8833
+ "streaming": "no",
8834
+ "pagination": false,
8835
+ "pathParams": [
8836
+ {
8837
+ "name": "objectType",
8838
+ "sdkName": "objectType",
8839
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8840
+ },
8841
+ {
8842
+ "name": "pipelineId",
8843
+ "sdkName": "pipelineId",
8844
+ "description": "Pipeline identifier from pipelines.list for this objectType."
8845
+ }
8846
+ ],
8847
+ "query": [],
8848
+ "body": {
8849
+ "required": true,
8850
+ "fields": [
8851
+ {
8852
+ "name": "displayOrder",
8853
+ "type": "integer",
8854
+ "required": true,
8855
+ "description": "An integer indicating the position of this stage within the pipeline. Lower numbers indicate earlier stages."
8856
+ },
8857
+ {
8858
+ "name": "label",
8859
+ "type": "string",
8860
+ "required": true,
8861
+ "description": "The name of the pipeline stage. It is a string that provides a human-readable identifier for the stage."
8862
+ },
8863
+ {
8864
+ "name": "metadata",
8865
+ "type": "object",
8866
+ "required": true,
8867
+ "description": "String-valued stage settings, including transition and entry requirements. Stage rules are string values in stage.metadata: praxis_category is open (active), won (successful) or lost (unsuccessful); praxis_terminal is \"true\" (no further transition) or \"false\" (transitions allowed); praxis_allowed_next is a JSON-encoded array string of permitted next stage ids, with the string \"null\" meaning unrestricted; praxis_required is a JSON-encoded array string of property names (\"[]\" means none) that must be non-empty on entry (boolean properties must be \"true\"). Rule violations return HTTP 400 VALIDATION_ERROR; errors[0].context.properties lists missing required property names. Correct those values or choose an allowed stage before retrying."
8868
+ },
8869
+ {
8870
+ "name": "stageId",
8871
+ "type": "string",
8872
+ "required": false,
8873
+ "description": "A string that uniquely identifies the stage within the pipeline."
8874
+ }
8875
+ ]
8876
+ }
8877
+ },
8878
+ {
8879
+ "resource": "crm.pipelines.stages",
8880
+ "method": "archive",
8881
+ "summary": "Archive pipeline stage",
8882
+ "description": "Archive a stage selected from pipelines.retrieve after checking record usage. A stage that still has records cannot be archived without resolving their assignment; move those records to an allowed stage first. Stage rules are string values in stage.metadata: praxis_category is open (active), won (successful) or lost (unsuccessful); praxis_terminal is \"true\" (no further transition) or \"false\" (transitions allowed); praxis_allowed_next is a JSON-encoded array string of permitted next stage ids, with the string \"null\" meaning unrestricted; praxis_required is a JSON-encoded array string of property names (\"[]\" means none) that must be non-empty on entry (boolean properties must be \"true\"). Rule violations return HTTP 400 VALIDATION_ERROR; errors[0].context.properties lists missing required property names. Correct those values or choose an allowed stage before retrying. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations. Unlike HubSpot, this own-face archive returns HTTP 200 with a JSON refs body instead of HTTP 204. Example metadata: {\"praxis_category\":\"open\",\"praxis_terminal\":\"false\",\"praxis_allowed_next\":\"[\\\"proposal\\\",\\\"lost\\\"]\",\"praxis_required\":\"[\\\"budget\\\",\\\"decision_maker\\\"]\"}.",
8883
+ "http": "DELETE",
8884
+ "path": "/crm/v1/pipelines/{objectType}/{pipelineId}/stages/{stageId}",
8885
+ "streaming": "no",
8886
+ "pagination": false,
8887
+ "pathParams": [
8888
+ {
8889
+ "name": "objectType",
8890
+ "sdkName": "objectType",
8891
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8892
+ },
8893
+ {
8894
+ "name": "pipelineId",
8895
+ "sdkName": "pipelineId",
8896
+ "description": "Pipeline identifier from pipelines.list for this objectType."
8897
+ },
8898
+ {
8899
+ "name": "stageId",
8900
+ "sdkName": "stageId",
8901
+ "description": "Stage identifier from the stages array returned by pipelines.retrieve for this pipeline."
8902
+ }
8903
+ ],
8904
+ "query": [
8905
+ {
8906
+ "name": "validateReferencesBeforeDelete",
8907
+ "type": "boolean",
8908
+ "required": false,
8909
+ "description": "A boolean flag indicating whether to validate references before deleting the stage. Defaults to true."
8910
+ }
8911
+ ]
8912
+ },
8913
+ {
8914
+ "resource": "crm.pipelines.stages",
8915
+ "method": "update",
8916
+ "summary": "Update pipeline stage",
8917
+ "description": "Change the label, order or metadata of a stage selected from pipelines.retrieve. Existing records must satisfy entry rules when subsequently moved; omitted settings retain their values. Stage rules are string values in stage.metadata: praxis_category is open (active), won (successful) or lost (unsuccessful); praxis_terminal is \"true\" (no further transition) or \"false\" (transitions allowed); praxis_allowed_next is a JSON-encoded array string of permitted next stage ids, with the string \"null\" meaning unrestricted; praxis_required is a JSON-encoded array string of property names (\"[]\" means none) that must be non-empty on entry (boolean properties must be \"true\"). Rule violations return HTTP 400 VALIDATION_ERROR; errors[0].context.properties lists missing required property names. Correct those values or choose an allowed stage before retrying. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations. Example metadata: {\"praxis_category\":\"open\",\"praxis_terminal\":\"false\",\"praxis_allowed_next\":\"[\\\"proposal\\\",\\\"lost\\\"]\",\"praxis_required\":\"[\\\"budget\\\",\\\"decision_maker\\\"]\"}.",
8918
+ "http": "PATCH",
8919
+ "path": "/crm/v1/pipelines/{objectType}/{pipelineId}/stages/{stageId}",
8920
+ "streaming": "no",
8921
+ "pagination": false,
8922
+ "pathParams": [
8923
+ {
8924
+ "name": "objectType",
8925
+ "sdkName": "objectType",
8926
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8927
+ },
8928
+ {
8929
+ "name": "pipelineId",
8930
+ "sdkName": "pipelineId",
8931
+ "description": "Pipeline identifier from pipelines.list for this objectType."
8932
+ },
8933
+ {
8934
+ "name": "stageId",
8935
+ "sdkName": "stageId",
8936
+ "description": "Stage identifier from the stages array returned by pipelines.retrieve for this pipeline."
8937
+ }
8938
+ ],
8939
+ "query": [],
8940
+ "body": {
8941
+ "required": true,
8942
+ "fields": [
8943
+ {
8944
+ "name": "archived",
8945
+ "type": "boolean",
8946
+ "required": false,
8947
+ "description": "A boolean indicating whether the pipeline stage is archived."
8948
+ },
8949
+ {
8950
+ "name": "displayOrder",
8951
+ "type": "integer",
8952
+ "required": false,
8953
+ "description": "An integer specifying the order in which the stage appears relative to other stages."
8954
+ },
8955
+ {
8956
+ "name": "label",
8957
+ "type": "string",
8958
+ "required": false,
8959
+ "description": "A string representing the name or title of the pipeline stage."
8960
+ },
8961
+ {
8962
+ "name": "metadata",
8963
+ "type": "object",
8964
+ "required": true,
8965
+ "description": "String-valued stage settings, including transition and entry requirements. Stage rules are string values in stage.metadata: praxis_category is open (active), won (successful) or lost (unsuccessful); praxis_terminal is \"true\" (no further transition) or \"false\" (transitions allowed); praxis_allowed_next is a JSON-encoded array string of permitted next stage ids, with the string \"null\" meaning unrestricted; praxis_required is a JSON-encoded array string of property names (\"[]\" means none) that must be non-empty on entry (boolean properties must be \"true\"). Rule violations return HTTP 400 VALIDATION_ERROR; errors[0].context.properties lists missing required property names. Correct those values or choose an allowed stage before retrying."
8966
+ }
8967
+ ]
8968
+ }
8969
+ },
8970
+ {
8971
+ "resource": "crm.properties",
8972
+ "method": "list",
8973
+ "summary": "List properties",
8974
+ "description": "Inspect the property definitions available for an object type before writing or filtering records. Obtain objectType from schemas.list; reuse each immutable name in record properties and filters. archived defaults to false.",
8975
+ "http": "GET",
8976
+ "path": "/crm/v1/properties/{objectType}",
8977
+ "streaming": "no",
8978
+ "pagination": false,
8979
+ "pathParams": [
8980
+ {
8981
+ "name": "objectType",
8982
+ "sdkName": "objectType",
8983
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
8984
+ }
8985
+ ],
8986
+ "query": [
8987
+ {
8988
+ "name": "archived",
8989
+ "type": "boolean",
8990
+ "required": false,
8991
+ "description": "Whether to return only results that have been archived."
8992
+ },
8993
+ {
8994
+ "name": "dataSensitivity",
8995
+ "type": "string",
8996
+ "enum": [
8997
+ "highly_sensitive",
8998
+ "non_sensitive",
8999
+ "sensitive"
9000
+ ],
9001
+ "required": false,
9002
+ "description": "Filter properties based on data sensitivity level. Valid values are 'non_sensitive', 'sensitive', and 'highly_sensitive'. Defaults to 'non_sensitive'."
9003
+ },
9004
+ {
9005
+ "name": "locale",
9006
+ "type": "string",
9007
+ "required": false,
9008
+ "description": "Specify the locale to retrieve properties in a particular language or regional format."
9009
+ },
9010
+ {
9011
+ "name": "properties",
9012
+ "type": "string",
9013
+ "required": false,
9014
+ "description": "A comma-separated list of property names to include in the response."
9015
+ }
9016
+ ]
9017
+ },
9018
+ {
9019
+ "resource": "crm.properties",
9020
+ "method": "create",
9021
+ "summary": "Create property",
9022
+ "description": "Define a property before setting its values on records. Choose objectType from schemas.list and groupName from properties.groups.list; provide an immutable internal name, display label, type and fieldType. Enumeration properties require their valid options. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations.",
9023
+ "http": "POST",
9024
+ "path": "/crm/v1/properties/{objectType}",
9025
+ "streaming": "no",
9026
+ "pagination": false,
9027
+ "pathParams": [
9028
+ {
9029
+ "name": "objectType",
9030
+ "sdkName": "objectType",
9031
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
9032
+ }
9033
+ ],
9034
+ "query": [],
9035
+ "body": {
9036
+ "required": true,
9037
+ "fields": [
9038
+ {
9039
+ "name": "calculationFormula",
9040
+ "type": "string",
9041
+ "required": false,
9042
+ "description": "Represents a formula that is used to compute a calculated property."
9043
+ },
9044
+ {
9045
+ "name": "currencyPropertyName",
9046
+ "type": "string",
9047
+ "required": false,
9048
+ "description": "A string representing the name of the currency property."
9049
+ },
9050
+ {
9051
+ "name": "dataSensitivity",
9052
+ "type": "string",
9053
+ "enum": [
9054
+ "highly_sensitive",
9055
+ "non_sensitive",
9056
+ "sensitive"
9057
+ ],
9058
+ "required": false,
9059
+ "description": "Indicates the sensitivity level of the property, with options: highly_sensitive, non_sensitive, or sensitive."
9060
+ },
9061
+ {
9062
+ "name": "description",
9063
+ "type": "string",
9064
+ "required": false,
9065
+ "description": "A description of the property that will be shown as help text in CRM."
9066
+ },
9067
+ {
9068
+ "name": "displayOrder",
9069
+ "type": "integer",
9070
+ "required": false,
9071
+ "description": "Properties are displayed in order starting with the lowest positive integer value. Values of -1 will cause the property to be displayed after any positive values."
9072
+ },
9073
+ {
9074
+ "name": "externalOptions",
9075
+ "type": "boolean",
9076
+ "required": false,
9077
+ "description": "Applicable only for 'enumeration' type properties. Should be set to true in conjunction with a 'referencedObjectType' of 'OWNER'. Otherwise false."
9078
+ },
9079
+ {
9080
+ "name": "fieldType",
9081
+ "type": "string",
9082
+ "enum": [
9083
+ "booleancheckbox",
9084
+ "calculation_equation",
9085
+ "checkbox",
9086
+ "date",
9087
+ "file",
9088
+ "html",
9089
+ "number",
9090
+ "phonenumber",
9091
+ "radio",
9092
+ "select",
9093
+ "text",
9094
+ "textarea"
9095
+ ],
9096
+ "required": true,
9097
+ "description": "Controls how the property appears in CRM."
9098
+ },
9099
+ {
9100
+ "name": "formField",
9101
+ "type": "boolean",
9102
+ "required": false,
9103
+ "description": "Whether or not the property can be used in a CRM form."
9104
+ },
9105
+ {
9106
+ "name": "groupName",
9107
+ "type": "string",
9108
+ "required": true,
9109
+ "description": "The name of the property group the property belongs to."
9110
+ },
9111
+ {
9112
+ "name": "hasUniqueValue",
9113
+ "type": "boolean",
9114
+ "required": false,
9115
+ "description": "Whether or not the property's value must be unique. Once set, this can't be changed."
9116
+ },
9117
+ {
9118
+ "name": "hidden",
9119
+ "type": "boolean",
9120
+ "required": false,
9121
+ "description": "If true, the property won't be visible and can't be used in CRM."
9122
+ },
9123
+ {
9124
+ "name": "label",
9125
+ "type": "string",
9126
+ "required": true,
9127
+ "description": "A human-readable property label that will be shown in CRM."
9128
+ },
9129
+ {
9130
+ "name": "name",
9131
+ "type": "string",
9132
+ "required": true,
9133
+ "description": "The internal property name, which must be used when referencing the property via the API."
9134
+ },
9135
+ {
9136
+ "name": "numberDisplayHint",
9137
+ "type": "string",
9138
+ "enum": [
9139
+ "currency",
9140
+ "duration",
9141
+ "formatted",
9142
+ "percentage",
9143
+ "probability",
9144
+ "unformatted"
9145
+ ],
9146
+ "required": false,
9147
+ "description": "A string providing a hint on how to display numbers. Valid values include 'unformatted', 'formatted', 'currency', 'percentage', 'duration', 'probability'."
9148
+ },
9149
+ {
9150
+ "name": "options",
9151
+ "type": "array",
9152
+ "itemType": "object",
9153
+ "required": false,
9154
+ "description": "A list of valid options for the property. This field is required for enumerated properties."
9155
+ },
9156
+ {
9157
+ "name": "referencedObjectType",
9158
+ "type": "string",
9159
+ "required": false,
9160
+ "description": "Should be set to 'OWNER' when 'externalOptions' is true, which causes the property to dynamically pull option values from the current CRM users."
9161
+ },
9162
+ {
9163
+ "name": "showCurrencySymbol",
9164
+ "type": "boolean",
9165
+ "required": false,
9166
+ "description": "A boolean indicating whether to show the currency symbol for currency fields."
9167
+ },
9168
+ {
9169
+ "name": "textDisplayHint",
9170
+ "type": "string",
9171
+ "enum": [
9172
+ "domain_name",
9173
+ "email",
9174
+ "ip_address",
9175
+ "multi_line",
9176
+ "phone_number",
9177
+ "physical_address",
9178
+ "postal_code",
9179
+ "unformatted_single_line"
9180
+ ],
9181
+ "required": false,
9182
+ "description": "A string providing a hint on how to display text. Valid values include 'unformatted_single_line', 'multi_line', 'email', 'phone_number', 'domain_name', 'ip_address', 'physical_address', 'postal_code'."
9183
+ },
9184
+ {
9185
+ "name": "type",
9186
+ "type": "string",
9187
+ "enum": [
9188
+ "bool",
9189
+ "date",
9190
+ "datetime",
9191
+ "enumeration",
9192
+ "number",
9193
+ "phone_number",
9194
+ "string"
9195
+ ],
9196
+ "required": true,
9197
+ "description": "The data type of the property."
9198
+ }
9199
+ ]
9200
+ }
9201
+ },
9202
+ {
9203
+ "resource": "crm.properties.groups",
9204
+ "method": "list",
9205
+ "summary": "List property groups",
9206
+ "description": "Discover property groups for an object type before creating or organizing property definitions. Obtain objectType from schemas.list and reuse a group name as groupName in properties.create or properties.update.",
9207
+ "http": "GET",
9208
+ "path": "/crm/v1/properties/{objectType}/groups",
9209
+ "streaming": "no",
9210
+ "pagination": false,
9211
+ "pathParams": [
9212
+ {
9213
+ "name": "objectType",
9214
+ "sdkName": "objectType",
9215
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
9216
+ }
9217
+ ],
9218
+ "query": [
9219
+ {
9220
+ "name": "locale",
9221
+ "type": "string",
9222
+ "required": false,
9223
+ "description": "The language locale to use for property group labels. This can help in displaying labels in the preferred language."
9224
+ }
9225
+ ]
9226
+ },
9227
+ {
9228
+ "resource": "crm.properties.groups",
9229
+ "method": "create",
9230
+ "summary": "Create property group",
9231
+ "description": "Create a named group for related property definitions of one object type. Obtain objectType from schemas.list; choose a unique internal name and display label, then reuse the returned name as groupName when creating properties. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations.",
9232
+ "http": "POST",
9233
+ "path": "/crm/v1/properties/{objectType}/groups",
9234
+ "streaming": "no",
9235
+ "pagination": false,
9236
+ "pathParams": [
9237
+ {
9238
+ "name": "objectType",
9239
+ "sdkName": "objectType",
9240
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
9241
+ }
9242
+ ],
9243
+ "query": [],
9244
+ "body": {
9245
+ "required": true,
9246
+ "fields": [
9247
+ {
9248
+ "name": "displayOrder",
9249
+ "type": "integer",
9250
+ "required": false,
9251
+ "description": "Property groups are displayed in order starting with the lowest positive integer value. Values of -1 will cause the property group to be displayed after any positive values."
9252
+ },
9253
+ {
9254
+ "name": "label",
9255
+ "type": "string",
9256
+ "required": true,
9257
+ "description": "A human-readable label that will be shown in CRM."
9258
+ },
9259
+ {
9260
+ "name": "name",
9261
+ "type": "string",
9262
+ "required": true,
9263
+ "description": "The internal property group name, which must be used when referencing the property group via the API."
9264
+ }
9265
+ ]
9266
+ }
9267
+ },
9268
+ {
9269
+ "resource": "crm.properties",
9270
+ "method": "archive",
9271
+ "summary": "Archive property",
9272
+ "description": "Archive a property definition selected by internal name from properties.list. Confirm that record entry and search flows no longer depend on it; archived definitions are excluded from normal property lists. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations. Unlike HubSpot, this own-face archive returns HTTP 200 with a JSON refs body instead of HTTP 204.",
9273
+ "http": "DELETE",
9274
+ "path": "/crm/v1/properties/{objectType}/{propertyName}",
9275
+ "streaming": "no",
9276
+ "pagination": false,
9277
+ "pathParams": [
9278
+ {
9279
+ "name": "objectType",
9280
+ "sdkName": "objectType",
9281
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
9282
+ },
9283
+ {
9284
+ "name": "propertyName",
9285
+ "sdkName": "propertyName",
9286
+ "description": "Immutable internal property name from properties.list; do not pass the display label."
9287
+ }
9288
+ ],
9289
+ "query": []
9290
+ },
9291
+ {
9292
+ "resource": "crm.properties",
9293
+ "method": "retrieve",
9294
+ "summary": "Retrieve property",
9295
+ "description": "Inspect the type, options and modification restrictions of a property before changing its definition or record values. Obtain propertyName from properties.list; it is the immutable internal name rather than the label.",
9296
+ "http": "GET",
9297
+ "path": "/crm/v1/properties/{objectType}/{propertyName}",
9298
+ "streaming": "no",
9299
+ "pagination": false,
9300
+ "pathParams": [
9301
+ {
9302
+ "name": "objectType",
9303
+ "sdkName": "objectType",
9304
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
9305
+ },
9306
+ {
9307
+ "name": "propertyName",
9308
+ "sdkName": "propertyName",
9309
+ "description": "Immutable internal property name from properties.list; do not pass the display label."
9310
+ }
9311
+ ],
9312
+ "query": [
9313
+ {
9314
+ "name": "archived",
9315
+ "type": "boolean",
9316
+ "required": false,
9317
+ "description": "Whether to return only results that have been archived."
9318
+ },
9319
+ {
9320
+ "name": "dataSensitivity",
9321
+ "type": "string",
9322
+ "enum": [
9323
+ "highly_sensitive",
9324
+ "non_sensitive",
9325
+ "sensitive"
9326
+ ],
9327
+ "required": false,
9328
+ "description": "The level of data sensitivity to filter properties by. Valid values are 'non_sensitive', 'sensitive', and 'highly_sensitive'. Defaults to 'non_sensitive'."
9329
+ },
9330
+ {
9331
+ "name": "locale",
9332
+ "type": "string",
9333
+ "required": false,
9334
+ "description": "The locale to use for property labels and descriptions."
9335
+ },
9336
+ {
9337
+ "name": "properties",
9338
+ "type": "string",
9339
+ "required": false,
9340
+ "description": "A comma-separated list of property names to include in the response."
9341
+ }
9342
+ ]
9343
+ },
9344
+ {
9345
+ "resource": "crm.properties",
9346
+ "method": "update",
9347
+ "summary": "Update property",
9348
+ "description": "Change editable settings of a property selected from properties.list, such as its label, group or options. Preserve the immutable internal name; inspect modificationMetadata before editing system-managed definitions. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations.",
9349
+ "http": "PATCH",
9350
+ "path": "/crm/v1/properties/{objectType}/{propertyName}",
9351
+ "streaming": "no",
9352
+ "pagination": false,
9353
+ "pathParams": [
9354
+ {
9355
+ "name": "objectType",
9356
+ "sdkName": "objectType",
9357
+ "description": "Object type name from schemas.list, such as contacts, companies, deals or a custom p_<name>."
9358
+ },
9359
+ {
9360
+ "name": "propertyName",
9361
+ "sdkName": "propertyName",
9362
+ "description": "Immutable internal property name from properties.list; do not pass the display label."
9363
+ }
9364
+ ],
9365
+ "query": [],
9366
+ "body": {
9367
+ "required": true,
9368
+ "fields": [
9369
+ {
9370
+ "name": "calculationFormula",
9371
+ "type": "string",
9372
+ "required": false,
9373
+ "description": "Represents a formula that is used to compute a calculated property."
9374
+ },
9375
+ {
9376
+ "name": "currencyPropertyName",
9377
+ "type": "string",
9378
+ "required": false,
9379
+ "description": "A string specifying the name of the property that holds the currency information, applicable when showCurrencySymbol is true."
9380
+ },
9381
+ {
9382
+ "name": "description",
9383
+ "type": "string",
9384
+ "required": false,
9385
+ "description": "A description of the property that will be shown as help text in CRM."
9386
+ },
9387
+ {
9388
+ "name": "displayOrder",
9389
+ "type": "integer",
9390
+ "required": false,
9391
+ "description": "Properties are displayed in order starting with the lowest positive integer value. Values of -1 will cause the Property to be displayed after any positive values."
9392
+ },
9393
+ {
9394
+ "name": "fieldType",
9395
+ "type": "string",
9396
+ "enum": [
9397
+ "booleancheckbox",
9398
+ "calculation_equation",
9399
+ "checkbox",
9400
+ "date",
9401
+ "file",
9402
+ "html",
9403
+ "number",
9404
+ "phonenumber",
9405
+ "radio",
9406
+ "select",
9407
+ "text",
9408
+ "textarea"
9409
+ ],
9410
+ "required": false,
9411
+ "description": "Controls how the property appears in CRM."
9412
+ },
9413
+ {
9414
+ "name": "formField",
9415
+ "type": "boolean",
9416
+ "required": false,
9417
+ "description": "Whether or not the property can be used in a CRM form."
9418
+ },
9419
+ {
9420
+ "name": "groupName",
9421
+ "type": "string",
9422
+ "required": false,
9423
+ "description": "The name of the property group the property belongs to."
9424
+ },
9425
+ {
9426
+ "name": "hidden",
9427
+ "type": "boolean",
9428
+ "required": false,
9429
+ "description": "If true, the property won't be visible and can't be used in CRM."
9430
+ },
9431
+ {
9432
+ "name": "label",
9433
+ "type": "string",
9434
+ "required": false,
9435
+ "description": "A human-readable property label that will be shown in CRM."
9436
+ },
9437
+ {
9438
+ "name": "numberDisplayHint",
9439
+ "type": "string",
9440
+ "enum": [
9441
+ "currency",
9442
+ "duration",
9443
+ "formatted",
9444
+ "percentage",
9445
+ "probability",
9446
+ "unformatted"
9447
+ ],
9448
+ "required": false,
9449
+ "description": "A string providing a hint for displaying number values. Valid values include 'unformatted', 'formatted', 'currency', 'percentage', 'duration', and 'probability'."
9450
+ },
9451
+ {
9452
+ "name": "options",
9453
+ "type": "array",
9454
+ "itemType": "object",
9455
+ "required": false,
9456
+ "description": "A list of valid options for the property."
9457
+ },
9458
+ {
9459
+ "name": "showCurrencySymbol",
9460
+ "type": "boolean",
9461
+ "required": false,
9462
+ "description": "A boolean indicating whether to display a currency symbol for number fields formatted as currency."
9463
+ },
9464
+ {
9465
+ "name": "textDisplayHint",
9466
+ "type": "string",
9467
+ "enum": [
9468
+ "domain_name",
9469
+ "email",
9470
+ "ip_address",
9471
+ "multi_line",
9472
+ "phone_number",
9473
+ "physical_address",
9474
+ "postal_code",
9475
+ "unformatted_single_line"
9476
+ ],
9477
+ "required": false,
9478
+ "description": "A string providing a hint for displaying text values. Valid values include 'unformatted_single_line', 'multi_line', 'email', 'phone_number', 'domain_name', 'ip_address', 'physical_address', and 'postal_code'."
9479
+ },
9480
+ {
9481
+ "name": "type",
9482
+ "type": "string",
9483
+ "enum": [
9484
+ "bool",
9485
+ "date",
9486
+ "datetime",
9487
+ "enumeration",
9488
+ "number",
9489
+ "phone_number",
9490
+ "string"
9491
+ ],
9492
+ "required": false,
9493
+ "description": "The data type of the property."
9494
+ }
9495
+ ]
9496
+ }
9497
+ },
9498
+ {
9499
+ "resource": "crm.schemas",
9500
+ "method": "list",
9501
+ "summary": "List object schemas",
9502
+ "description": "Discover available object schemas, display labels, property definitions and association definitions. Reuse the object type identifier or name in record, property and pipeline operations. archived defaults to false; the include parameters control the definition and audit details returned.",
9503
+ "http": "GET",
9504
+ "path": "/crm/v1/schemas",
9505
+ "streaming": "no",
9506
+ "pagination": false,
9507
+ "pathParams": [],
9508
+ "query": [
9509
+ {
9510
+ "name": "archived",
9511
+ "type": "boolean",
9512
+ "required": false,
9513
+ "description": "Whether to return only results that have been archived."
9514
+ },
9515
+ {
9516
+ "name": "includeAssociationDefinitions",
9517
+ "type": "boolean",
9518
+ "required": false,
9519
+ "description": "Whether to include association definitions in the response. Defaults to true."
9520
+ },
9521
+ {
9522
+ "name": "includeAuditMetadata",
9523
+ "type": "boolean",
9524
+ "required": false,
9525
+ "description": "Whether to include audit metadata in the response. Defaults to true."
9526
+ },
9527
+ {
9528
+ "name": "includePropertyDefinitions",
9529
+ "type": "boolean",
9530
+ "required": false,
9531
+ "description": "Whether to include property definitions in the response. Defaults to true."
9532
+ }
9533
+ ]
9534
+ },
9535
+ {
9536
+ "resource": "crm.schemas",
9537
+ "method": "create",
9538
+ "summary": "Create object schema",
9539
+ "description": "Define a custom CRM object type before creating its records. Provide its immutable name, singular and plural labels, primaryDisplayProperty, properties and associated object types. Save the returned object type identifier for subsequent record and property operations. Writes return refs (ResourceRef[]) for entity cards and optional property changes in conversations.",
9540
+ "http": "POST",
9541
+ "path": "/crm/v1/schemas",
9542
+ "streaming": "no",
9543
+ "pagination": false,
9544
+ "pathParams": [],
9545
+ "query": [],
9546
+ "body": {
9547
+ "required": true,
9548
+ "fields": [
9549
+ {
9550
+ "name": "allowsSensitiveProperties",
9551
+ "type": "boolean",
9552
+ "required": true,
9553
+ "description": "Determines if the object type can include properties that are marked as sensitive."
9554
+ },
9555
+ {
9556
+ "name": "associatedObjects",
9557
+ "type": "array",
9558
+ "itemType": "string",
9559
+ "required": true,
9560
+ "description": "Associations defined for this object type."
9561
+ },
9562
+ {
9563
+ "name": "description",
9564
+ "type": "string",
9565
+ "required": false,
9566
+ "description": "A brief explanation of the object type."
9567
+ },
9568
+ {
9569
+ "name": "labels",
9570
+ "type": "object",
9571
+ "required": true
9572
+ },
9573
+ {
9574
+ "name": "name",
9575
+ "type": "string",
9576
+ "required": true,
9577
+ "description": "A unique name for this object. For internal use only."
9578
+ },
9579
+ {
9580
+ "name": "primaryDisplayProperty",
9581
+ "type": "string",
9582
+ "required": false,
9583
+ "description": "The name of the primary property for this object. This will be displayed as primary on the CRM record page for this object type."
9584
+ },
9585
+ {
9586
+ "name": "properties",
9587
+ "type": "array",
9588
+ "itemType": "object",
9589
+ "required": true,
9590
+ "description": "Properties defined for this object type."
9591
+ },
9592
+ {
9593
+ "name": "requiredProperties",
9594
+ "type": "array",
9595
+ "itemType": "string",
9596
+ "required": true,
9597
+ "description": "The names of properties that should be **required** when creating an object of this type."
9598
+ },
9599
+ {
9600
+ "name": "searchableProperties",
9601
+ "type": "array",
9602
+ "itemType": "string",
9603
+ "required": true,
9604
+ "description": "Names of properties that will be indexed for this object type in by CRM's product search."
9605
+ },
9606
+ {
9607
+ "name": "secondaryDisplayProperties",
9608
+ "type": "array",
9609
+ "itemType": "string",
9610
+ "required": true,
9611
+ "description": "The names of secondary properties for this object. These will be displayed as secondary on the CRM record page for this object type."
9612
+ },
9613
+ {
9614
+ "name": "shouldCreateSameObjectAssociation",
9615
+ "type": "boolean",
9616
+ "required": true,
9617
+ "description": "A boolean indicating whether associations should be created between objects of the same type."
9618
+ }
9619
+ ]
9620
+ }
9621
+ },
9622
+ {
9623
+ "resource": "cut.exports",
9624
+ "method": "retrieve",
9625
+ "summary": "Retrieve video export",
9626
+ "description": "Poll an export id returned by projects.exports.create or list to observe render progress. queued, fetching, rendering, stitching and saving are in progress; done provides asset in the target library, failed provides error, and canceled means the job stopped. Only done confirms a usable output asset.",
9627
+ "http": "GET",
9628
+ "path": "/cut/v1/exports/{export_id}",
9629
+ "streaming": "no",
9630
+ "pagination": false,
9631
+ "pathParams": [
9632
+ {
9633
+ "name": "export_id",
9634
+ "sdkName": "export_id",
9635
+ "description": "Export identifier returned by its create or list operation; use the id, not a display name."
9636
+ }
9637
+ ],
9638
+ "query": []
9639
+ },
9640
+ {
9641
+ "resource": "cut.exports",
9642
+ "method": "cancel",
9643
+ "summary": "Cancel video export",
9644
+ "description": "Request cancellation of an export obtained from projects.exports.create or list when its output is no longer needed. Read the returned job status and retrieve it to confirm the terminal outcome; do not interpret a cancellation request as successful rendering.",
9645
+ "http": "POST",
9646
+ "path": "/cut/v1/exports/{export_id}:cancel",
9647
+ "streaming": "no",
9648
+ "pagination": false,
9649
+ "pathParams": [
9650
+ {
9651
+ "name": "export_id",
9652
+ "sdkName": "export_id",
9653
+ "description": "Export identifier returned by its create or list operation; use the id, not a display name."
9654
+ }
9655
+ ],
9656
+ "query": []
9657
+ },
9658
+ {
9659
+ "resource": "cut.projects",
7536
9660
  "method": "list",
7537
9661
  "summary": "List projects",
7538
9662
  "description": "Discover projects owned by the API key organization and obtain project_id values. Results default to active projects ordered by updateTime descending; use filter state = \"deleted\" to find retained deleted projects for undelete. Continue with next_page_token as page_token until the token is absent.",
@@ -7899,7 +10023,7 @@ export const operations = [
7899
10023
  "resource": "cut.projects.frames",
7900
10024
  "method": "list",
7901
10025
  "summary": "Render preview frames",
7902
- "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.",
10026
+ "description": "Review the visual result at one or more project times without creating an export. Pass comma-separated seconds in at, such as 12,15.5; scale changes preview size and revision selects a committed project revision. Request at most eight times. Each returned url is an inline PNG data URL (data:image/png;base64,...), not a hosted HTTP image link. Decode its base64 payload to save the image. Codemode returns at most four images per call, so request at most four times when reviewing there.",
7903
10027
  "http": "GET",
7904
10028
  "path": "/cut/v1/projects/{project_id}/frames",
7905
10029
  "streaming": "no",
@@ -8114,7 +10238,7 @@ export const operations = [
8114
10238
  "resource": "cut.projects",
8115
10239
  "method": "execute",
8116
10240
  "summary": "Execute editing script",
8117
- "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```",
10241
+ "description": "Edit the current timeline atomically using synchronous JavaScript source. Read state or timeline first, then pass its revision as expected_revision to detect concurrent changes. Unlike Shotstack, execute applies script edits to a persistent project in one transaction. Provide script or a saved edit_id with literal edits, never both; failures roll back writes. A revision conflict while preparing the response may follow a committed edit: retrieve state before retrying. Minimal script after creating a project: `const t = AddTrack(\"video\"); Insert(t, {type: \"color\", color: \"#123456\", start: 0, length: 3}); Print(t);`\n\n### Script function reference\n\nFunctions are synchronous globals; do not import them. `project` is the current project ID. TrackId and ClipId are strings returned by AddTrack and Insert or read from GetTimeline. Reads see earlier writes in the same script.\n\n```ts\nGetTimeline(o?: { from?: number; to?: number; tracks?: TrackId[] }): TimelineView;\nGetItem(id: ClipId): ItemView;\nFindItems<T>(visit: (item: ItemView, ctx: { track: TrackView; index: number }) => T | undefined): T[];\nGetMedia(ref: MediaRef): MediaInfo;\nGetTranscript(ref: MediaRef, o?: { from?: number; to?: number }): Word[];\nGetAnalysis(ref: MediaRef, kind: AnalysisKind): Segment[];\nInsert(track: TrackId, item: ItemInit, o?: { ripple?: boolean }): ClipId;\nUpdate(id: ClipId, patch: ItemPatchView): void;\nDelete(id: ClipId, o?: { ripple?: boolean }): void;\nSplit(id: ClipId, at: number): ClipId;\nTrim(id: ClipId, edge: \"in\" | \"out\", delta: number, o?: { ripple?: boolean }): void;\nMove(id: ClipId, start: number, track?: TrackId): void;\nRippleDeleteRange(from: number, to: number, tracks?: TrackId[]): void;\nAddTrack(kind: \"video\" | \"audio\" | \"caption\", init?: { name?: string }, index?: number): TrackId;\nUpdateTrack(id: TrackId, patch: TrackPatch): void;\nDeleteTrack(id: TrackId): void;\nSetSettings(patch: Partial<ProjectSettingsView>): void;\nAddCaptionsFromTranscript(track: TrackId, source: ClipId, o?: { style?: Partial<CaptionStyle>; maxChars?: number }): ClipId[];\nSetMarker(at: number, label: string): string;\nPrint(...values: unknown[]): void;\nPreview(at: number[]): void;\n```\n\n| Functions | Behavior and arguments |\n| --- | --- |\n| GetTimeline, GetItem | Read compact item views: id, track, type, start, end, length, optional media, sourceIn/sourceOut, text and offline reason. GetTimeline returns duration and tracks (id, kind, name, index, locked, items); from/to and tracks narrow the read. |\n| FindItems | Visit items with their track and index; return undefined to omit an item, any other value to collect it. |\n| GetMedia | Read metadata for `{libraryId, assetId}` in a bound library: kind, dimensions, fps, hasAudio and durationUs when available. durationUs is microseconds. |\n| GetTranscript, GetAnalysis | Read available transcript words or silence/filler/scenes segments. Transcript filter from/to is seconds; returned word and segment from/to values are source microseconds (divide by 1,000,000 for editing). Words contain text and optional speaker/filler; segments may include label/confidence. Request analysis first if unavailable. |\n| Insert, Update, Delete | Insert returns the new clip ID; Update changes supplied fields; Delete removes the clip. Optional ripple on Insert/Delete closes or opens space on the track. |\n| Split, Trim, Move | Split at a timeline position and return the new right-hand clip ID. Trim changes the in or out edge by delta seconds. Move sets the timeline start and optionally a new track. |\n| RippleDeleteRange | Delete a timeline interval and close its gap on the specified tracks, or all unlocked tracks when omitted. |\n| AddTrack, UpdateTrack, DeleteTrack | Add video/audio/caption tracks; index selects layer order (0 is top). TrackPatch supports name, locked, hidden, muted, gainDb and style as appropriate to track kind. |\n| SetSettings | Supply any of width/height (pixels), fps (frames per second), background (color). |\n| AddCaptionsFromTranscript | Create captions from an audio/video clip's kept words. Optional maxChars is 1–1000, default 16; style updates the caption track. Returns caption IDs. |\n| SetMarker | Add a label at a timeline time and return its ID. |\n| Print, Preview | Print appends text to prints. Preview requests up to eight times total per execute and puts images in the result's frames. Each url is an inline PNG data URL, not an HTTP image link. Decode the base64 payload to save an image. Codemode returns at most four images per call; request at most four times there. |\n\n#### Insert fields (ItemInit)\n\nEvery item requires `type` and `start`. Times used for editing are seconds and snap to the project frame rate: start, length, sourceIn, fadeIn/fadeOut, transition length, keyframe at, reveal delay/stagger/duration. Keyframe and reveal times are relative to the clip start. Video/audio may omit length to use the remaining source duration; other types require length.\n\n| type | Required fields beyond type/start | Optional fields |\n| --- | --- | --- |\n| video | media | length, sourceIn, volumeDb, transform, fit, animate, transitionIn, transitionOut |\n| image | media, length | transform, fit, animate, transitionIn, transitionOut |\n| text | text, length | style, transform, reveal, animate, transitionIn, transitionOut |\n| color | color, length | transform, fill, animate, transitionIn, transitionOut |\n| shape | shape, length, width, height, fill | radius, stroke, transform, animate, transitionIn, transitionOut |\n| audio | media | length, sourceIn, volumeDb, fadeIn, fadeOut, transitionIn, transitionOut |\n| caption | text, length | — |\n\nVideo tracks accept video/image/text/color/shape; audio and caption tracks accept their corresponding type. Media is `{libraryId: string, assetId: string}` from a bound library. sourceIn defaults to 0, volumeDb to 0 dB, audio fades to 0 seconds. fit defaults to contain: contain fits the whole image, cover fills and crops, fill stretches, none keeps native dimensions.\n\n| Field | Value |\n| --- | --- |\n| transform | Partial `{x, y, scale, rotation, opacity, crop, blur}`. x/y are normalized canvas center coordinates (default 0.5); scale 1 is fitted size; rotation is degrees (default 0); opacity is 0–1 (default 1). crop is `{top,right,bottom,left}`. blur is 0–100 pixels at 1080-pixel frame height. |\n| style | Partial `{fontFamily, fontSize, fontWeight, color, stroke, background, align, maxWidth}`. fontFamily: Geist or Noto Sans SC (default); fontSize defaults to 48; fontWeight: 400 (default), 500 or 700; color defaults to #FFFFFF; align: left, center (default), right; maxWidth is a fraction of canvas width (default 0.9). stroke is `{color,width}`. Caption style additionally supports position (top/middle/bottom), margin (0–0.4 of canvas height), highlightColor and maxLines: 2. |\n| animate | An object keyed by x, y, scale, rotation, opacity or blur. Each value is an array of `{at: number, value: number, ease?: Ease}` sorted by at with distinct frame-snapped times. Values hold before the first and after the last keyframe, overriding the static transform. |\n| Ease | linear, in, out, inOut, `{bezier: [x1,y1,x2,y2]}` or `{spring: {stiffness, damping, mass?}}`. Easing shapes the segment arriving at that keyframe; springs may overshoot. |\n| reveal | `{by, delay?: number, stagger: number, duration: number, from: {y?, opacity?, scale?, blur?}, ease?: Ease}`. by selects char, word or line. Unit k starts at delay + k * stagger and takes duration seconds to reach its resting state; from.y is a fraction of font size. |\n| fill | A color string (#RRGGBB or #RRGGBBAA), `{linear: {angle, stops: [{at,color}, ...]}}` or `{radial: {stops: [{at,color}, ...]}}`. Stop positions are 0–1; angle is degrees, 0 left to right. On color clips, fill replaces color when supplied. |\n| shape, width, height, radius, stroke | shape is rect or ellipse. width/height are fractions of canvas width/height before scaling. radius rounds rect corners in pixels at 1080-pixel frame height. stroke is `{color: string, width: number}`. |\n| transitionIn, transitionOut | `{kind, length: number}` at the clip's beginning/end. length is seconds. fade changes opacity; dissolve blends; push_left/push_right move horizontally; wipe_left reveals horizontally. |\n\n#### Update fields (ItemPatchView)\n\nAll fields are optional; use only fields relevant to the item's type. Supported fields: start, length, sourceIn, volumeDb, transform, fit, text, style, color, fadeIn, fadeOut, animate, reveal, fill, stroke, shape, width, height, radius, transitionIn, transitionOut. Values and units match Insert. Set animate, reveal, fill, stroke, transitionIn or transitionOut to null to remove that effect; omitting a field preserves it. For example: `Update(id, {volumeDb: -12})` or `Update(id, {transitionIn: null})`.\n\n#### Script names versus HTTP response names\n\nUse camelCase inside scripts, including nested objects. HTTP request/response JSON outside script source uses snake_case. Map media.library_id → media.libraryId, media.asset_id → media.assetId, source_in → sourceIn, volume_db → volumeDb, fade_in/fade_out → fadeIn/fadeOut, transition_in/transition_out → transitionIn/transitionOut, font_family/font_size/font_weight/max_width → fontFamily/fontSize/fontWeight/maxWidth, gain_db → gainDb, highlight_color/max_lines → highlightColor/maxLines. Fields such as animate, reveal, fill, stroke, at and length retain their spelling. GetTimeline/GetItem already return camelCase compact views; the expanded retrieveTimeline HTTP response is not an Insert object.\n\nUnrecognized script fields fail with OPS_REJECTED and rejection code UNKNOWN_FIELD; snake_case mistakes suggest the corresponding camelCase name. The error message lists each rejection's #opIndex, code and reason. Correct the named fields and retry the saved edit; do not assume an ignored field applied an effect.\n",
8118
10242
  "http": "POST",
8119
10243
  "path": "/cut/v1/projects/{project_id}:execute",
8120
10244
  "streaming": "no",
@@ -9203,7 +11327,7 @@ export const operations = [
9203
11327
  "resource": "file.files",
9204
11328
  "method": "create",
9205
11329
  "summary": "Upload file",
9206
- "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.",
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, 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.",
9207
11331
  "http": "POST",
9208
11332
  "path": "/file/v1/files",
9209
11333
  "streaming": "no",
@@ -9225,10 +11349,11 @@ export const operations = [
9225
11349
  "type": "string",
9226
11350
  "enum": [
9227
11351
  "user_data",
11352
+ "assistants",
9228
11353
  "vision"
9229
11354
  ],
9230
11355
  "required": true,
9231
- "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."
11356
+ "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."
9232
11357
  },
9233
11358
  {
9234
11359
  "name": "expires_after",
@@ -9293,11 +11418,69 @@ export const operations = [
9293
11418
  ],
9294
11419
  "query": []
9295
11420
  },
11421
+ {
11422
+ "resource": "file.files.contentLinks",
11423
+ "method": "revoke",
11424
+ "summary": "Revoke a file content link",
11425
+ "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/>\"}.",
11426
+ "http": "POST",
11427
+ "path": "/file/v1/files/{file_id}/content_links:revoke",
11428
+ "streaming": "no",
11429
+ "pagination": false,
11430
+ "pathParams": [
11431
+ {
11432
+ "name": "file_id",
11433
+ "sdkName": "file_id",
11434
+ "description": "Tenant-owned file identifier returned by file creation or listing; the token must name this same file."
11435
+ }
11436
+ ],
11437
+ "query": [],
11438
+ "body": {
11439
+ "required": true,
11440
+ "fields": [
11441
+ {
11442
+ "name": "token",
11443
+ "type": "string",
11444
+ "required": true,
11445
+ "description": "Signed token taken from the /c/ path component of a previously issued file content URL, without the host or /c/ prefix."
11446
+ }
11447
+ ]
11448
+ }
11449
+ },
11450
+ {
11451
+ "resource": "file.files.contentUrl",
11452
+ "method": "create",
11453
+ "summary": "Create a download URL",
11454
+ "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}.",
11455
+ "http": "POST",
11456
+ "path": "/file/v1/files/{file_id}/content_url",
11457
+ "streaming": "no",
11458
+ "pagination": false,
11459
+ "pathParams": [
11460
+ {
11461
+ "name": "file_id",
11462
+ "sdkName": "file_id",
11463
+ "description": "Tenant-owned live file identifier from file creation or listing; the file must be active to issue a download URL."
11464
+ }
11465
+ ],
11466
+ "query": [],
11467
+ "body": {
11468
+ "required": false,
11469
+ "fields": [
11470
+ {
11471
+ "name": "ttl_seconds",
11472
+ "type": "integer",
11473
+ "required": false,
11474
+ "description": "Download link lifetime in seconds, from 1 through 604800; omitted means 900. This does not change the file's own expiry."
11475
+ }
11476
+ ]
11477
+ }
11478
+ },
9296
11479
  {
9297
11480
  "resource": "file.uploads",
9298
11481
  "method": "create",
9299
11482
  "summary": "Create an upload",
9300
- "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.",
11483
+ "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, assistants 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.",
9301
11484
  "http": "POST",
9302
11485
  "path": "/file/v1/uploads",
9303
11486
  "streaming": "no",
@@ -9330,10 +11513,11 @@ export const operations = [
9330
11513
  "type": "string",
9331
11514
  "enum": [
9332
11515
  "user_data",
11516
+ "assistants",
9333
11517
  "vision"
9334
11518
  ],
9335
11519
  "required": true,
9336
- "description": "Use user_data for conversation attachments, or vision for PNG, JPEG, GIF and WebP images."
11520
+ "description": "Use user_data for conversation attachments, assistants for assistant files, or vision for PNG, JPEG, GIF and WebP images."
9337
11521
  },
9338
11522
  {
9339
11523
  "name": "expires_after",
@@ -9350,6 +11534,64 @@ export const operations = [
9350
11534
  ]
9351
11535
  }
9352
11536
  },
11537
+ {
11538
+ "resource": "file.uploads",
11539
+ "method": "createSigned",
11540
+ "summary": "Create a one-time upload URL",
11541
+ "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\"}.",
11542
+ "http": "POST",
11543
+ "path": "/file/v1/uploads/signed",
11544
+ "streaming": "no",
11545
+ "pagination": false,
11546
+ "pathParams": [],
11547
+ "query": [],
11548
+ "body": {
11549
+ "required": true,
11550
+ "fields": [
11551
+ {
11552
+ "name": "filename",
11553
+ "type": "string",
11554
+ "required": true,
11555
+ "description": "Stored basename, 1–255 UTF-8 bytes without control characters or path separators."
11556
+ },
11557
+ {
11558
+ "name": "bytes",
11559
+ "type": "integer",
11560
+ "required": true,
11561
+ "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."
11562
+ },
11563
+ {
11564
+ "name": "content_type",
11565
+ "type": "string",
11566
+ "required": true,
11567
+ "description": "Declared MIME type, such as image/png. In single-PUT mode, send exactly this Content-Type or omit it. Stored file metadata is detected from the bytes in both modes."
11568
+ },
11569
+ {
11570
+ "name": "purpose",
11571
+ "type": "string",
11572
+ "enum": [
11573
+ "user_data",
11574
+ "assistants",
11575
+ "vision"
11576
+ ],
11577
+ "required": false,
11578
+ "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."
11579
+ },
11580
+ {
11581
+ "name": "expires_in",
11582
+ "type": "integer",
11583
+ "required": false,
11584
+ "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."
11585
+ },
11586
+ {
11587
+ "name": "part_size",
11588
+ "type": "integer",
11589
+ "required": false,
11590
+ "description": "Fixed multipart chunk size in bytes, from 5242880 through 64000000; defaults to 64000000. Used only above 104857600 total bytes. The final part contains the remaining bytes; single-PUT mode keeps its existing response."
11591
+ }
11592
+ ]
11593
+ }
11594
+ },
9353
11595
  {
9354
11596
  "resource": "file.uploads",
9355
11597
  "method": "cancel",
@@ -9496,7 +11738,7 @@ export const operations = [
9496
11738
  "resource": "knowledge.vectorStores",
9497
11739
  "method": "create",
9498
11740
  "summary": "Create knowledge base",
9499
- "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. Unlike OpenAI vector stores, each file is limited to 100000000 bytes and each account to 100 active/nondeleted stores. Minimal body: {\"name\":\"Refund policies\"}.",
11741
+ "description": "Create a knowledge base, optionally starting ingestion of uploaded file_ids in the same call; no separate attachment or batch is needed for those files. Use the returned id with vectorStores.files.retrieve to poll each attachment until completed, failed or cancelled; store status=completed alone does not mean every file succeeded. Each file accepts up to 52428800 bytes and 5000000 estimated tokens; each account holds up to 100 active/nondeleted stores. Minimal body: {\"name\":\"Refund policies\"}.",
9500
11742
  "http": "POST",
9501
11743
  "path": "/knowledge/v1/vector_stores",
9502
11744
  "streaming": "no",
@@ -9547,7 +11789,7 @@ export const operations = [
9547
11789
  "name": "models",
9548
11790
  "type": "object",
9549
11791
  "required": false,
9550
- "description": "Model roles to set. The model must exist in the model catalog and serve the role (embedding → openai.embeddings, rerank → cohere.rerank, query_rewrite → openai.chat.completions). The embedding model must output 1024-dimension vectors. Omitted roles stay unchanged; null restores all defaults. Unknown roles or empty IDs return 400 INVALID_PARAMS. The OpenAI-compatible API rejects this field with 400."
11792
+ "description": "Model roles to set. The model must exist in the model catalog and serve the role (embedding → openai.embeddings, rerank → cohere.rerank, query_rewrite → openai.chat.completions, ocr → mistral.ocr or pdf_input capability, vision → vision capability). The embedding model must output 1024-dimension vectors. Omitted roles stay unchanged; null restores all defaults. Unknown roles or empty IDs return 400 INVALID_PARAMS. The OpenAI-compatible API rejects this field with 400."
9551
11793
  }
9552
11794
  ]
9553
11795
  }
@@ -9651,7 +11893,7 @@ export const operations = [
9651
11893
  "name": "models",
9652
11894
  "type": "object",
9653
11895
  "required": false,
9654
- "description": "Model roles to set. The model must exist in the model catalog and serve the role (embedding → openai.embeddings, rerank → cohere.rerank, query_rewrite → openai.chat.completions). The embedding model must output 1024-dimension vectors. Omitted roles stay unchanged; null restores all defaults. Unknown roles or empty IDs return 400 INVALID_PARAMS. The OpenAI-compatible API rejects this field with 400."
11896
+ "description": "Model roles to set. The model must exist in the model catalog and serve the role (embedding → openai.embeddings, rerank → cohere.rerank, query_rewrite → openai.chat.completions, ocr → mistral.ocr or pdf_input capability, vision → vision capability). The embedding model must output 1024-dimension vectors. Omitted roles stay unchanged; null restores all defaults. Unknown roles or empty IDs return 400 INVALID_PARAMS. The OpenAI-compatible API rejects this field with 400."
9655
11897
  }
9656
11898
  ]
9657
11899
  }
@@ -9882,7 +12124,7 @@ export const operations = [
9882
12124
  "resource": "knowledge.vectorStores.files",
9883
12125
  "method": "create",
9884
12126
  "summary": "Add file",
9885
- "description": "Attach an uploaded File for asynchronous ingestion, then poll this attachment until status is completed, failed or cancelled before searching. Unlike OpenAI vector stores, the file limit is 100000000 bytes; 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.",
12127
+ "description": "Attach an uploaded File for asynchronous ingestion, then poll this attachment until status is completed, failed or cancelled before searching. Each file accepts up to 52428800 bytes and 5000000 estimated tokens; chunk sizes use estimated tokens rather than a model tokenizer. Text, Markdown, CSV, JSON, HTML, PDF, DOCX, PPTX, XLSX and PNG/JPEG/GIF/WebP images can be extracted; audio and video uploads are not knowledge documents. Images may yield generated descriptions rather than verbatim OCR. auto chunking resolves to static 800/400; explicit sizes are 100–4096 with overlap at most half the size. Each store holds at most 10000 attached files. Reattaching the same file returns its existing record without applying new attributes or chunking; inspect last_error after failure.",
9886
12128
  "http": "POST",
9887
12129
  "path": "/knowledge/v1/vector_stores/{vector_store_id}/files",
9888
12130
  "streaming": "no",
@@ -10359,6 +12601,13 @@ export const operations = [
10359
12601
  "body": {
10360
12602
  "required": true,
10361
12603
  "fields": [
12604
+ {
12605
+ "name": "hotwords",
12606
+ "type": "array",
12607
+ "itemType": "string",
12608
+ "required": false,
12609
+ "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."
12610
+ },
10362
12611
  {
10363
12612
  "name": "models",
10364
12613
  "type": "object",
@@ -10544,6 +12793,16 @@ export const operations = [
10544
12793
  ],
10545
12794
  "required": false,
10546
12795
  "description": "Upload category: image for images, video for video or audio, raw for unprocessed files, or auto to detect the category. Defaults to auto."
12796
+ },
12797
+ {
12798
+ "name": "type",
12799
+ "type": "string",
12800
+ "enum": [
12801
+ "upload",
12802
+ "authenticated"
12803
+ ],
12804
+ "required": false,
12805
+ "description": "Asset delivery mode: upload is public; authenticated requires a signed URL or delivery token for originals and derivatives. private is unsupported."
10547
12806
  }
10548
12807
  ]
10549
12808
  }
@@ -10572,7 +12831,7 @@ export const operations = [
10572
12831
  "name": "file_id",
10573
12832
  "type": "string",
10574
12833
  "required": true,
10575
- "description": "File ID to copy into this library; passed as the upload source instead of file bytes. This creates an independent public copy readable without authentication. Deleting the source File does not delete this asset; do not import confidential content."
12834
+ "description": "File ID to copy into this library instead of file bytes. This independent copy defaults to public delivery; set type=authenticated for private delivery. Deleting the source File does not delete this asset."
10576
12835
  },
10577
12836
  {
10578
12837
  "name": "public_id",
@@ -10657,6 +12916,16 @@ export const operations = [
10657
12916
  ],
10658
12917
  "required": false,
10659
12918
  "description": "Upload category: image for images, video for video or audio, raw for unprocessed files, or auto to detect the category. Defaults to auto."
12919
+ },
12920
+ {
12921
+ "name": "type",
12922
+ "type": "string",
12923
+ "enum": [
12924
+ "upload",
12925
+ "authenticated"
12926
+ ],
12927
+ "required": false,
12928
+ "description": "Asset delivery mode: upload is public; authenticated requires a signed URL or delivery token for originals and derivatives. private is unsupported."
10660
12929
  }
10661
12930
  ]
10662
12931
  }
@@ -10937,6 +13206,41 @@ export const operations = [
10937
13206
  ],
10938
13207
  "query": []
10939
13208
  },
13209
+ {
13210
+ "resource": "media.libraries.deliveryTokens",
13211
+ "method": "create",
13212
+ "summary": "Create delivery token",
13213
+ "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.",
13214
+ "http": "POST",
13215
+ "path": "/media/v1/libraries/{library_id}/delivery_tokens",
13216
+ "streaming": "no",
13217
+ "pagination": false,
13218
+ "pathParams": [
13219
+ {
13220
+ "name": "library_id",
13221
+ "sdkName": "library_id",
13222
+ "description": "Library ID returned by creation."
13223
+ }
13224
+ ],
13225
+ "query": [],
13226
+ "body": {
13227
+ "required": true,
13228
+ "fields": [
13229
+ {
13230
+ "name": "acl",
13231
+ "type": "string",
13232
+ "required": false,
13233
+ "description": "Delivery path glob restricted to the library path prefix (a slash, library_id, then a slash). Defaults to that prefix followed by *; * matches any path text. Tildes and control characters are rejected."
13234
+ },
13235
+ {
13236
+ "name": "expires_in",
13237
+ "type": "integer",
13238
+ "required": false,
13239
+ "description": "Token lifetime in seconds, from 1 to 604800 inclusive; defaults to 900."
13240
+ }
13241
+ ]
13242
+ }
13243
+ },
10940
13244
  {
10941
13245
  "resource": "media.libraries.events",
10942
13246
  "method": "list",
@@ -11143,7 +13447,7 @@ export const operations = [
11143
13447
  "name": "expression",
11144
13448
  "type": "string",
11145
13449
  "required": false,
11146
- "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."
13450
+ "description": "Asset filter expression supporting field comparisons, AND, OR, NOT, parentheses and suffix wildcards. An empty expression matches all assets. For business metadata use context.sku=KETTLE-RED AND context.revision=2; request with_field: [\"context\"] to include context. Quality filters: flags:watermark matches any current shot with a watermark; flags.watermark:false requires an assessed video with no positive watermark judgment. The same syntax supports slideshow, hand_frame, text_sticker and low_quality. folder_mismatch:true selects lexical folder/location hints. Geometry filters support width, height, resolution:1920x1080, numeric aspect_ratio (width/height), and orientation:landscape, portrait or square. Missing geometry or unassessed legacy flags do not match positive filters."
11147
13451
  },
11148
13452
  {
11149
13453
  "name": "sort_by",
@@ -13925,6 +16229,31 @@ export const operations = [
13925
16229
  ]
13926
16230
  }
13927
16231
  },
16232
+ {
16233
+ "resource": "organization.members",
16234
+ "method": "list",
16235
+ "summary": "List organization members",
16236
+ "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.",
16237
+ "http": "GET",
16238
+ "path": "/organization/v1/members",
16239
+ "streaming": "no",
16240
+ "pagination": false,
16241
+ "pathParams": [],
16242
+ "query": [
16243
+ {
16244
+ "name": "limit",
16245
+ "type": "integer",
16246
+ "required": false,
16247
+ "description": "Maximum members per page, from 1 to 100; defaults to 20."
16248
+ },
16249
+ {
16250
+ "name": "page",
16251
+ "type": "string",
16252
+ "required": false,
16253
+ "description": "Opaque next_page cursor returned by the previous response; omit for the first page."
16254
+ }
16255
+ ]
16256
+ },
13928
16257
  {
13929
16258
  "resource": "organization.usage",
13930
16259
  "method": "list",
@@ -14632,7 +16961,7 @@ export const operations = [
14632
16961
  "resource": "sandbox.sandboxes.commands",
14633
16962
  "method": "run",
14634
16963
  "summary": "Run a command in the sandbox",
14635
- "description": "Execute a shell command and wait for stdout, stderr and exitCode. Supply cmd, optional cwd and envs, and timeoutMs (1–60000 milliseconds, default 60000). Unlike E2B, this endpoint is synchronous only: no background mode, callbacks or unlimited timeout; output is bounded to 1 MiB including stream framing. Nonzero exit codes return 200 with the result. A timeout returns COMMAND_TIMEOUT (504); transport timeout does not confirm process termination, so do not blindly retry commands with side effects. Example body: {\"cmd\":\"echo hi\"}.",
16964
+ "description": "Execute a shell command and wait for stdout, stderr and exitCode. Supply cmd, optional cwd and envs, and timeoutMs (1–3600000 milliseconds, default 600000, that is 10 minutes; E2B defaults to 60000). Unlike E2B, this endpoint is synchronous only: no background mode, callbacks or unlimited timeout (timeoutMs 0); output is bounded to 1 MiB including stream framing. Nonzero exit codes return 200 with the result. A timeout returns COMMAND_TIMEOUT (504); transport timeout does not confirm process termination, so do not blindly retry commands with side effects. Example body: {\"cmd\":\"echo hi\"}.",
14636
16965
  "http": "POST",
14637
16966
  "path": "/sandbox/v1/sandboxes/{sandbox_id}/commands",
14638
16967
  "streaming": "no",
@@ -14654,6 +16983,12 @@ export const operations = [
14654
16983
  "required": true,
14655
16984
  "description": "Shell command to execute, for example echo hi."
14656
16985
  },
16986
+ {
16987
+ "name": "background",
16988
+ "type": "boolean",
16989
+ "required": false,
16990
+ "description": "When true, return 202 with the pid as soon as the process starts; it keeps running after the request ends. Read its status and output with GET /sandbox/v1/sandboxes/{sandbox_id}/commands/{pid}, stop it with DELETE. Same idea as E2B background commands."
16991
+ },
14657
16992
  {
14658
16993
  "name": "cwd",
14659
16994
  "type": "string",
@@ -14670,7 +17005,7 @@ export const operations = [
14670
17005
  "name": "timeoutMs",
14671
17006
  "type": "integer",
14672
17007
  "required": false,
14673
- "description": "Execution timeout in milliseconds, from 1 to 60000; defaults to 60000."
17008
+ "description": "Execution timeout in milliseconds, from 1 to 3600000 (1 hour); defaults to 600000 (10 minutes). In background mode this limits process runtime; expiry records exit code 124."
14674
17009
  }
14675
17010
  ]
14676
17011
  }
@@ -14869,7 +17204,7 @@ export const operations = [
14869
17204
  "resource": "sandbox.templates",
14870
17205
  "method": "list",
14871
17206
  "summary": "List templates (v2)",
14872
- "description": "List the templates you can create sandboxes from. Use it to pick the template id or alias for createSandbox. `base` is the default template that createSandbox uses when templateID is omitted. limit is 1 to 100 (default 100); send the cursor from the response back as nextToken to continue.",
17207
+ "description": "List official templates and all your custom templates, including waiting, building, ready and error builds. Custom templates appear first; each custom row describes its latest build, not necessarily the current ready build. Use templateID for build management and a ready template name when creating a sandbox. Own-face official distinguishes public catalog entries; sourceKind is omitted until a source is submitted and on official templates. Other organizations' templates are invisible.",
14873
17208
  "http": "GET",
14874
17209
  "path": "/sandbox/v1/templates",
14875
17210
  "streaming": "no",
@@ -14880,7 +17215,7 @@ export const operations = [
14880
17215
  "name": "teamID",
14881
17216
  "type": "string",
14882
17217
  "required": false,
14883
- "description": "Id of the team whose templates to list. Omit it to list the templates of your own team; a team you do not belong to answers 403."
17218
+ "description": "Upstream team selector; Praxis always lists the authenticated organization's templates."
14884
17219
  },
14885
17220
  {
14886
17221
  "name": "nextToken",
@@ -14896,6 +17231,342 @@ export const operations = [
14896
17231
  }
14897
17232
  ]
14898
17233
  },
17234
+ {
17235
+ "resource": "sandbox.templates",
17236
+ "method": "create",
17237
+ "summary": "Create template (v3)",
17238
+ "description": "Reserve a waiting build before submitting its source. Reusing a name in your organization allocates a new build on the same template. Returns templateID and buildID; start it with templates.builds.update, then poll templates.builds.status.list. A name:tag suffix and tags are assigned after successful publication. Example: {\"name\":\"my-template\",\"cpuCount\":2,\"memoryMB\":2048}. The own face also accepts diskGb, a positive integer defaulting to 10 GiB.",
17239
+ "http": "POST",
17240
+ "path": "/sandbox/v1/templates",
17241
+ "streaming": "no",
17242
+ "pagination": false,
17243
+ "pathParams": [],
17244
+ "query": [],
17245
+ "body": {
17246
+ "required": true,
17247
+ "fields": [
17248
+ {
17249
+ "name": "name",
17250
+ "type": "string",
17251
+ "required": false,
17252
+ "description": "Name of the template. Can include a tag with colon separator (e.g. \"my-template\" or \"my-template:v1\"). If tag is included, it will be treated as if the tag was provided in the tags array."
17253
+ },
17254
+ {
17255
+ "name": "tags",
17256
+ "type": "array",
17257
+ "itemType": "string",
17258
+ "required": false,
17259
+ "description": "Tags to assign to the template build"
17260
+ },
17261
+ {
17262
+ "name": "alias",
17263
+ "type": "string",
17264
+ "required": false,
17265
+ "description": "Alias of the template. Deprecated, use name instead."
17266
+ },
17267
+ {
17268
+ "name": "teamID",
17269
+ "type": "string",
17270
+ "required": false,
17271
+ "description": "Identifier of the team"
17272
+ },
17273
+ {
17274
+ "name": "cpuCount",
17275
+ "type": "integer",
17276
+ "required": false,
17277
+ "description": "Requested virtual CPU count; a positive integer, default 2 for template builds."
17278
+ },
17279
+ {
17280
+ "name": "memoryMB",
17281
+ "type": "integer",
17282
+ "required": false,
17283
+ "description": "Requested build memory in MiB; a positive integer, default 1024."
17284
+ },
17285
+ {
17286
+ "name": "minFreeDiskMb",
17287
+ "type": "integer",
17288
+ "required": false,
17289
+ "description": "Upstream minimum free disk request in MiB; use the native diskGb field to set the build disk size."
17290
+ },
17291
+ {
17292
+ "name": "diskGb",
17293
+ "type": "integer",
17294
+ "required": false,
17295
+ "description": "Build disk size in GiB, a positive safe integer. Defaults to 10; available only on the own face."
17296
+ }
17297
+ ]
17298
+ }
17299
+ },
17300
+ {
17301
+ "resource": "sandbox.templates.aliases",
17302
+ "method": "retrieve",
17303
+ "summary": "Check template alias",
17304
+ "description": "Resolve a name within your organization to its templateID before reading or managing builds. Use the bare template name, without a :tag suffix. Unknown and other-organization names return 404. The response public field is false for your private templates.",
17305
+ "http": "GET",
17306
+ "path": "/sandbox/v1/templates/aliases/{alias}",
17307
+ "streaming": "no",
17308
+ "pagination": false,
17309
+ "pathParams": [
17310
+ {
17311
+ "name": "alias",
17312
+ "sdkName": "alias",
17313
+ "description": "Bare template name belonging to your organization, without a tag or provider namespace."
17314
+ }
17315
+ ],
17316
+ "query": []
17317
+ },
17318
+ {
17319
+ "resource": "sandbox.templates.tags",
17320
+ "method": "delete",
17321
+ "summary": "Delete template tags",
17322
+ "description": "Remove the specified tag labels from your template by name, for example {\"name\":\"my-template\",\"tags\":[\"stable\"]}. Builds remain available. Removing default means untagged sandbox creation no longer resolves this template. Unknown or other-organization names return 404. b<number> names are reserved read-only build aliases and cannot be assigned or deleted as tags.",
17323
+ "http": "DELETE",
17324
+ "path": "/sandbox/v1/templates/tags",
17325
+ "streaming": "no",
17326
+ "pagination": false,
17327
+ "pathParams": [],
17328
+ "query": [],
17329
+ "body": {
17330
+ "required": true,
17331
+ "fields": [
17332
+ {
17333
+ "name": "name",
17334
+ "type": "string",
17335
+ "required": true,
17336
+ "description": "Name of the template"
17337
+ },
17338
+ {
17339
+ "name": "tags",
17340
+ "type": "array",
17341
+ "itemType": "string",
17342
+ "required": true,
17343
+ "description": "Tags to delete"
17344
+ }
17345
+ ]
17346
+ }
17347
+ },
17348
+ {
17349
+ "resource": "sandbox.templates.tags",
17350
+ "method": "create",
17351
+ "summary": "Assign template tags",
17352
+ "description": "Assign tags to the ready build selected by target in name:tag format, for example {\"target\":\"my-template:default\",\"tags\":[\"stable\"]}. Names belong to your organization. Tags move an existing label to this build without rebuilding. Obtain available names from templates.list and tags from templates.tags.list. b<number> names are reserved read-only build aliases and cannot be assigned or deleted as tags. target also accepts name:b<number> to select a ready build by number, for example my-template:b1.",
17353
+ "http": "POST",
17354
+ "path": "/sandbox/v1/templates/tags",
17355
+ "streaming": "no",
17356
+ "pagination": false,
17357
+ "pathParams": [],
17358
+ "query": [],
17359
+ "body": {
17360
+ "required": true,
17361
+ "fields": [
17362
+ {
17363
+ "name": "target",
17364
+ "type": "string",
17365
+ "required": true,
17366
+ "description": "Target template in \"name:tag\" format"
17367
+ },
17368
+ {
17369
+ "name": "tags",
17370
+ "type": "array",
17371
+ "itemType": "string",
17372
+ "required": true,
17373
+ "description": "Tags to assign to the template"
17374
+ }
17375
+ ]
17376
+ }
17377
+ },
17378
+ {
17379
+ "resource": "sandbox.templates",
17380
+ "method": "delete",
17381
+ "summary": "Delete template",
17382
+ "description": "Permanently remove your template, its builds and tag assignments using templateID from templates.create. Active instances prevent deletion with 409; terminate them first. Unknown or other-organization IDs return 404. Snapshot IDs use snapshots.delete instead.",
17383
+ "http": "DELETE",
17384
+ "path": "/sandbox/v1/templates/{templateID}",
17385
+ "streaming": "no",
17386
+ "pagination": false,
17387
+ "pathParams": [
17388
+ {
17389
+ "name": "templateID",
17390
+ "sdkName": "templateID",
17391
+ "description": "Template identifier from templates.create or templates.list. Use your organization's templateID, not a provider handle."
17392
+ }
17393
+ ],
17394
+ "query": []
17395
+ },
17396
+ {
17397
+ "resource": "sandbox.templates",
17398
+ "method": "retrieve",
17399
+ "summary": "List template builds",
17400
+ "description": "Inspect your template and its newest builds using templateID from templates.create. Build states are waiting, building, ready or error. Use limit and the returned x-next-token header to page builds. Unknown or other-organization templates return 404.",
17401
+ "http": "GET",
17402
+ "path": "/sandbox/v1/templates/{templateID}",
17403
+ "streaming": "no",
17404
+ "pagination": false,
17405
+ "pathParams": [
17406
+ {
17407
+ "name": "templateID",
17408
+ "sdkName": "templateID",
17409
+ "description": "Template identifier from templates.create or templates.list. Use your organization's templateID, not a provider handle."
17410
+ }
17411
+ ],
17412
+ "query": [
17413
+ {
17414
+ "name": "nextToken",
17415
+ "type": "string",
17416
+ "required": false,
17417
+ "description": "Cursor to start the list from"
17418
+ },
17419
+ {
17420
+ "name": "limit",
17421
+ "type": "integer",
17422
+ "required": false,
17423
+ "description": "Maximum number of items to return per page"
17424
+ }
17425
+ ]
17426
+ },
17427
+ {
17428
+ "resource": "sandbox.templates.builds",
17429
+ "method": "update",
17430
+ "summary": "Start template build (v2)",
17431
+ "description": "Submit source for a waiting build returned by templates.create; returns 202 after queueing, not after successful publication. Unlike E2B, COPY is rejected (use RUN curl or git clone), fromTemplate accepts official catalog names only, and plaintext registry credentials are rejected. The own face also accepts dockerfile, mutually exclusive with fromImage/fromTemplate/steps, and fromImageRegistry vault references for nonofficial images. Poll templates.builds.status.list until ready or error. Example: {\"fromImage\":\"node:22\",\"steps\":[{\"type\":\"RUN\",\"args\":[\"echo hello\"]}]}.",
17432
+ "http": "POST",
17433
+ "path": "/sandbox/v1/templates/{templateID}/builds/{buildID}",
17434
+ "streaming": "no",
17435
+ "pagination": false,
17436
+ "pathParams": [
17437
+ {
17438
+ "name": "templateID",
17439
+ "sdkName": "templateID",
17440
+ "description": "Template identifier from templates.create or templates.list. Use your organization's templateID, not a provider handle."
17441
+ },
17442
+ {
17443
+ "name": "buildID",
17444
+ "sdkName": "buildID",
17445
+ "description": "Build identifier returned by templates.create. It must belong to the selected template in your organization."
17446
+ }
17447
+ ],
17448
+ "query": [],
17449
+ "body": {
17450
+ "required": true,
17451
+ "fields": [
17452
+ {
17453
+ "name": "fromImage",
17454
+ "type": "string",
17455
+ "required": false,
17456
+ "description": "Image to use as a base for the template build"
17457
+ },
17458
+ {
17459
+ "name": "fromTemplate",
17460
+ "type": "string",
17461
+ "required": false,
17462
+ "description": "Template to use as a base for the template build"
17463
+ },
17464
+ {
17465
+ "name": "fromImageRegistry",
17466
+ "type": "object",
17467
+ "required": false,
17468
+ "description": "Registry authentication. Unlike E2B, only the vault reference variant is accepted; plaintext aws, gcp and registry variants return 400. Cannot be used with official templates."
17469
+ },
17470
+ {
17471
+ "name": "force",
17472
+ "type": "boolean",
17473
+ "required": false,
17474
+ "description": "Whether the whole build should be forced to run regardless of the cache"
17475
+ },
17476
+ {
17477
+ "name": "steps",
17478
+ "type": "array",
17479
+ "itemType": "object",
17480
+ "required": false,
17481
+ "description": "List of steps to execute in the template build"
17482
+ },
17483
+ {
17484
+ "name": "startCmd",
17485
+ "type": "string",
17486
+ "required": false,
17487
+ "description": "Start command to execute in the template after the build"
17488
+ },
17489
+ {
17490
+ "name": "readyCmd",
17491
+ "type": "string",
17492
+ "required": false,
17493
+ "description": "Ready check command to execute in the template after the build"
17494
+ },
17495
+ {
17496
+ "name": "dockerfile",
17497
+ "type": "string",
17498
+ "required": false,
17499
+ "description": "Dockerfile text, at most 64 KiB UTF-8. Mutually exclusive with fromImage, fromTemplate and steps. COPY/ADD are rejected; fetch remote content using RUN. Registry credentials require a nonofficial image in the first FROM."
17500
+ }
17501
+ ]
17502
+ }
17503
+ },
17504
+ {
17505
+ "resource": "sandbox.templates.builds.status",
17506
+ "method": "list",
17507
+ "summary": "Template build status",
17508
+ "description": "Poll a build using templateID and buildID from templates.create. waiting means source has not been submitted; building includes queued work; ready permits sandbox creation; error is terminal, with reason when available. logsOffset counts previously read log entries, starting at zero; add logEntries.length after each response. limit is 0–100, default 100. level selects one log level; offsets then count entries at that level. Drain logs until an empty page, including after a terminal status.",
17509
+ "http": "GET",
17510
+ "path": "/sandbox/v1/templates/{templateID}/builds/{buildID}/status",
17511
+ "streaming": "no",
17512
+ "pagination": false,
17513
+ "pathParams": [
17514
+ {
17515
+ "name": "templateID",
17516
+ "sdkName": "templateID",
17517
+ "description": "Template identifier from templates.create or templates.list. Use your organization's templateID, not a provider handle."
17518
+ },
17519
+ {
17520
+ "name": "buildID",
17521
+ "sdkName": "buildID",
17522
+ "description": "Build identifier returned by templates.create. It must belong to the selected template in your organization."
17523
+ }
17524
+ ],
17525
+ "query": [
17526
+ {
17527
+ "name": "logsOffset",
17528
+ "type": "integer",
17529
+ "required": false,
17530
+ "description": "Index of the starting build log that should be returned with the template"
17531
+ },
17532
+ {
17533
+ "name": "limit",
17534
+ "type": "integer",
17535
+ "required": false,
17536
+ "description": "Maximum number of logs that should be returned"
17537
+ },
17538
+ {
17539
+ "name": "level",
17540
+ "type": "string",
17541
+ "enum": [
17542
+ "debug",
17543
+ "info",
17544
+ "warn",
17545
+ "error"
17546
+ ],
17547
+ "required": false,
17548
+ "description": "Select one exact log severity: debug for diagnostics, info for progress, warn for warnings, error for failures. Offsets count matching entries."
17549
+ }
17550
+ ]
17551
+ },
17552
+ {
17553
+ "resource": "sandbox.templates.tags",
17554
+ "method": "list",
17555
+ "summary": "List template tags",
17556
+ "description": "Read the tag-to-build assignments for your template using templateID from templates.create. Only ready builds acquire tags. Use a returned tag with the template name as name:tag when creating a sandbox or assigning additional tags. Foreign IDs return 404.",
17557
+ "http": "GET",
17558
+ "path": "/sandbox/v1/templates/{templateID}/tags",
17559
+ "streaming": "no",
17560
+ "pagination": false,
17561
+ "pathParams": [
17562
+ {
17563
+ "name": "templateID",
17564
+ "sdkName": "templateID",
17565
+ "description": "Template identifier from templates.create or templates.list. Use your organization's templateID, not a provider handle."
17566
+ }
17567
+ ],
17568
+ "query": []
17569
+ },
14899
17570
  {
14900
17571
  "resource": "sandbox.volumes",
14901
17572
  "method": "list",
@@ -16055,7 +18726,7 @@ export const operations = [
16055
18726
  "resource": "ticket.milestones",
16056
18727
  "method": "create",
16057
18728
  "summary": "Create or add milestones",
16058
- "description": "Create or add milestones 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.",
18729
+ "description": "Create or add milestones 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.",
16059
18730
  "http": "POST",
16060
18731
  "path": "/ticket/v1/milestones",
16061
18732
  "streaming": "no",
@@ -16107,7 +18778,7 @@ export const operations = [
16107
18778
  "resource": "ticket.milestones",
16108
18779
  "method": "delete",
16109
18780
  "summary": "Remove milestones",
16110
- "description": "Remove milestones 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.",
18781
+ "description": "Remove milestones 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.",
16111
18782
  "http": "DELETE",
16112
18783
  "path": "/ticket/v1/milestones/{number}",
16113
18784
  "streaming": "no",
@@ -16159,7 +18830,7 @@ export const operations = [
16159
18830
  "resource": "ticket.milestones",
16160
18831
  "method": "update",
16161
18832
  "summary": "Update milestones",
16162
- "description": "Update milestones 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.",
18833
+ "description": "Update milestones 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.",
16163
18834
  "http": "PATCH",
16164
18835
  "path": "/ticket/v1/milestones/{number}",
16165
18836
  "streaming": "no",
@@ -17570,7 +20241,7 @@ export const operations = [
17570
20241
  "resource": "vault.vaults.secrets",
17571
20242
  "method": "create",
17572
20243
  "summary": "Create secret",
17573
- "description": "Store a manually supplied token in an active vault for use on requests to its allowed_hosts. Unlike Anthropic credentials, this native operation takes name, value and allowed_hosts directly and creates only static secrets; use praxis.vault.authorizations.create for OAuth. Its name must be unused by any non-archived secret in that vault; the response contains metadata but never the supplied value. Application praxis_vault_ref bindings declare vault_id and secret (the secret name), but currently return 501; do not copy the value into a plain-text binding or metadata as a substitute.",
20244
+ "description": "Store a manually supplied token in an active vault. Omit allowed_hosts for name-based resolution only; host-based redemption never matches an empty host list. Unlike Anthropic credentials, this native operation takes name and value directly, with optional allowed_hosts and creates only static secrets; use praxis.vault.authorizations.create for OAuth. Its name must be unused by any non-archived secret in that vault; the response contains metadata but never the supplied value. Application praxis_vault_ref bindings declare vault_id and secret (the secret name), but currently return 501; do not copy the value into a plain-text binding or metadata as a substitute.",
17574
20245
  "http": "POST",
17575
20246
  "path": "/vault/v1/vaults/{vault_id}/secrets",
17576
20247
  "streaming": "no",
@@ -17602,8 +20273,8 @@ export const operations = [
17602
20273
  "name": "allowed_hosts",
17603
20274
  "type": "array",
17604
20275
  "itemType": "string",
17605
- "required": true,
17606
- "description": "Allowed destinations for the secret. Unlike Anthropic's unrestricted networking option, an explicit allowlist is required. Supply 1–16 bare domain names, dotted-decimal IPv4 addresses or leading *. domain wildcards. A wildcard matches subdomains, not the domain itself. URLs, ports, paths, IPv6, local/private and platform hosts are rejected. Entries are lowercased, one trailing dot is removed, internationalized domains use Punycode, and duplicates are removed."
20276
+ "required": false,
20277
+ "description": "Allowed destinations for the secret. Omitting allowed_hosts on creation stores an empty list for name-based resolution only: host-based redemption never matches. When supplied, list 1–16 bare domain names, dotted-decimal IPv4 addresses or leading *. domain wildcards. A wildcard matches subdomains, not the domain itself. URLs, ports, paths, IPv6, local/private and platform hosts are rejected. Entries are lowercased, one trailing dot is removed, internationalized domains use Punycode, and duplicates are removed."
17607
20278
  },
17608
20279
  {
17609
20280
  "name": "description",
@@ -17627,7 +20298,7 @@ export const operations = [
17627
20298
  "stripe"
17628
20299
  ],
17629
20300
  "required": false,
17630
- "description": "Static template ID from List templates. Records metadata.template; name, value and allowed_hosts must still be supplied explicitly."
20301
+ "description": "Static template ID from List templates. Records metadata.template; name and value must still be supplied explicitly; allowed_hosts is optional."
17631
20302
  },
17632
20303
  {
17633
20304
  "name": "kind",
@@ -17723,7 +20394,7 @@ export const operations = [
17723
20394
  "type": "array",
17724
20395
  "itemType": "string",
17725
20396
  "required": false,
17726
- "description": "Allowed destinations for the secret. Unlike Anthropic's unrestricted networking option, an explicit allowlist is required. Supply 1–16 bare domain names, dotted-decimal IPv4 addresses or leading *. domain wildcards. A wildcard matches subdomains, not the domain itself. URLs, ports, paths, IPv6, local/private and platform hosts are rejected. Entries are lowercased, one trailing dot is removed, internationalized domains use Punycode, and duplicates are removed."
20397
+ "description": "Allowed destinations for the secret. Omitting allowed_hosts on creation stores an empty list for name-based resolution only: host-based redemption never matches. When supplied, list 1–16 bare domain names, dotted-decimal IPv4 addresses or leading *. domain wildcards. A wildcard matches subdomains, not the domain itself. URLs, ports, paths, IPv6, local/private and platform hosts are rejected. Entries are lowercased, one trailing dot is removed, internationalized domains use Punycode, and duplicates are removed."
17727
20398
  },
17728
20399
  {
17729
20400
  "name": "description",
@@ -17827,7 +20498,7 @@ export const operations = [
17827
20498
  "resource": "vault.vaults.secrets",
17828
20499
  "method": "import",
17829
20500
  "summary": "Import secrets",
17830
- "description": "Import lines or dotenv text into an active vault, reporting success or failure for each entry. Existing names have their values replaced; their hosts change only when that line supplies allowed_hosts. Shared hosts apply only to newly created secrets.",
20501
+ "description": "Import lines or dotenv text into an active vault, reporting success or failure for each entry. Existing names have their values replaced; their hosts change only when that line supplies allowed_hosts. Shared hosts apply only to newly created secrets; if neither shared nor per-line hosts are supplied, new secrets use an empty host list for name-based resolution only.",
17831
20502
  "http": "POST",
17832
20503
  "path": "/vault/v1/vaults/{vault_id}/secrets:import",
17833
20504
  "streaming": "no",