@deepraxis/sdk 0.1.0-dev.13103a0 → 0.1.0-dev.331f4e7

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.
@@ -128,6 +128,27 @@ export const operations = [
128
128
  "required": false,
129
129
  "description": "Tool configurations available to the agent. Maximum of 128 tools\nacross all toolsets allowed."
130
130
  },
131
+ {
132
+ "name": "databases",
133
+ "type": "array",
134
+ "itemType": "object",
135
+ "required": false,
136
+ "description": "Database allowlist for platform resources accessible through service-agent codemode. Only kind=service accepts nonempty bindings; personal agents return 400. At most 20 bindings per resource type, with no duplicate ids. Newly added bindings apply only to new sessions; disabling or removing a binding immediately revokes access in running sessions. Unbound resources return 404; writes to read_only resources are refused. Other platform APIs return 403, except public API discovery. Invalid bindings and unknown item fields return 400. Omit on create for no bindings."
137
+ },
138
+ {
139
+ "name": "vector_stores",
140
+ "type": "array",
141
+ "itemType": "object",
142
+ "required": false,
143
+ "description": "Knowledge vector store allowlist for platform resources accessible through service-agent codemode. Only kind=service accepts nonempty bindings; personal agents return 400. At most 20 bindings per resource type, with no duplicate ids. Newly added bindings apply only to new sessions; disabling or removing a binding immediately revokes access in running sessions. Unbound resources return 404; writes to read_only resources are refused. Other platform APIs return 403, except public API discovery. Invalid bindings and unknown item fields return 400. Omit on create for no bindings."
144
+ },
145
+ {
146
+ "name": "files",
147
+ "type": "array",
148
+ "itemType": "object",
149
+ "required": false,
150
+ "description": "File allowlist for platform resources accessible through service-agent codemode. Only kind=service accepts nonempty bindings; personal agents return 400. At most 20 bindings per resource type, with no duplicate ids. Newly added bindings apply only to new sessions; disabling or removing a binding immediately revokes access in running sessions. Unbound resources return 404; writes to read_only resources are refused. Other platform APIs return 403, except public API discovery. Invalid bindings and unknown item fields return 400. Omit on create for no bindings."
151
+ },
131
152
  {
132
153
  "name": "kind",
133
154
  "type": "string",
@@ -218,7 +239,7 @@ export const operations = [
218
239
  "resource": "agent.agents",
219
240
  "method": "update",
220
241
  "summary": "Update agent",
221
- "description": "Update an agent. Send the current version in the body for optimistic concurrency: a stale version returns 409, and an update that changes nothing keeps the version number. Any real change saves a new version; existing sessions keep the version they were created with. Omitted fields keep their value. multiagent takes null or a coordinator roster; subagent_model keeps its value when omitted and is cleared by null. Archived agents cannot be updated. Unlike Anthropic Managed Agents, nonempty skills attachments return 400; use the native skill tool for available runtime skills.",
242
+ "description": "Update an agent. Send the current version in the body for optimistic concurrency: a stale version returns 409, and an update that changes nothing keeps the version number. Any real change saves a new version. apply defaults to true and moves active_version to the new version, or to the latest when configuration is unchanged; apply false saves without applying. version_note optionally records up to 280 characters on a newly created version. Existing sessions and tokens keep their version. Omitted fields keep their value. multiagent takes null or a coordinator roster; subagent_model keeps its value when omitted and is cleared by null. Archived agents cannot be updated. Unlike Anthropic Managed Agents, nonempty skills attachments return 400; use the native skill tool for available runtime skills.",
222
243
  "http": "POST",
223
244
  "path": "/agent/v1/agents/{agent_id}",
224
245
  "streaming": "no",
@@ -296,6 +317,39 @@ export const operations = [
296
317
  "required": false,
297
318
  "description": "The agent's current version, used to prevent concurrent overwrites.\nObtain this value from a create or retrieve response. Must be at least 1 if\nspecified. When supplied, the request fails if it does not match the server's\ncurrent version; omit to apply the update unconditionally."
298
319
  },
320
+ {
321
+ "name": "apply",
322
+ "type": "boolean",
323
+ "required": false,
324
+ "description": "Defaults to true: apply the newly saved version, or the latest version when configuration is unchanged. Set false to save without changing active_version. Unlike Managed Agents, saving and applying can be separate."
325
+ },
326
+ {
327
+ "name": "version_note",
328
+ "type": "string",
329
+ "required": false,
330
+ "description": "Optional change explanation stored as note on the new immutable version, up to 280 characters. Omission stores null. A note alone does not create a version or rewrite an existing note."
331
+ },
332
+ {
333
+ "name": "databases",
334
+ "type": "array",
335
+ "itemType": "object",
336
+ "required": false,
337
+ "description": "Replace this resource allowlist; omission preserves it, and null or [] clears it. Additions apply only to new sessions; disabling or removing a binding immediately revokes access in running sessions. Only service agents accept nonempty bindings."
338
+ },
339
+ {
340
+ "name": "vector_stores",
341
+ "type": "array",
342
+ "itemType": "object",
343
+ "required": false,
344
+ "description": "Replace this resource allowlist; omission preserves it, and null or [] clears it. Additions apply only to new sessions; disabling or removing a binding immediately revokes access in running sessions. Only service agents accept nonempty bindings."
345
+ },
346
+ {
347
+ "name": "files",
348
+ "type": "array",
349
+ "itemType": "object",
350
+ "required": false,
351
+ "description": "Replace this resource allowlist; omission preserves it, and null or [] clears it. Additions apply only to new sessions; disabling or removing a binding immediately revokes access in running sessions. Only service agents accept nonempty bindings."
352
+ },
299
353
  {
300
354
  "name": "kind",
301
355
  "type": "string",
@@ -591,6 +645,27 @@ export const operations = [
591
645
  }
592
646
  ]
593
647
  },
648
+ {
649
+ "resource": "agent.agents.versions",
650
+ "method": "apply",
651
+ "summary": "Apply Agent Version",
652
+ "description": "Apply a version from agents.versions.list by its version number. This idempotent operation changes active_version without creating a version; existing sessions and tokens keep their version. The response is the latest saved agent with its current active_version. Missing versions return 404 Agent version not found; archived agents return 409 Agent is archived. For example, POST /agent/v1/agents/{agent_id}/versions/2/apply with no body.",
653
+ "http": "POST",
654
+ "path": "/agent/v1/agents/{agent_id}/versions/{version}/apply",
655
+ "streaming": "no",
656
+ "pagination": false,
657
+ "pathParams": [
658
+ {
659
+ "name": "agent_id",
660
+ "sdkName": "agent_id"
661
+ },
662
+ {
663
+ "name": "version",
664
+ "sdkName": "version"
665
+ }
666
+ ],
667
+ "query": []
668
+ },
594
669
  {
595
670
  "resource": "agent.computers",
596
671
  "method": "list",
@@ -756,7 +831,7 @@ export const operations = [
756
831
  "resource": "agent.computers",
757
832
  "method": "connect",
758
833
  "summary": "Connect computer",
759
- "description": "Resume the computer and issue a sandbox connection.\n\nOwn-face extension: Managed Agents has no persistent Computer connection. Returns the public SDK sandbox_id, envd_access_token and template_id, plus the machine tier the computer is on now (light or heavy) and the lease that keeps it there (lease_id, lease_expires_at; lease_id is null when no lease exists). Keep the lease while the connection stays open: renew it about every 20 seconds (POST .../leases/{lease_id}/renew) and release it on close (DELETE .../leases/{lease_id}). An unrenewed lease simply expires, and the full machine is reclaimed only after that. Archived computers remain accessible; foreign or absent computers return 404. Never cache credentials.",
834
+ "description": "Resume the computer and issue a sandbox connection.\n\nOwn-face extension: Managed Agents has no persistent Computer connection. Returns the public SDK sandbox_id, envd_access_token and template_id, plus the machine tier the computer is on now (light or heavy) and the lease that keeps it there (lease_id, lease_expires_at; lease_id is null when no lease exists). Keep the lease while the connection stays open: renew it about every 20 seconds (POST .../leases/{lease_id}/renew) and release it on close (DELETE .../leases/{lease_id}). An unrenewed lease simply expires, and the full machine is reclaimed only after that. Archived computers remain accessible; foreign or absent computers return 404. Never cache credentials.\n\nConnect to a computer with a caller-held lease. Omit the body or send {} to request light: the lightweight shell, or the heavy instance while it is running. Send {\"need\":\"heavy\"} to request full Linux for interactive programs; files are synchronized before the heavy connection is returned with tier heavy. Renew the lease while using the connection and release it with DELETE when finished.",
760
835
  "http": "POST",
761
836
  "path": "/agent/v1/computers/{computer_id}/connect",
762
837
  "streaming": "no",
@@ -767,7 +842,22 @@ export const operations = [
767
842
  "sdkName": "computer_id"
768
843
  }
769
844
  ],
770
- "query": []
845
+ "query": [],
846
+ "body": {
847
+ "required": false,
848
+ "fields": [
849
+ {
850
+ "name": "need",
851
+ "type": "string",
852
+ "enum": [
853
+ "light",
854
+ "heavy"
855
+ ],
856
+ "required": false,
857
+ "description": "Defaults to light. light uses the lightweight shell, or the heavy instance while it is running. heavy requests a full Linux computer for interactive programs; heavy running time counts toward the daily budget in seconds."
858
+ }
859
+ ]
860
+ }
771
861
  },
772
862
  {
773
863
  "resource": "agent.computers.files",
@@ -1778,7 +1868,7 @@ export const operations = [
1778
1868
  "resource": "agent.sessions",
1779
1869
  "method": "create",
1780
1870
  "summary": "Create session",
1781
- "description": "Create a session: one conversation with an agent, running on a machine. Pass agent as an agent id (latest version) or {id, version, type:\"agent\"}. Unlike Anthropic Managed Agents, omit environment_id to get a light machine, unless computer_id (explicit, or the agent's default) selects a Computer; pass environment_id for a sandbox recipe. Optional model must be one of the agent's allowed models; optional thinking is {effort: low|medium|high|xhigh|max|none} or null, where null inherits the agent default and then the model default (none requires the model to allow disabling thinking). Selections are saved before initial_events run; invalid ones return 400 invalid_request_error. Inline agent overrides are not supported. Supports vault_ids, up to 50, owned by the current organization and not archived; credential injection is deferred to a later version. Omitted budget defaults to USD 20; null removes the limit, and a limit object uses a positive integer string of USD cents. Up to 500 file resources can be attached. Use initial_events to send a first user.message in this request, or send messages afterwards with sessions.events.send. The returned status can still be idle before initial events run; read agent.message and the subsequent session.status_idle event to confirm completion.",
1871
+ "description": "Create a session: one conversation with an agent. Pass agent as an agent id (active_version) or {id, version, type:\"agent\"}. Unlike Anthropic Managed Agents, omit environment_id to get a light machine, unless computer_id (explicit, or the agent's default) selects a Computer; pass an environment id for a sandbox recipe. For service agents, omission returns environment_id=light; explicit null allocates no machine, so codemode, bash and other machine tools are unavailable. Optional model must be one of the agent's allowed models; optional thinking is {effort: low|medium|high|xhigh|max|none} or null, where null inherits the agent default and then the model default (none requires the model to allow disabling thinking). Selections are saved before initial_events run; invalid ones return 400 invalid_request_error. Inline agent overrides are not supported. Supports vault_ids, up to 50, owned by the current organization and not archived; credential injection is deferred to a later version. Omitted budget defaults to USD 20; null removes the limit, and a limit object uses a positive integer string of USD cents. Up to 500 file resources can be attached. Use initial_events to send a first user.message in this request, or send messages afterwards with sessions.events.send. The returned status can still be idle before initial events run; read agent.message and the subsequent session.status_idle event to confirm completion.",
1782
1872
  "http": "POST",
1783
1873
  "path": "/agent/v1/sessions",
1784
1874
  "streaming": "no",
@@ -1798,7 +1888,7 @@ export const operations = [
1798
1888
  "name": "environment_id",
1799
1889
  "type": "string",
1800
1890
  "required": false,
1801
- "description": "ID of the `environment` defining the container configuration for\nthis session."
1891
+ "description": "Execution environment id from agent.environments.list or agent.environments.create. For a service agent, omission selects the built-in light environment and returns session.environment_id=light; explicit null allocates no machine and makes machine tools, including codemode and bash, unavailable. Personal agents use their selected Computer."
1802
1892
  },
1803
1893
  {
1804
1894
  "name": "budget",
@@ -3506,13 +3596,13 @@ export const operations = [
3506
3596
  "name": "namespace",
3507
3597
  "type": "string",
3508
3598
  "required": true,
3509
- "description": "Choose a namespace without prior registration; praxis is read-only. Folded to lowercase; matches [a-z0-9][a-z0-9._-]{0,63}."
3599
+ "description": "Choose a namespace without prior registration; praxis is reserved for built-in Actions. Folded to lowercase; matches [a-z0-9][a-z0-9_-]{0,63}."
3510
3600
  },
3511
3601
  {
3512
3602
  "name": "name",
3513
3603
  "type": "string",
3514
3604
  "required": true,
3515
- "description": "Name, folded to lowercase; matches [a-z0-9][a-z0-9._-]{0,63}."
3605
+ "description": "Name, folded to lowercase; matches [a-z0-9][a-z0-9_-]{0,63}."
3516
3606
  },
3517
3607
  {
3518
3608
  "name": "description",
@@ -3575,8 +3665,8 @@ export const operations = [
3575
3665
  {
3576
3666
  "resource": "automation.actions",
3577
3667
  "method": "retrieve",
3578
- "summary": "Get an action",
3579
- "description": "Read the action and its full current implementation. The response ETag is the current revision ID for conditional updates.",
3668
+ "summary": "Get an Action with its current input and output JSON Schemas",
3669
+ "description": "Read the Action and its full current implementation, with input and output JSON Schemas at current_revision.input_schema and current_revision.output_schema. To read a built-in Action, use ns=praxis and name=<bare name>, for example name=ocr; invoke it in a script with call(\"ocr\", input). The response ETag is the current revision ID for conditional updates.",
3580
3670
  "http": "GET",
3581
3671
  "path": "/automation/v1/actions/{ns}/{name}",
3582
3672
  "streaming": "no",
@@ -4150,8 +4240,8 @@ export const operations = [
4150
4240
  {
4151
4241
  "resource": "automation.runs",
4152
4242
  "method": "create",
4153
- "summary": "Create a run",
4154
- "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. 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. 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. New non-deterministic run IDs contain 78 characters (run_ + 10-character base36 millisecond timestamp + 64-character hexadecimal DO ID), compared with 46 for legacy random IDs. Historical and deterministic IDs remain valid; same-millisecond order is not guaranteed. Minimal body: {\"source\":\"export default async () => ({ok: true});\",\"language\":\"ts\",\"wait\":10}.",
4243
+ "summary": "Run a published target or execute draft source",
4244
+ "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 7 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. 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.",
4155
4245
  "http": "POST",
4156
4246
  "path": "/automation/v1/runs",
4157
4247
  "streaming": "no",
@@ -4629,7 +4719,7 @@ export const operations = [
4629
4719
  "resource": "automation.scripts",
4630
4720
  "method": "create",
4631
4721
  "summary": "Create a script",
4632
- "description": "Save a TypeScript script as an editable draft for later reuse; this does not publish or start a run. Choose your own namespace without registering it first; praxis is read-only. Scripts and workflows share names within the tenant; a duplicate returns NAME_TAKEN. The draft is a source string with a default-exported function, for example `export default async (input: {name: string}) => ({greeting: \"Hello, \" + input.name});`. To test it, pass that source and language=ts to praxis.automation.runs.create without publishing. To publish later, use the returned draft.revision as expected_draft_revision.",
4722
+ "description": "Save a TypeScript script as an editable draft for later reuse; this does not publish or start a run. 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. The draft is a source string with a default-exported function, for example `export default async (input: {name: string}) => ({greeting: \"Hello, \" + input.name});`. Scripts provide praxis, call, invoke, console and codemode as module-scope bindings, not on globalThis, with no import needed: praxis.<domain>.<resource>.<method>(...) calls a platform API, call(\"ocr\", input) calls a built-in Action, and invoke(\"namespace/name\", input) starts a child run. Action IDs are strings (bare names for built-ins, namespace/name for your own Actions); praxis.ocr(...) does not exist. To test it, pass that source and language=ts to praxis.automation.runs.create without publishing. To publish later, use the returned draft.revision as expected_draft_revision.",
4633
4723
  "http": "POST",
4634
4724
  "path": "/automation/v1/scripts",
4635
4725
  "streaming": "no",
@@ -4643,13 +4733,13 @@ export const operations = [
4643
4733
  "name": "namespace",
4644
4734
  "type": "string",
4645
4735
  "required": true,
4646
- "description": "Choose a namespace without prior registration; praxis is read-only. Folded to lowercase; matches [a-z0-9][a-z0-9._-]{0,63}."
4736
+ "description": "Choose a namespace without prior registration; praxis is reserved for built-in Actions. Folded to lowercase; matches [a-z0-9][a-z0-9_-]{0,63}."
4647
4737
  },
4648
4738
  {
4649
4739
  "name": "name",
4650
4740
  "type": "string",
4651
4741
  "required": true,
4652
- "description": "Name, folded to lowercase; matches [a-z0-9][a-z0-9._-]{0,63}."
4742
+ "description": "Name, folded to lowercase; matches [a-z0-9][a-z0-9_-]{0,63}."
4653
4743
  },
4654
4744
  {
4655
4745
  "name": "description",
@@ -4697,7 +4787,7 @@ export const operations = [
4697
4787
  "resource": "automation.scripts",
4698
4788
  "method": "update",
4699
4789
  "summary": "Update a script draft",
4700
- "description": "Update description, labels or draft with the current draft revision in If-Match. Even metadata-only updates create a new draft revision.",
4790
+ "description": "Update description, labels or draft with the current draft revision in If-Match. Even metadata-only updates create a new draft revision. Scripts provide praxis, call, invoke, console and codemode as module-scope bindings, not on globalThis, with no import needed: praxis.<domain>.<resource>.<method>(...) calls a platform API, call(\"ocr\", input) calls a built-in Action, and invoke(\"namespace/name\", input) starts a child run. Action IDs are strings (bare names for built-ins, namespace/name for your own Actions); praxis.ocr(...) does not exist.",
4701
4791
  "http": "PATCH",
4702
4792
  "path": "/automation/v1/scripts/{ns}/{name}",
4703
4793
  "streaming": "no",
@@ -5651,7 +5741,7 @@ export const operations = [
5651
5741
  "resource": "automation.workflows",
5652
5742
  "method": "create",
5653
5743
  "summary": "Create a workflow",
5654
- "description": "Save a YAML workflow as an editable draft without publishing or starting a run. Choose your own namespace without registering it first; praxis is read-only. To test the draft, send its source and language=yaml to praxis.automation.runs.create. 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.",
5744
+ "description": "Save a YAML workflow as an editable draft without publishing or starting a run. Choose your own namespace without registering it first; praxis is reserved for built-in Actions. To test the draft, send its source and language=yaml to praxis.automation.runs.create. 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.",
5655
5745
  "http": "POST",
5656
5746
  "path": "/automation/v1/workflows",
5657
5747
  "streaming": "no",
@@ -5665,13 +5755,13 @@ export const operations = [
5665
5755
  "name": "namespace",
5666
5756
  "type": "string",
5667
5757
  "required": true,
5668
- "description": "Choose a namespace without prior registration; praxis is read-only. Folded to lowercase; matches [a-z0-9][a-z0-9._-]{0,63}."
5758
+ "description": "Choose a namespace without prior registration; praxis is reserved for built-in Actions. Folded to lowercase; matches [a-z0-9][a-z0-9_-]{0,63}."
5669
5759
  },
5670
5760
  {
5671
5761
  "name": "name",
5672
5762
  "type": "string",
5673
5763
  "required": true,
5674
- "description": "Name, folded to lowercase; matches [a-z0-9][a-z0-9._-]{0,63}."
5764
+ "description": "Name, folded to lowercase; matches [a-z0-9][a-z0-9_-]{0,63}."
5675
5765
  },
5676
5766
  {
5677
5767
  "name": "description",
@@ -6826,7 +6916,7 @@ export const operations = [
6826
6916
  "name": "{column}",
6827
6917
  "type": "string",
6828
6918
  "required": false,
6829
- "description": "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns. See the filter operator matrix."
6919
+ "description": "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns. Supported operators: eq (equal), neq (not equal; ne is not supported), gt/gte/lt/lte (comparisons), like (case-sensitive text pattern), ilike (case-insensitive text pattern), in (membership), is (null/boolean test), cs (contains), cd (contained by), and ov (array overlap). For like/ilike, * or % matches any sequence and _ matches one character, e.g. title=ilike.*spring*; URL-encode a literal % as %25. Use days=in.(1,2,3), title=is.null, active=is.true or active=is.false; is.not_null and is.unknown are also accepted (unknown means null). Negate a condition with not., e.g. title=not.eq.draft. Multiple filters are ANDed; use or=(title.eq.a,title.eq.b), and=(days.gte.1,days.lte.3), not.or=(...) or not.and=(...), with nested and(...) and or(...) groups as needed. cs/cd accept JSON objects or arrays on JSON fields; cs also accepts a JSON scalar. For array values or multi-link fields, use cs.{a,b}, cd.{a,b} or ov.{a,b}. JSON paths use -> for JSON and ->> for text, e.g. attributes->>has_onsen=eq.true or attributes->tags=cs.[1,2]; chain -> segments and end with ->> for text. Dot paths such as attributes.has_onsen are unsupported. Full-text, regex, range operators and any/all modifiers are unsupported."
6830
6920
  },
6831
6921
  {
6832
6922
  "name": "and",
@@ -6874,7 +6964,7 @@ export const operations = [
6874
6964
  "name": "on_conflict",
6875
6965
  "type": "string",
6876
6966
  "required": false,
6877
- "description": "POST upsert: id or one unique field with resolution=merge-duplicates|ignore-duplicates. POST accepts an optional client id matching [A-Za-z0-9_-]{1,64}; omitted ids are generated. PATCH cannot change id."
6967
+ "description": "POST upsert: id or one unique field with resolution=merge-duplicates|ignore-duplicates. With resolution=merge-duplicates, a conflicting row keeps columns omitted from the request; supplied values replace the whole field value (including JSON objects), and explicit null clears a nullable field. With resolution=ignore-duplicates, a conflicting row is left unchanged. Without a conflict, both modes insert a new row using field defaults for omitted fields. In a batch, a key present in another row is filled with null when omitted in this row unless missing=default is set; that null can overwrite a value during merge. With missing=default, omitted keys stay omitted for conflict merges (existing values are preserved); new rows use defaults, or null when no default exists. Explicit null never invokes a default. POST accepts an optional client id matching [A-Za-z0-9_-]{1,64}; omitted ids are generated. PATCH cannot change id."
6878
6968
  },
6879
6969
  {
6880
6970
  "name": "columns",
@@ -6888,7 +6978,7 @@ export const operations = [
6888
6978
  "resource": "database.databases.rest",
6889
6979
  "method": "retrieve",
6890
6980
  "summary": "Select rows",
6891
- "description": "Read matching rows with filters, selected columns and ordering. Returns at most 1000 rows per request, including when limit is omitted. Content-Range reports the actual returned interval and the total when count is requested. PATCH and DELETE are not subject to this read cap. Unlike Supabase, casts, aggregates, spread and join modifiers are unsupported. Each table supports up to 1,000,000 rows. Query budget: 8,000 ms with a shared 3,000,000-row safety ceiling. Create indexes on filtered or sorted fields, or narrow the request when it exceeds its budget. Synchronous SQLite aggregates use candidate-row throughput estimates before execution; deployed Workers freeze clocks during synchronous CPU work, so the timer is not a guaranteed server-side interrupt. Count preferences: without filters, exact, planned and estimated all use SQLite's exact b-tree count. With filters, exact counts within budget; planned skips counting and reports an unknown total (Content-Range: 0-24/*); estimated attempts exact counting only when the preflight budget allows it, otherwise reports an unknown total. Preference-Applied echoes the requested count mode. Error table: QUERY_CANCELED / PostgREST 57014 is HTTP 500, retryable=false: Query timed out: index filtered or sorted fields, or narrow the range. DATABASE_INVALID_STATE is HTTP 409 for operations on a deleting database. Cleared or nonexistent databases return DATABASE_NOT_FOUND / HTTP 404. The count is an HTTP Content-Range response header, not a JSON property. Praxis SDK/codemode methods return the body only; a page length is not a total unless you know all matches fit in that page.",
6981
+ "description": "Read matching rows with filters, selected columns and ordering. Returns at most 1000 rows per request, including when limit is omitted. Content-Range reports the actual returned interval and the total when count is requested. PATCH and DELETE are not subject to this read cap. Unlike Supabase, casts, aggregates, spread and join modifiers are unsupported. Each table supports up to 1,000,000 rows. Query budget: 8,000 ms with a shared 3,000,000-row safety ceiling. Create indexes on filtered or sorted fields, or narrow the request when it exceeds its budget. Synchronous SQLite aggregates use candidate-row throughput estimates before execution; deployed Workers freeze clocks during synchronous CPU work, so the timer is not a guaranteed server-side interrupt. Count preferences: without filters, exact, planned and estimated all use SQLite's exact b-tree count. With filters, exact counts within budget; planned skips counting and reports an unknown total (Content-Range: 0-24/*); estimated attempts exact counting only when the preflight budget allows it, otherwise reports an unknown total. Preference-Applied echoes the requested count mode. Error table: QUERY_CANCELED / PostgREST 57014 is HTTP 500, retryable=false: Query timed out: index filtered or sorted fields, or narrow the range. DATABASE_INVALID_STATE is HTTP 409 for operations on a deleting database. Cleared or nonexistent databases return DATABASE_NOT_FOUND / HTTP 404. The count is an HTTP Content-Range response header, not a JSON property. Use praxis.database.count in the SDK or codemode to return { count: number | null }; a page length is not a total unless you know all matches fit in that page.",
6892
6982
  "http": "GET",
6893
6983
  "path": "/database/v1/databases/{database_id}/rest/{table}",
6894
6984
  "streaming": "no",
@@ -6914,7 +7004,7 @@ export const operations = [
6914
7004
  "name": "{column}",
6915
7005
  "type": "string",
6916
7006
  "required": false,
6917
- "description": "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns. See the filter operator matrix."
7007
+ "description": "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns. Supported operators: eq (equal), neq (not equal; ne is not supported), gt/gte/lt/lte (comparisons), like (case-sensitive text pattern), ilike (case-insensitive text pattern), in (membership), is (null/boolean test), cs (contains), cd (contained by), and ov (array overlap). For like/ilike, * or % matches any sequence and _ matches one character, e.g. title=ilike.*spring*; URL-encode a literal % as %25. Use days=in.(1,2,3), title=is.null, active=is.true or active=is.false; is.not_null and is.unknown are also accepted (unknown means null). Negate a condition with not., e.g. title=not.eq.draft. Multiple filters are ANDed; use or=(title.eq.a,title.eq.b), and=(days.gte.1,days.lte.3), not.or=(...) or not.and=(...), with nested and(...) and or(...) groups as needed. cs/cd accept JSON objects or arrays on JSON fields; cs also accepts a JSON scalar. For array values or multi-link fields, use cs.{a,b}, cd.{a,b} or ov.{a,b}. JSON paths use -> for JSON and ->> for text, e.g. attributes->>has_onsen=eq.true or attributes->tags=cs.[1,2]; chain -> segments and end with ->> for text. Dot paths such as attributes.has_onsen are unsupported. Full-text, regex, range operators and any/all modifiers are unsupported."
6918
7008
  },
6919
7009
  {
6920
7010
  "name": "and",
@@ -6962,7 +7052,7 @@ export const operations = [
6962
7052
  "name": "on_conflict",
6963
7053
  "type": "string",
6964
7054
  "required": false,
6965
- "description": "POST upsert: id or one unique field with resolution=merge-duplicates|ignore-duplicates. POST accepts an optional client id matching [A-Za-z0-9_-]{1,64}; omitted ids are generated. PATCH cannot change id."
7055
+ "description": "POST upsert: id or one unique field with resolution=merge-duplicates|ignore-duplicates. With resolution=merge-duplicates, a conflicting row keeps columns omitted from the request; supplied values replace the whole field value (including JSON objects), and explicit null clears a nullable field. With resolution=ignore-duplicates, a conflicting row is left unchanged. Without a conflict, both modes insert a new row using field defaults for omitted fields. In a batch, a key present in another row is filled with null when omitted in this row unless missing=default is set; that null can overwrite a value during merge. With missing=default, omitted keys stay omitted for conflict merges (existing values are preserved); new rows use defaults, or null when no default exists. Explicit null never invokes a default. POST accepts an optional client id matching [A-Za-z0-9_-]{1,64}; omitted ids are generated. PATCH cannot change id."
6966
7056
  },
6967
7057
  {
6968
7058
  "name": "columns",
@@ -6976,7 +7066,7 @@ export const operations = [
6976
7066
  "resource": "database.databases.rest",
6977
7067
  "method": "head",
6978
7068
  "summary": "Count rows",
6979
- "description": "Inspect the HTTP row count and range without retrieving row data; send Prefer: count=exact for a filtered count. Returns no body and does not fetch or serialize row data. A known count determines the interval using limit/offset or Range with a default and maximum page size of 1000. Without a count preference, or when the selected count mode cannot supply a total, Content-Range is */*. Singular Accept still validates page cardinality. Unlike Supabase, planned and estimated counts do not use PostgreSQL planner estimates. Count preferences: without filters, exact, planned and estimated all use SQLite's exact b-tree count. With filters, exact counts within budget; planned skips counting and reports an unknown total (Content-Range: 0-24/*); estimated attempts exact counting only when the preflight budget allows it, otherwise reports an unknown total. Preference-Applied echoes the requested count mode. Praxis SDK/codemode methods return only the empty body, not the Content-Range response header; use an HTTP client when you need that header.",
7069
+ "description": "Inspect the HTTP row count and range without retrieving row data; send Prefer: count=exact for a filtered count. Returns no body and does not fetch or serialize row data. A known count determines the interval using limit/offset or Range with a default and maximum page size of 1000. Without a count preference, or when the selected count mode cannot supply a total, Content-Range is */*. Singular Accept still validates page cardinality. Unlike Supabase, planned and estimated counts do not use PostgreSQL planner estimates. Count preferences: without filters, exact, planned and estimated all use SQLite's exact b-tree count. With filters, exact counts within budget; planned skips counting and reports an unknown total (Content-Range: 0-24/*); estimated attempts exact counting only when the preflight budget allows it, otherwise reports an unknown total. Preference-Applied echoes the requested count mode. Use praxis.database.count in the SDK or codemode to return { count: number | null } from this header without retrieving rows.",
6980
7070
  "http": "HEAD",
6981
7071
  "path": "/database/v1/databases/{database_id}/rest/{table}",
6982
7072
  "streaming": "no",
@@ -7002,7 +7092,7 @@ export const operations = [
7002
7092
  "name": "{column}",
7003
7093
  "type": "string",
7004
7094
  "required": false,
7005
- "description": "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns. See the filter operator matrix."
7095
+ "description": "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns. Supported operators: eq (equal), neq (not equal; ne is not supported), gt/gte/lt/lte (comparisons), like (case-sensitive text pattern), ilike (case-insensitive text pattern), in (membership), is (null/boolean test), cs (contains), cd (contained by), and ov (array overlap). For like/ilike, * or % matches any sequence and _ matches one character, e.g. title=ilike.*spring*; URL-encode a literal % as %25. Use days=in.(1,2,3), title=is.null, active=is.true or active=is.false; is.not_null and is.unknown are also accepted (unknown means null). Negate a condition with not., e.g. title=not.eq.draft. Multiple filters are ANDed; use or=(title.eq.a,title.eq.b), and=(days.gte.1,days.lte.3), not.or=(...) or not.and=(...), with nested and(...) and or(...) groups as needed. cs/cd accept JSON objects or arrays on JSON fields; cs also accepts a JSON scalar. For array values or multi-link fields, use cs.{a,b}, cd.{a,b} or ov.{a,b}. JSON paths use -> for JSON and ->> for text, e.g. attributes->>has_onsen=eq.true or attributes->tags=cs.[1,2]; chain -> segments and end with ->> for text. Dot paths such as attributes.has_onsen are unsupported. Full-text, regex, range operators and any/all modifiers are unsupported."
7006
7096
  },
7007
7097
  {
7008
7098
  "name": "and",
@@ -7050,7 +7140,7 @@ export const operations = [
7050
7140
  "name": "on_conflict",
7051
7141
  "type": "string",
7052
7142
  "required": false,
7053
- "description": "POST upsert: id or one unique field with resolution=merge-duplicates|ignore-duplicates. POST accepts an optional client id matching [A-Za-z0-9_-]{1,64}; omitted ids are generated. PATCH cannot change id."
7143
+ "description": "POST upsert: id or one unique field with resolution=merge-duplicates|ignore-duplicates. With resolution=merge-duplicates, a conflicting row keeps columns omitted from the request; supplied values replace the whole field value (including JSON objects), and explicit null clears a nullable field. With resolution=ignore-duplicates, a conflicting row is left unchanged. Without a conflict, both modes insert a new row using field defaults for omitted fields. In a batch, a key present in another row is filled with null when omitted in this row unless missing=default is set; that null can overwrite a value during merge. With missing=default, omitted keys stay omitted for conflict merges (existing values are preserved); new rows use defaults, or null when no default exists. Explicit null never invokes a default. POST accepts an optional client id matching [A-Za-z0-9_-]{1,64}; omitted ids are generated. PATCH cannot change id."
7054
7144
  },
7055
7145
  {
7056
7146
  "name": "columns",
@@ -7090,7 +7180,7 @@ export const operations = [
7090
7180
  "name": "{column}",
7091
7181
  "type": "string",
7092
7182
  "required": false,
7093
- "description": "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns. See the filter operator matrix."
7183
+ "description": "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns. Supported operators: eq (equal), neq (not equal; ne is not supported), gt/gte/lt/lte (comparisons), like (case-sensitive text pattern), ilike (case-insensitive text pattern), in (membership), is (null/boolean test), cs (contains), cd (contained by), and ov (array overlap). For like/ilike, * or % matches any sequence and _ matches one character, e.g. title=ilike.*spring*; URL-encode a literal % as %25. Use days=in.(1,2,3), title=is.null, active=is.true or active=is.false; is.not_null and is.unknown are also accepted (unknown means null). Negate a condition with not., e.g. title=not.eq.draft. Multiple filters are ANDed; use or=(title.eq.a,title.eq.b), and=(days.gte.1,days.lte.3), not.or=(...) or not.and=(...), with nested and(...) and or(...) groups as needed. cs/cd accept JSON objects or arrays on JSON fields; cs also accepts a JSON scalar. For array values or multi-link fields, use cs.{a,b}, cd.{a,b} or ov.{a,b}. JSON paths use -> for JSON and ->> for text, e.g. attributes->>has_onsen=eq.true or attributes->tags=cs.[1,2]; chain -> segments and end with ->> for text. Dot paths such as attributes.has_onsen are unsupported. Full-text, regex, range operators and any/all modifiers are unsupported."
7094
7184
  },
7095
7185
  {
7096
7186
  "name": "and",
@@ -7138,7 +7228,7 @@ export const operations = [
7138
7228
  "name": "on_conflict",
7139
7229
  "type": "string",
7140
7230
  "required": false,
7141
- "description": "POST upsert: id or one unique field with resolution=merge-duplicates|ignore-duplicates. POST accepts an optional client id matching [A-Za-z0-9_-]{1,64}; omitted ids are generated. PATCH cannot change id."
7231
+ "description": "POST upsert: id or one unique field with resolution=merge-duplicates|ignore-duplicates. With resolution=merge-duplicates, a conflicting row keeps columns omitted from the request; supplied values replace the whole field value (including JSON objects), and explicit null clears a nullable field. With resolution=ignore-duplicates, a conflicting row is left unchanged. Without a conflict, both modes insert a new row using field defaults for omitted fields. In a batch, a key present in another row is filled with null when omitted in this row unless missing=default is set; that null can overwrite a value during merge. With missing=default, omitted keys stay omitted for conflict merges (existing values are preserved); new rows use defaults, or null when no default exists. Explicit null never invokes a default. POST accepts an optional client id matching [A-Za-z0-9_-]{1,64}; omitted ids are generated. PATCH cannot change id."
7142
7232
  },
7143
7233
  {
7144
7234
  "name": "columns",
@@ -7156,7 +7246,7 @@ export const operations = [
7156
7246
  "resource": "database.databases.rest",
7157
7247
  "method": "create",
7158
7248
  "summary": "Insert rows",
7159
- "description": "Insert rows into an existing table after defining its fields; at most 500 rows per request. Each request is atomic: any failure rolls back the entire batch. There are no transactions across requests.\nRows are filled to the union of their keys with null; send Prefer: missing=default to use field defaults for missing keys.\nThe default is return=minimal: success returns HTTP 201 with an empty body. Send Prefer: return=representation to return the inserted rows. Unlike Supabase, upsert conflicts can target only id or one unique field, not a composite key. Each table supports up to 1,000,000 rows.",
7249
+ "description": "Insert rows into an existing table after defining its fields; at most 500 rows per request. Each request is atomic: any failure rolls back the entire batch. There are no transactions across requests.\nRows are filled to the union of their keys with null; send Prefer: missing=default to use field defaults for missing keys.\nThe default is return=minimal: success returns HTTP 201 with an empty body. Send Prefer: return=representation to return the inserted rows. With resolution=merge-duplicates, a conflicting row keeps columns omitted from the request; supplied values replace the whole field value (including JSON objects), and explicit null clears a nullable field. With resolution=ignore-duplicates, a conflicting row is left unchanged. Without a conflict, both modes insert a new row using field defaults for omitted fields. In a batch, a key present in another row is filled with null when omitted in this row unless missing=default is set; that null can overwrite a value during merge. With missing=default, omitted keys stay omitted for conflict merges (existing values are preserved); new rows use defaults, or null when no default exists. Explicit null never invokes a default. Unlike Supabase, upsert conflicts can target only id or one unique field, not a composite key. Each table supports up to 1,000,000 rows.",
7160
7250
  "http": "POST",
7161
7251
  "path": "/database/v1/databases/{database_id}/rest/{table}",
7162
7252
  "streaming": "no",
@@ -7182,7 +7272,7 @@ export const operations = [
7182
7272
  "name": "{column}",
7183
7273
  "type": "string",
7184
7274
  "required": false,
7185
- "description": "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns. See the filter operator matrix."
7275
+ "description": "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns. Supported operators: eq (equal), neq (not equal; ne is not supported), gt/gte/lt/lte (comparisons), like (case-sensitive text pattern), ilike (case-insensitive text pattern), in (membership), is (null/boolean test), cs (contains), cd (contained by), and ov (array overlap). For like/ilike, * or % matches any sequence and _ matches one character, e.g. title=ilike.*spring*; URL-encode a literal % as %25. Use days=in.(1,2,3), title=is.null, active=is.true or active=is.false; is.not_null and is.unknown are also accepted (unknown means null). Negate a condition with not., e.g. title=not.eq.draft. Multiple filters are ANDed; use or=(title.eq.a,title.eq.b), and=(days.gte.1,days.lte.3), not.or=(...) or not.and=(...), with nested and(...) and or(...) groups as needed. cs/cd accept JSON objects or arrays on JSON fields; cs also accepts a JSON scalar. For array values or multi-link fields, use cs.{a,b}, cd.{a,b} or ov.{a,b}. JSON paths use -> for JSON and ->> for text, e.g. attributes->>has_onsen=eq.true or attributes->tags=cs.[1,2]; chain -> segments and end with ->> for text. Dot paths such as attributes.has_onsen are unsupported. Full-text, regex, range operators and any/all modifiers are unsupported."
7186
7276
  },
7187
7277
  {
7188
7278
  "name": "and",
@@ -7230,7 +7320,7 @@ export const operations = [
7230
7320
  "name": "on_conflict",
7231
7321
  "type": "string",
7232
7322
  "required": false,
7233
- "description": "POST upsert: id or one unique field with resolution=merge-duplicates|ignore-duplicates. POST accepts an optional client id matching [A-Za-z0-9_-]{1,64}; omitted ids are generated. PATCH cannot change id."
7323
+ "description": "POST upsert: id or one unique field with resolution=merge-duplicates|ignore-duplicates. With resolution=merge-duplicates, a conflicting row keeps columns omitted from the request; supplied values replace the whole field value (including JSON objects), and explicit null clears a nullable field. With resolution=ignore-duplicates, a conflicting row is left unchanged. Without a conflict, both modes insert a new row using field defaults for omitted fields. In a batch, a key present in another row is filled with null when omitted in this row unless missing=default is set; that null can overwrite a value during merge. With missing=default, omitted keys stay omitted for conflict merges (existing values are preserved); new rows use defaults, or null when no default exists. Explicit null never invokes a default. POST accepts an optional client id matching [A-Za-z0-9_-]{1,64}; omitted ids are generated. PATCH cannot change id."
7234
7324
  },
7235
7325
  {
7236
7326
  "name": "columns",
@@ -7282,7 +7372,7 @@ export const operations = [
7282
7372
  "resource": "database.databases.tables",
7283
7373
  "method": "create",
7284
7374
  "summary": "Create table",
7285
- "description": "Creates a table together with its initial fields in one call and returns it (HTTP 201) with generated tbl_ and fld_ ids. name must match ^[a-z_][a-z0-9_]{0,62}$ and be unused in this database (duplicate: 409 UNIQUE_VIOLATION). fields is required and may be an empty array; fields can also be added later with databaseAddField. Limits: 50 tables per database, 64 fields per table, and 16 indexed or unique fields per table; exceeding one returns 400 LIMIT_EXCEEDED. Every row also has a system id column, which is not declared as a field. Insert data afterwards with databaseInsert. Unlike Supabase, define schema with this table API and the field APIs; PostgreSQL DDL and SQL migration files cannot be submitted. Each table supports up to 1,000,000 rows.",
7375
+ "description": "Creates a table together with its initial fields in one call and returns it (HTTP 201) with generated tbl_ and fld_ ids. name must match ^[a-z_][a-z0-9_]{0,62}$ and be unused in this database (duplicate: 409 UNIQUE_VIOLATION). fields is required and may be an empty array; fields can also be added later with databaseAddField. Limits: 50 tables per database, 64 fields per table, and 16 indexed or unique fields per table; exceeding one returns 400 LIMIT_EXCEEDED. Fields default to indexed:false. Set indexed:true explicitly for fields used in filters or ordering. Only indexed:true or unique:true consumes one of the 16 indexed-or-unique field slots; a field with both consumes one slot. Unique fields still consume a slot even with indexed:false. Existing fields are unchanged. Minimal field example: {\"name\":\"notes\",\"type\":\"string\",\"indexed\":false}. Every row also has a system id column, which is not declared as a field. Insert data afterwards with databaseInsert. Unlike Supabase, define schema with this table API and the field APIs; PostgreSQL DDL and SQL migration files cannot be submitted. Each table supports up to 1,000,000 rows.",
7286
7376
  "http": "POST",
7287
7377
  "path": "/database/v1/databases/{database_id}/tables",
7288
7378
  "streaming": "no",
@@ -7403,7 +7493,7 @@ export const operations = [
7403
7493
  "resource": "database.databases.tables.fields",
7404
7494
  "method": "create",
7405
7495
  "summary": "Add field",
7406
- "description": "Adds one field to an existing table and returns the updated table (HTTP 201). Required inputs are name (lowercase letters, digits and underscores; id and names starting with _ are reserved) and type (string, integer, number, boolean, datetime, json or link); json needs options.schema and link needs options.linked_table_id and options.multiple. Adding a required field to a table that already has rows needs a default, otherwise the call fails with 400 VALIDATION_FAILED; a default is written into every existing row. Scalar fields are indexed by default, while json and link fields cannot be indexed. Limits: 64 fields and 16 indexed or unique fields per table (400 LIMIT_EXCEEDED). Unlike Supabase, schema evolution uses field definitions rather than ALTER TABLE statements or SQL migrations.",
7496
+ "description": "Adds one field to an existing table and returns the updated table (HTTP 201). Required inputs are name (lowercase letters, digits and underscores; id and names starting with _ are reserved) and type (string, integer, number, boolean, datetime, json or link); json needs options.schema and link needs options.linked_table_id and options.multiple. Adding a required field to a table that already has rows needs a default, otherwise the call fails with 400 VALIDATION_FAILED; a default is written into every existing row. Fields default to indexed:false. Set indexed:true explicitly for fields used in filters or ordering. Only indexed:true or unique:true consumes one of the 16 indexed-or-unique field slots; a field with both consumes one slot. Unique fields still consume a slot even with indexed:false. Existing fields are unchanged. Minimal field example: {\"name\":\"notes\",\"type\":\"string\",\"indexed\":false}. JSON and link fields cannot be indexed. Limits: 64 fields and 16 indexed or unique fields per table (400 LIMIT_EXCEEDED). Unlike Supabase, schema evolution uses field definitions rather than ALTER TABLE statements or SQL migrations.",
7407
7497
  "http": "POST",
7408
7498
  "path": "/database/v1/databases/{database_id}/tables/{table}/fields",
7409
7499
  "streaming": "no",
@@ -7572,7 +7662,7 @@ export const operations = [
7572
7662
  "resource": "file.files",
7573
7663
  "method": "create",
7574
7664
  "summary": "Upload file",
7575
- "description": "Upload a file to reuse in conversations or attach to a knowledge base. Unlike OpenAI Files, uploads must be nonempty and at most 104857600 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. OpenAI Uploads chunking is not supported. 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–2592000), or praxis[expires_in_seconds] (3600–7776000), never both. Without expiry, the file persists until deleted.",
7665
+ "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–2592000), or praxis[expires_in_seconds] (3600–7776000), never both. Without expiry, the file persists until deleted.",
7576
7666
  "http": "POST",
7577
7667
  "path": "/file/v1/files",
7578
7668
  "streaming": "no",
@@ -7587,7 +7677,7 @@ export const operations = [
7587
7677
  "name": "file",
7588
7678
  "type": "string",
7589
7679
  "required": true,
7590
- "description": "File bytes in one multipart file part, not a filename or file ID. The file must be nonempty and at most 104857600 bytes; its content determines the MIME type."
7680
+ "description": "File bytes in one multipart file part, not a filename or file ID. The file must be nonempty and at most 100000000 bytes; its content determines the MIME type."
7591
7681
  },
7592
7682
  {
7593
7683
  "name": "purpose",
@@ -7636,7 +7726,7 @@ export const operations = [
7636
7726
  "resource": "file.files",
7637
7727
  "method": "retrieve",
7638
7728
  "summary": "Retrieve file",
7639
- "description": "Retrieve metadata for a live file owned by your tenant. Use its file_dp_ ID from upload or list. Missing, deleted, expired and other-tenant files return 404; use the content endpoint to download the bytes.",
7729
+ "description": "Retrieve metadata for a live file owned by your tenant. Use its file- ID from upload or list. Missing, deleted, expired and other-tenant files return 404; use the content endpoint to download the bytes.",
7640
7730
  "http": "GET",
7641
7731
  "path": "/file/v1/files/{file_id}",
7642
7732
  "streaming": "no",
@@ -7653,7 +7743,7 @@ export const operations = [
7653
7743
  "resource": "file.files",
7654
7744
  "method": "retrieveContent",
7655
7745
  "summary": "Retrieve file content",
7656
- "description": "Download the original bytes of a live file owned by your tenant. Supply its file_dp_ ID from upload or list. A single byte Range can return a partial response; a range outside the file returns 416. Missing, deleted, expired and other-tenant files return 404.",
7746
+ "description": "Download the original bytes of a live file owned by your tenant. Supply its file- ID from upload or list. A single byte Range can return a partial response; a range outside the file returns 416. Missing, deleted, expired and other-tenant files return 404.",
7657
7747
  "http": "GET",
7658
7748
  "path": "/file/v1/files/{file_id}/content",
7659
7749
  "streaming": "no",
@@ -7666,6 +7756,152 @@ export const operations = [
7666
7756
  ],
7667
7757
  "query": []
7668
7758
  },
7759
+ {
7760
+ "resource": "file.uploads",
7761
+ "method": "create",
7762
+ "summary": "Create an upload",
7763
+ "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.",
7764
+ "http": "POST",
7765
+ "path": "/file/v1/uploads",
7766
+ "streaming": "no",
7767
+ "pagination": false,
7768
+ "pathParams": [],
7769
+ "query": [],
7770
+ "body": {
7771
+ "required": true,
7772
+ "fields": [
7773
+ {
7774
+ "name": "bytes",
7775
+ "type": "integer",
7776
+ "required": true,
7777
+ "description": "Exact complete file length in bytes, from 1 through 2147483648 (2 GiB); the sum of completed parts must match."
7778
+ },
7779
+ {
7780
+ "name": "filename",
7781
+ "type": "string",
7782
+ "required": true,
7783
+ "description": "Filename for the resulting file, at most 255 UTF-8 bytes."
7784
+ },
7785
+ {
7786
+ "name": "mime_type",
7787
+ "type": "string",
7788
+ "required": true,
7789
+ "description": "Declared MIME type; validated against the assembled content."
7790
+ },
7791
+ {
7792
+ "name": "purpose",
7793
+ "type": "string",
7794
+ "enum": [
7795
+ "user_data",
7796
+ "assistants",
7797
+ "vision"
7798
+ ],
7799
+ "required": true,
7800
+ "description": "Use user_data for conversation attachments, assistants for assistant files, or vision for PNG, JPEG, GIF and WebP images."
7801
+ },
7802
+ {
7803
+ "name": "expires_after",
7804
+ "type": "object",
7805
+ "required": false,
7806
+ "description": "Optional expiry policy for the resulting file; omission retains the file until deletion."
7807
+ },
7808
+ {
7809
+ "name": "part_size",
7810
+ "type": "integer",
7811
+ "required": false,
7812
+ "description": "Optional fixed part size in bytes, 5242880–64000000. Requires part_number on every part; retries of identical bytes at the same number return the same part. Omit to use arbitrary-sized parts."
7813
+ }
7814
+ ]
7815
+ }
7816
+ },
7817
+ {
7818
+ "resource": "file.uploads",
7819
+ "method": "cancel",
7820
+ "summary": "Cancel an upload",
7821
+ "description": "Cancel an unfinished upload using upload_id from create and release its reserved storage. Further parts and completion are rejected. Cancelling an already cancelled upload returns the same terminal result; a completed upload cannot be cancelled. Delete its resulting file instead.",
7822
+ "http": "POST",
7823
+ "path": "/file/v1/uploads/{upload_id}/cancel",
7824
+ "streaming": "no",
7825
+ "pagination": false,
7826
+ "pathParams": [
7827
+ {
7828
+ "name": "upload_id",
7829
+ "sdkName": "upload_id"
7830
+ }
7831
+ ],
7832
+ "query": []
7833
+ },
7834
+ {
7835
+ "resource": "file.uploads",
7836
+ "method": "complete",
7837
+ "summary": "Complete an upload",
7838
+ "description": "Assemble the uploaded parts into a file. Supply upload_id from create and part_ids from addPart in file byte order; their sizes must total the declared bytes. Optional md5 verifies the assembled content. Retrying identical part_ids and normalized md5 returns the same result; different inputs return 409. Unlike OpenAI, completed can contain a file still processing (status uploaded). Poll files.retrieve using file.id until status processed (own face state active); error, expiry or 404 means processing failed and the file cannot be used.",
7839
+ "http": "POST",
7840
+ "path": "/file/v1/uploads/{upload_id}/complete",
7841
+ "streaming": "no",
7842
+ "pagination": false,
7843
+ "pathParams": [
7844
+ {
7845
+ "name": "upload_id",
7846
+ "sdkName": "upload_id"
7847
+ }
7848
+ ],
7849
+ "query": [],
7850
+ "body": {
7851
+ "required": true,
7852
+ "fields": [
7853
+ {
7854
+ "name": "part_ids",
7855
+ "type": "array",
7856
+ "itemType": "string",
7857
+ "required": true,
7858
+ "description": "All part IDs in concatenation order, without duplicates. Fixed-size uploads require increasing part_number order."
7859
+ },
7860
+ {
7861
+ "name": "md5",
7862
+ "type": "string",
7863
+ "required": false,
7864
+ "description": "Optional whole-file MD5 as 32 hexadecimal characters; verified after assembly."
7865
+ }
7866
+ ]
7867
+ }
7868
+ },
7869
+ {
7870
+ "resource": "file.uploads.parts",
7871
+ "method": "create",
7872
+ "summary": "Add an upload part",
7873
+ "description": "Send one nonempty part as the multipart data field, at most 64000000 bytes. Parts may arrive concurrently in any order. Use upload_id from create. For a fixed-size upload, supply part_number starting at 1 and exactly part_size bytes except for the final remainder; retry the same number with identical bytes to recover its part ID. Without part_size, each request creates a new part and part_number is ignored. Save the returned part IDs for complete.",
7874
+ "http": "POST",
7875
+ "path": "/file/v1/uploads/{upload_id}/parts",
7876
+ "streaming": "no",
7877
+ "pagination": false,
7878
+ "multipart": true,
7879
+ "pathParams": [
7880
+ {
7881
+ "name": "upload_id",
7882
+ "sdkName": "upload_id"
7883
+ }
7884
+ ],
7885
+ "query": [
7886
+ {
7887
+ "name": "part_number",
7888
+ "type": "integer",
7889
+ "required": false,
7890
+ "description": "Required when create set part_size; 1 through ceil(bytes / part_size). Ignored for general uploads."
7891
+ }
7892
+ ],
7893
+ "body": {
7894
+ "required": true,
7895
+ "fields": [
7896
+ {
7897
+ "name": "data",
7898
+ "type": "string",
7899
+ "required": true,
7900
+ "description": "Raw bytes of this part, nonempty and at most 64000000 bytes."
7901
+ }
7902
+ ]
7903
+ }
7904
+ },
7669
7905
  {
7670
7906
  "resource": "knowledge.vectorStores",
7671
7907
  "method": "list",
@@ -11796,7 +12032,7 @@ export const operations = [
11796
12032
  "name": "message",
11797
12033
  "type": "string",
11798
12034
  "required": true,
11799
- "description": "Problem description and original error text; at most 4096 Unicode code points."
12035
+ "description": "Problem description, at most 4096 Unicode code points; may be empty only when contexts.praxis.error.message is a non-empty string."
11800
12036
  },
11801
12037
  {
11802
12038
  "name": "contact_email",
@@ -12094,7 +12330,7 @@ export const operations = [
12094
12330
  "resource": "sandbox.sandboxes",
12095
12331
  "method": "create",
12096
12332
  "summary": "Create sandbox (v2)",
12097
- "description": "Start an isolated environment using a templateID from templates.list, then retain sandboxID for lifecycle calls. Unlike E2B, templateID resolves to your ready Environment or a public Base; omit it to use the default base template (`base`), as the E2B SDK does. timeout is seconds from creation and defaults to 300. envVars supplies environment variables and metadata stores your string labels. All system communication is secured; use the returned envdAccessToken for files and commands through the envd data plane, not the management methods. Never print that token.",
12333
+ "description": "Create a sandbox from the template. All system communication with the sandbox is secured.",
12098
12334
  "http": "POST",
12099
12335
  "path": "/sandbox/v1/sandboxes",
12100
12336
  "streaming": "no",
@@ -12108,7 +12344,7 @@ export const operations = [
12108
12344
  "name": "templateID",
12109
12345
  "type": "string",
12110
12346
  "required": true,
12111
- "description": "Template ID or alias from templates.list; resolves to your ready Environment first, then a public Base. Omit it to use the default base template (`base`)."
12347
+ "description": "Identifier of the required template"
12112
12348
  },
12113
12349
  {
12114
12350
  "name": "timeout",
@@ -12246,7 +12482,7 @@ export const operations = [
12246
12482
  "resource": "sandbox.sandboxes",
12247
12483
  "method": "connect",
12248
12484
  "summary": "Connect sandbox (v2)",
12249
- "description": "Reconnect to an existing sandbox and resume it if paused. The optional timeout is seconds from now and defaults to 300; a later existing deadline is preserved. A running sandbox returns 200 and a resumed sandbox returns 201. Read sandboxID, domain and envdAccessToken from the response for subsequent data-plane access; never treat connecting as executing a command.",
12485
+ "description": "Returns sandbox details. If the sandbox is paused, it will be resumed. TTL is only extended. The request body is optional; an omitted timeout defaults to 300 seconds.",
12250
12486
  "http": "POST",
12251
12487
  "path": "/sandbox/v1/sandboxes/{sandboxID}/connect",
12252
12488
  "streaming": "no",
@@ -12405,7 +12641,7 @@ export const operations = [
12405
12641
  "resource": "sandbox.sandboxes.metrics",
12406
12642
  "method": "list",
12407
12643
  "summary": "Sandbox metrics",
12408
- "description": "Read CPU, memory and disk usage over the requested interval; start and end are Unix seconds. Unlike E2B, light sandboxes do not provide metrics; check the returned capabilities before requesting them.",
12644
+ "description": "Read CPU, memory and disk usage samples of a sandbox over a time window. Use it to size a sandbox or find out why it is slow. start and end are Unix timestamps in seconds; without them the recent samples are returned. An unknown id answers 404.",
12409
12645
  "http": "GET",
12410
12646
  "path": "/sandbox/v1/sandboxes/{sandboxID}/metrics",
12411
12647
  "streaming": "no",
@@ -12489,7 +12725,7 @@ export const operations = [
12489
12725
  "resource": "sandbox.sandboxes",
12490
12726
  "method": "pause",
12491
12727
  "summary": "Pause sandbox",
12492
- "description": "Suspend a running sandbox for later connection; use delete to discard it instead. Unlike E2B, light sandboxes preserve disk rather than memory, and persistent sandboxes can resume on data-plane traffic even when autoResume is false. Inspect paused state with the management retrieve operation to avoid waking the sandbox. Explicitly ephemeral sandboxes cannot pause. memory defaults to true, but only a memory-capable sandbox preserves running processes; memory=false saves disk state and resumes with a cold boot. Success returns 204; connect resumes the saved sandbox.",
12728
+ "description": "Pause a running sandbox, keeping its files and memory so that connectSandbox can resume it later. Use it to stop paying for compute without losing state; to discard the sandbox use killSandbox. Success answers 204. A sandbox that is not running answers 409.",
12493
12729
  "http": "POST",
12494
12730
  "path": "/sandbox/v1/sandboxes/{sandboxID}/pause",
12495
12731
  "streaming": "no",
@@ -12881,7 +13117,7 @@ export const operations = [
12881
13117
  "resource": "sandbox.templates",
12882
13118
  "method": "list",
12883
13119
  "summary": "List templates (v2)",
12884
- "description": "Choose a templateID before creating a sandbox. Unlike E2B, this catalog lists your ready Environments and public Bases; use a returned ID or alias; `base` is the default template that create uses when templateID is omitted. Page through results using nextToken.",
13120
+ "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.",
12885
13121
  "http": "GET",
12886
13122
  "path": "/sandbox/v1/templates",
12887
13123
  "streaming": "no",
@@ -13642,6 +13878,1466 @@ export const operations = [
13642
13878
  ]
13643
13879
  }
13644
13880
  },
13881
+ {
13882
+ "resource": "ticket.activity",
13883
+ "method": "retrieve",
13884
+ "summary": "List activity",
13885
+ "description": "List activity within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Pass next_page_token as page_token to continue with the same filter. Service authorization applies to the verified human subject.",
13886
+ "http": "GET",
13887
+ "path": "/ticket/v1/activity",
13888
+ "streaming": "no",
13889
+ "pagination": false,
13890
+ "pathParams": [],
13891
+ "query": [
13892
+ {
13893
+ "name": "repository",
13894
+ "type": "string",
13895
+ "required": false,
13896
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
13897
+ },
13898
+ {
13899
+ "name": "page_size",
13900
+ "type": "integer",
13901
+ "required": false,
13902
+ "description": "Records per page; defaults to 30, maximum 100."
13903
+ },
13904
+ {
13905
+ "name": "page_token",
13906
+ "type": "string",
13907
+ "required": false,
13908
+ "description": "Cursor returned as next_page_token; omit for the first page."
13909
+ },
13910
+ {
13911
+ "name": "filter",
13912
+ "type": "string",
13913
+ "required": false,
13914
+ "description": "Activity qualifiers: actor, actor-kind, action, ticket, source and since; passed unchanged to the service."
13915
+ }
13916
+ ]
13917
+ },
13918
+ {
13919
+ "resource": "ticket.comments",
13920
+ "method": "delete",
13921
+ "summary": "Remove comments",
13922
+ "description": "Remove comments 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.",
13923
+ "http": "DELETE",
13924
+ "path": "/ticket/v1/comments/{id}",
13925
+ "streaming": "no",
13926
+ "pagination": false,
13927
+ "pathParams": [
13928
+ {
13929
+ "name": "id",
13930
+ "sdkName": "id"
13931
+ }
13932
+ ],
13933
+ "query": [
13934
+ {
13935
+ "name": "repository",
13936
+ "type": "string",
13937
+ "required": false,
13938
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
13939
+ }
13940
+ ]
13941
+ },
13942
+ {
13943
+ "resource": "ticket.comments",
13944
+ "method": "retrieve",
13945
+ "summary": "Read comments",
13946
+ "description": "Read comments 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.",
13947
+ "http": "GET",
13948
+ "path": "/ticket/v1/comments/{id}",
13949
+ "streaming": "no",
13950
+ "pagination": false,
13951
+ "pathParams": [
13952
+ {
13953
+ "name": "id",
13954
+ "sdkName": "id"
13955
+ }
13956
+ ],
13957
+ "query": [
13958
+ {
13959
+ "name": "repository",
13960
+ "type": "string",
13961
+ "required": false,
13962
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
13963
+ }
13964
+ ]
13965
+ },
13966
+ {
13967
+ "resource": "ticket.comments",
13968
+ "method": "update",
13969
+ "summary": "Update comments",
13970
+ "description": "Update comments 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.",
13971
+ "http": "PATCH",
13972
+ "path": "/ticket/v1/comments/{id}",
13973
+ "streaming": "no",
13974
+ "pagination": false,
13975
+ "pathParams": [
13976
+ {
13977
+ "name": "id",
13978
+ "sdkName": "id"
13979
+ }
13980
+ ],
13981
+ "query": [
13982
+ {
13983
+ "name": "repository",
13984
+ "type": "string",
13985
+ "required": false,
13986
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
13987
+ }
13988
+ ],
13989
+ "body": {
13990
+ "required": true,
13991
+ "fields": [
13992
+ {
13993
+ "name": "body",
13994
+ "type": "string",
13995
+ "required": true,
13996
+ "description": "Markdown text, at most 65536 characters."
13997
+ },
13998
+ {
13999
+ "name": "in_reply_to",
14000
+ "type": "string",
14001
+ "required": false,
14002
+ "description": "Opaque identifier returned by this resource's create or list operation."
14003
+ }
14004
+ ]
14005
+ }
14006
+ },
14007
+ {
14008
+ "resource": "ticket.comments.reactions",
14009
+ "method": "list",
14010
+ "summary": "List reactions",
14011
+ "description": "List reactions within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Pass next_page_token as page_token to continue with the same filter. Service authorization applies to the verified human subject.",
14012
+ "http": "GET",
14013
+ "path": "/ticket/v1/comments/{id}/reactions",
14014
+ "streaming": "no",
14015
+ "pagination": false,
14016
+ "pathParams": [
14017
+ {
14018
+ "name": "id",
14019
+ "sdkName": "id"
14020
+ }
14021
+ ],
14022
+ "query": [
14023
+ {
14024
+ "name": "repository",
14025
+ "type": "string",
14026
+ "required": false,
14027
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14028
+ },
14029
+ {
14030
+ "name": "page_size",
14031
+ "type": "integer",
14032
+ "required": false,
14033
+ "description": "Records per page; defaults to 30, maximum 100."
14034
+ },
14035
+ {
14036
+ "name": "page_token",
14037
+ "type": "string",
14038
+ "required": false,
14039
+ "description": "Cursor returned as next_page_token; omit for the first page."
14040
+ }
14041
+ ]
14042
+ },
14043
+ {
14044
+ "resource": "ticket.comments.reactions",
14045
+ "method": "create",
14046
+ "summary": "Create or add reactions",
14047
+ "description": "Create or add reactions 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.",
14048
+ "http": "POST",
14049
+ "path": "/ticket/v1/comments/{id}/reactions",
14050
+ "streaming": "no",
14051
+ "pagination": false,
14052
+ "pathParams": [
14053
+ {
14054
+ "name": "id",
14055
+ "sdkName": "id"
14056
+ }
14057
+ ],
14058
+ "query": [
14059
+ {
14060
+ "name": "repository",
14061
+ "type": "string",
14062
+ "required": false,
14063
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14064
+ }
14065
+ ],
14066
+ "body": {
14067
+ "required": true,
14068
+ "fields": [
14069
+ {
14070
+ "name": "content",
14071
+ "type": "string",
14072
+ "enum": [
14073
+ "+1",
14074
+ "-1",
14075
+ "laugh",
14076
+ "confused",
14077
+ "heart",
14078
+ "hooray",
14079
+ "eyes",
14080
+ "rocket"
14081
+ ],
14082
+ "required": true,
14083
+ "description": "Reaction to add or remove: +1 approves, -1 disapproves, laugh, confused, heart, hooray, eyes, or rocket."
14084
+ }
14085
+ ]
14086
+ }
14087
+ },
14088
+ {
14089
+ "resource": "ticket.comments.reactions",
14090
+ "method": "delete",
14091
+ "summary": "Remove reactions",
14092
+ "description": "Remove reactions 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.",
14093
+ "http": "DELETE",
14094
+ "path": "/ticket/v1/comments/{id}/reactions/{content}",
14095
+ "streaming": "no",
14096
+ "pagination": false,
14097
+ "pathParams": [
14098
+ {
14099
+ "name": "id",
14100
+ "sdkName": "id"
14101
+ },
14102
+ {
14103
+ "name": "content",
14104
+ "sdkName": "content"
14105
+ }
14106
+ ],
14107
+ "query": [
14108
+ {
14109
+ "name": "repository",
14110
+ "type": "string",
14111
+ "required": false,
14112
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14113
+ }
14114
+ ]
14115
+ },
14116
+ {
14117
+ "resource": "ticket.labels",
14118
+ "method": "list",
14119
+ "summary": "List labels",
14120
+ "description": "List labels within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Pass next_page_token as page_token to continue with the same filter. Service authorization applies to the verified human subject.",
14121
+ "http": "GET",
14122
+ "path": "/ticket/v1/labels",
14123
+ "streaming": "no",
14124
+ "pagination": false,
14125
+ "pathParams": [],
14126
+ "query": [
14127
+ {
14128
+ "name": "repository",
14129
+ "type": "string",
14130
+ "required": false,
14131
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14132
+ },
14133
+ {
14134
+ "name": "page_size",
14135
+ "type": "integer",
14136
+ "required": false,
14137
+ "description": "Records per page; defaults to 30, maximum 100."
14138
+ },
14139
+ {
14140
+ "name": "page_token",
14141
+ "type": "string",
14142
+ "required": false,
14143
+ "description": "Cursor returned as next_page_token; omit for the first page."
14144
+ }
14145
+ ]
14146
+ },
14147
+ {
14148
+ "resource": "ticket.labels",
14149
+ "method": "create",
14150
+ "summary": "Create or add labels",
14151
+ "description": "Create or add labels within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Writes complete synchronously; read the returned resource to observe the result. Organization owner or admin authority is required for this write; API keys without role information act as members.",
14152
+ "http": "POST",
14153
+ "path": "/ticket/v1/labels",
14154
+ "streaming": "no",
14155
+ "pagination": false,
14156
+ "pathParams": [],
14157
+ "query": [
14158
+ {
14159
+ "name": "repository",
14160
+ "type": "string",
14161
+ "required": false,
14162
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14163
+ }
14164
+ ],
14165
+ "body": {
14166
+ "required": true,
14167
+ "fields": [
14168
+ {
14169
+ "name": "name",
14170
+ "type": "string",
14171
+ "required": true,
14172
+ "description": "Case-insensitive label name within the repository."
14173
+ },
14174
+ {
14175
+ "name": "color",
14176
+ "type": "string",
14177
+ "required": true,
14178
+ "description": "Six hexadecimal digits without #."
14179
+ },
14180
+ {
14181
+ "name": "description",
14182
+ "type": "string",
14183
+ "required": false,
14184
+ "description": "Label's purpose."
14185
+ }
14186
+ ]
14187
+ }
14188
+ },
14189
+ {
14190
+ "resource": "ticket.labels",
14191
+ "method": "delete",
14192
+ "summary": "Remove labels",
14193
+ "description": "Remove labels within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Writes complete synchronously; read the returned resource to observe the result. Organization owner or admin authority is required for this write; API keys without role information act as members.",
14194
+ "http": "DELETE",
14195
+ "path": "/ticket/v1/labels/{name}",
14196
+ "streaming": "no",
14197
+ "pagination": false,
14198
+ "pathParams": [
14199
+ {
14200
+ "name": "name",
14201
+ "sdkName": "name"
14202
+ }
14203
+ ],
14204
+ "query": [
14205
+ {
14206
+ "name": "repository",
14207
+ "type": "string",
14208
+ "required": false,
14209
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14210
+ }
14211
+ ]
14212
+ },
14213
+ {
14214
+ "resource": "ticket.labels",
14215
+ "method": "update",
14216
+ "summary": "Update labels",
14217
+ "description": "Update labels within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Writes complete synchronously; read the returned resource to observe the result. Organization owner or admin authority is required for this write; API keys without role information act as members.",
14218
+ "http": "PATCH",
14219
+ "path": "/ticket/v1/labels/{name}",
14220
+ "streaming": "no",
14221
+ "pagination": false,
14222
+ "pathParams": [
14223
+ {
14224
+ "name": "name",
14225
+ "sdkName": "name"
14226
+ }
14227
+ ],
14228
+ "query": [
14229
+ {
14230
+ "name": "repository",
14231
+ "type": "string",
14232
+ "required": false,
14233
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14234
+ }
14235
+ ],
14236
+ "body": {
14237
+ "required": true,
14238
+ "fields": [
14239
+ {
14240
+ "name": "color",
14241
+ "type": "string",
14242
+ "required": false,
14243
+ "description": "Six hexadecimal digits without #."
14244
+ },
14245
+ {
14246
+ "name": "description",
14247
+ "type": "string",
14248
+ "required": false,
14249
+ "description": "Label's purpose."
14250
+ },
14251
+ {
14252
+ "name": "new_name",
14253
+ "type": "string",
14254
+ "required": false,
14255
+ "description": "Case-insensitive label name within the repository."
14256
+ }
14257
+ ]
14258
+ }
14259
+ },
14260
+ {
14261
+ "resource": "ticket.milestones",
14262
+ "method": "list",
14263
+ "summary": "List milestones",
14264
+ "description": "List milestones within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Pass next_page_token as page_token to continue with the same filter. Service authorization applies to the verified human subject.",
14265
+ "http": "GET",
14266
+ "path": "/ticket/v1/milestones",
14267
+ "streaming": "no",
14268
+ "pagination": false,
14269
+ "pathParams": [],
14270
+ "query": [
14271
+ {
14272
+ "name": "repository",
14273
+ "type": "string",
14274
+ "required": false,
14275
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14276
+ },
14277
+ {
14278
+ "name": "page_size",
14279
+ "type": "integer",
14280
+ "required": false,
14281
+ "description": "Records per page; defaults to 30, maximum 100."
14282
+ },
14283
+ {
14284
+ "name": "page_token",
14285
+ "type": "string",
14286
+ "required": false,
14287
+ "description": "Cursor returned as next_page_token; omit for the first page."
14288
+ }
14289
+ ]
14290
+ },
14291
+ {
14292
+ "resource": "ticket.milestones",
14293
+ "method": "create",
14294
+ "summary": "Create or add milestones",
14295
+ "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.",
14296
+ "http": "POST",
14297
+ "path": "/ticket/v1/milestones",
14298
+ "streaming": "no",
14299
+ "pagination": false,
14300
+ "pathParams": [],
14301
+ "query": [
14302
+ {
14303
+ "name": "repository",
14304
+ "type": "string",
14305
+ "required": false,
14306
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14307
+ }
14308
+ ],
14309
+ "body": {
14310
+ "required": true,
14311
+ "fields": [
14312
+ {
14313
+ "name": "title",
14314
+ "type": "string",
14315
+ "required": true,
14316
+ "description": "Short title, at most 256 Unicode characters."
14317
+ },
14318
+ {
14319
+ "name": "description",
14320
+ "type": "string",
14321
+ "required": false,
14322
+ "description": "Milestone description."
14323
+ },
14324
+ {
14325
+ "name": "due_on",
14326
+ "type": "string",
14327
+ "required": false,
14328
+ "description": "Due date, or null if unset."
14329
+ },
14330
+ {
14331
+ "name": "state",
14332
+ "type": "string",
14333
+ "enum": [
14334
+ "open",
14335
+ "closed"
14336
+ ],
14337
+ "required": false,
14338
+ "description": "open means actionable; closed means resolved or declined."
14339
+ }
14340
+ ]
14341
+ }
14342
+ },
14343
+ {
14344
+ "resource": "ticket.milestones",
14345
+ "method": "delete",
14346
+ "summary": "Remove milestones",
14347
+ "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.",
14348
+ "http": "DELETE",
14349
+ "path": "/ticket/v1/milestones/{number}",
14350
+ "streaming": "no",
14351
+ "pagination": false,
14352
+ "pathParams": [
14353
+ {
14354
+ "name": "number",
14355
+ "sdkName": "number"
14356
+ }
14357
+ ],
14358
+ "query": [
14359
+ {
14360
+ "name": "repository",
14361
+ "type": "string",
14362
+ "required": false,
14363
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14364
+ }
14365
+ ]
14366
+ },
14367
+ {
14368
+ "resource": "ticket.milestones",
14369
+ "method": "retrieve",
14370
+ "summary": "Read milestones",
14371
+ "description": "Read 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.",
14372
+ "http": "GET",
14373
+ "path": "/ticket/v1/milestones/{number}",
14374
+ "streaming": "no",
14375
+ "pagination": false,
14376
+ "pathParams": [
14377
+ {
14378
+ "name": "number",
14379
+ "sdkName": "number"
14380
+ }
14381
+ ],
14382
+ "query": [
14383
+ {
14384
+ "name": "repository",
14385
+ "type": "string",
14386
+ "required": false,
14387
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14388
+ }
14389
+ ]
14390
+ },
14391
+ {
14392
+ "resource": "ticket.milestones",
14393
+ "method": "update",
14394
+ "summary": "Update milestones",
14395
+ "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.",
14396
+ "http": "PATCH",
14397
+ "path": "/ticket/v1/milestones/{number}",
14398
+ "streaming": "no",
14399
+ "pagination": false,
14400
+ "pathParams": [
14401
+ {
14402
+ "name": "number",
14403
+ "sdkName": "number"
14404
+ }
14405
+ ],
14406
+ "query": [
14407
+ {
14408
+ "name": "repository",
14409
+ "type": "string",
14410
+ "required": false,
14411
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14412
+ }
14413
+ ],
14414
+ "body": {
14415
+ "required": true,
14416
+ "fields": [
14417
+ {
14418
+ "name": "title",
14419
+ "type": "string",
14420
+ "required": false,
14421
+ "description": "Short title, at most 256 Unicode characters."
14422
+ },
14423
+ {
14424
+ "name": "description",
14425
+ "type": "string",
14426
+ "required": false,
14427
+ "description": "Milestone description."
14428
+ },
14429
+ {
14430
+ "name": "due_on",
14431
+ "type": "string",
14432
+ "required": false,
14433
+ "description": "Due date, or null if unset."
14434
+ },
14435
+ {
14436
+ "name": "state",
14437
+ "type": "string",
14438
+ "enum": [
14439
+ "open",
14440
+ "closed"
14441
+ ],
14442
+ "required": false,
14443
+ "description": "open means actionable; closed means resolved or declined."
14444
+ }
14445
+ ]
14446
+ }
14447
+ },
14448
+ {
14449
+ "resource": "ticket.repositories",
14450
+ "method": "list",
14451
+ "summary": "List repositories",
14452
+ "description": "List repositories within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Pass next_page_token as page_token to continue with the same filter. Service authorization applies to the verified human subject.",
14453
+ "http": "GET",
14454
+ "path": "/ticket/v1/repositories",
14455
+ "streaming": "no",
14456
+ "pagination": false,
14457
+ "pathParams": [],
14458
+ "query": [
14459
+ {
14460
+ "name": "page_size",
14461
+ "type": "integer",
14462
+ "required": false,
14463
+ "description": "Records per page; defaults to 30, maximum 100."
14464
+ },
14465
+ {
14466
+ "name": "page_token",
14467
+ "type": "string",
14468
+ "required": false,
14469
+ "description": "Cursor returned as next_page_token; omit for the first page."
14470
+ }
14471
+ ]
14472
+ },
14473
+ {
14474
+ "resource": "ticket.tickets",
14475
+ "method": "list",
14476
+ "summary": "List tickets",
14477
+ "description": "List tickets within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Pass next_page_token as page_token to continue with the same filter. Service authorization applies to the verified human subject.",
14478
+ "http": "GET",
14479
+ "path": "/ticket/v1/tickets",
14480
+ "streaming": "no",
14481
+ "pagination": false,
14482
+ "pathParams": [],
14483
+ "query": [
14484
+ {
14485
+ "name": "repository",
14486
+ "type": "string",
14487
+ "required": false,
14488
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14489
+ },
14490
+ {
14491
+ "name": "page_size",
14492
+ "type": "integer",
14493
+ "required": false,
14494
+ "description": "Records per page; defaults to 30, maximum 100."
14495
+ },
14496
+ {
14497
+ "name": "page_token",
14498
+ "type": "string",
14499
+ "required": false,
14500
+ "description": "Cursor returned as next_page_token; omit for the first page."
14501
+ },
14502
+ {
14503
+ "name": "filter",
14504
+ "type": "string",
14505
+ "required": false,
14506
+ "description": "Search qualifier subset: is/state, reason, label/-label, no, assignee, author, mentions, milestone, type, kind, assignee-kind, in and sort; unknown qualifiers return INVALID_PARAMS. Passed unchanged to the service."
14507
+ }
14508
+ ]
14509
+ },
14510
+ {
14511
+ "resource": "ticket.tickets",
14512
+ "method": "create",
14513
+ "summary": "Create or add tickets",
14514
+ "description": "Create or add tickets 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.",
14515
+ "http": "POST",
14516
+ "path": "/ticket/v1/tickets",
14517
+ "streaming": "no",
14518
+ "pagination": false,
14519
+ "pathParams": [],
14520
+ "query": [
14521
+ {
14522
+ "name": "repository",
14523
+ "type": "string",
14524
+ "required": false,
14525
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14526
+ }
14527
+ ],
14528
+ "body": {
14529
+ "required": true,
14530
+ "fields": [
14531
+ {
14532
+ "name": "title",
14533
+ "type": "string",
14534
+ "required": true,
14535
+ "description": "Short title, at most 256 Unicode characters."
14536
+ },
14537
+ {
14538
+ "name": "body",
14539
+ "type": "string",
14540
+ "required": false,
14541
+ "description": "Markdown text, at most 65536 characters."
14542
+ },
14543
+ {
14544
+ "name": "type",
14545
+ "type": "string",
14546
+ "required": false,
14547
+ "description": "Built-in type name; null clears an existing type."
14548
+ },
14549
+ {
14550
+ "name": "labels",
14551
+ "type": "array",
14552
+ "itemType": "string",
14553
+ "required": false,
14554
+ "description": "Labels attached to this ticket; updates replace the complete list."
14555
+ },
14556
+ {
14557
+ "name": "assignees",
14558
+ "type": "array",
14559
+ "itemType": "string",
14560
+ "required": false,
14561
+ "description": "Complete assignee list, at most ten."
14562
+ },
14563
+ {
14564
+ "name": "milestone",
14565
+ "type": "integer",
14566
+ "required": false,
14567
+ "description": "Repository-local number returned by create or list; distinct from the object's id."
14568
+ },
14569
+ {
14570
+ "name": "parent",
14571
+ "type": "integer",
14572
+ "required": false,
14573
+ "description": "Repository-local number returned by create or list; distinct from the object's id."
14574
+ }
14575
+ ]
14576
+ }
14577
+ },
14578
+ {
14579
+ "resource": "ticket.tickets",
14580
+ "method": "retrieve",
14581
+ "summary": "Read tickets",
14582
+ "description": "Read tickets 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.",
14583
+ "http": "GET",
14584
+ "path": "/ticket/v1/tickets/{number}",
14585
+ "streaming": "no",
14586
+ "pagination": false,
14587
+ "pathParams": [
14588
+ {
14589
+ "name": "number",
14590
+ "sdkName": "number"
14591
+ }
14592
+ ],
14593
+ "query": [
14594
+ {
14595
+ "name": "repository",
14596
+ "type": "string",
14597
+ "required": false,
14598
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14599
+ }
14600
+ ]
14601
+ },
14602
+ {
14603
+ "resource": "ticket.tickets",
14604
+ "method": "update",
14605
+ "summary": "Update tickets",
14606
+ "description": "Update tickets 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.",
14607
+ "http": "PATCH",
14608
+ "path": "/ticket/v1/tickets/{number}",
14609
+ "streaming": "no",
14610
+ "pagination": false,
14611
+ "pathParams": [
14612
+ {
14613
+ "name": "number",
14614
+ "sdkName": "number"
14615
+ }
14616
+ ],
14617
+ "query": [
14618
+ {
14619
+ "name": "repository",
14620
+ "type": "string",
14621
+ "required": false,
14622
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14623
+ }
14624
+ ],
14625
+ "body": {
14626
+ "required": true,
14627
+ "fields": [
14628
+ {
14629
+ "name": "title",
14630
+ "type": "string",
14631
+ "required": false,
14632
+ "description": "Short title, at most 256 Unicode characters."
14633
+ },
14634
+ {
14635
+ "name": "body",
14636
+ "type": "string",
14637
+ "required": false,
14638
+ "description": "Markdown text, at most 65536 characters."
14639
+ },
14640
+ {
14641
+ "name": "type",
14642
+ "type": "string",
14643
+ "required": false,
14644
+ "description": "Built-in type name; null clears an existing type."
14645
+ },
14646
+ {
14647
+ "name": "labels",
14648
+ "type": "array",
14649
+ "itemType": "string",
14650
+ "required": false,
14651
+ "description": "Labels attached to this ticket; updates replace the complete list."
14652
+ },
14653
+ {
14654
+ "name": "assignees",
14655
+ "type": "array",
14656
+ "itemType": "string",
14657
+ "required": false,
14658
+ "description": "Complete assignee list, at most ten."
14659
+ },
14660
+ {
14661
+ "name": "milestone",
14662
+ "type": "integer",
14663
+ "required": false,
14664
+ "description": "Repository-local number returned by create or list; distinct from the object's id."
14665
+ },
14666
+ {
14667
+ "name": "state",
14668
+ "type": "string",
14669
+ "enum": [
14670
+ "open",
14671
+ "closed"
14672
+ ],
14673
+ "required": false,
14674
+ "description": "open means actionable; closed means resolved or declined."
14675
+ },
14676
+ {
14677
+ "name": "state_reason",
14678
+ "type": "string",
14679
+ "enum": [
14680
+ "completed",
14681
+ "not_planned",
14682
+ "duplicate"
14683
+ ],
14684
+ "required": false,
14685
+ "description": "Reason for closing: completed resolves, not_planned declines, duplicate marks a duplicate."
14686
+ },
14687
+ {
14688
+ "name": "duplicate_of",
14689
+ "type": "integer",
14690
+ "required": false,
14691
+ "description": "Repository-local number returned by create or list; distinct from the object's id."
14692
+ }
14693
+ ]
14694
+ }
14695
+ },
14696
+ {
14697
+ "resource": "ticket.tickets.comments",
14698
+ "method": "list",
14699
+ "summary": "List comments",
14700
+ "description": "List comments within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Pass next_page_token as page_token to continue with the same filter. Service authorization applies to the verified human subject.",
14701
+ "http": "GET",
14702
+ "path": "/ticket/v1/tickets/{number}/comments",
14703
+ "streaming": "no",
14704
+ "pagination": false,
14705
+ "pathParams": [
14706
+ {
14707
+ "name": "number",
14708
+ "sdkName": "number"
14709
+ }
14710
+ ],
14711
+ "query": [
14712
+ {
14713
+ "name": "repository",
14714
+ "type": "string",
14715
+ "required": false,
14716
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14717
+ },
14718
+ {
14719
+ "name": "page_size",
14720
+ "type": "integer",
14721
+ "required": false,
14722
+ "description": "Records per page; defaults to 30, maximum 100."
14723
+ },
14724
+ {
14725
+ "name": "page_token",
14726
+ "type": "string",
14727
+ "required": false,
14728
+ "description": "Cursor returned as next_page_token; omit for the first page."
14729
+ }
14730
+ ]
14731
+ },
14732
+ {
14733
+ "resource": "ticket.tickets.comments",
14734
+ "method": "create",
14735
+ "summary": "Create or add comments",
14736
+ "description": "Create or add comments 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.",
14737
+ "http": "POST",
14738
+ "path": "/ticket/v1/tickets/{number}/comments",
14739
+ "streaming": "no",
14740
+ "pagination": false,
14741
+ "pathParams": [
14742
+ {
14743
+ "name": "number",
14744
+ "sdkName": "number"
14745
+ }
14746
+ ],
14747
+ "query": [
14748
+ {
14749
+ "name": "repository",
14750
+ "type": "string",
14751
+ "required": false,
14752
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14753
+ }
14754
+ ],
14755
+ "body": {
14756
+ "required": true,
14757
+ "fields": [
14758
+ {
14759
+ "name": "body",
14760
+ "type": "string",
14761
+ "required": true,
14762
+ "description": "Markdown text, at most 65536 characters."
14763
+ },
14764
+ {
14765
+ "name": "in_reply_to",
14766
+ "type": "string",
14767
+ "required": false,
14768
+ "description": "Opaque identifier returned by this resource's create or list operation."
14769
+ }
14770
+ ]
14771
+ }
14772
+ },
14773
+ {
14774
+ "resource": "ticket.tickets.dependencies",
14775
+ "method": "retrieveBlockedBy",
14776
+ "summary": "List blocked by",
14777
+ "description": "List blocked by within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Pass next_page_token as page_token to continue with the same filter. Service authorization applies to the verified human subject.",
14778
+ "http": "GET",
14779
+ "path": "/ticket/v1/tickets/{number}/dependencies/blocked_by",
14780
+ "streaming": "no",
14781
+ "pagination": false,
14782
+ "pathParams": [
14783
+ {
14784
+ "name": "number",
14785
+ "sdkName": "number"
14786
+ }
14787
+ ],
14788
+ "query": [
14789
+ {
14790
+ "name": "repository",
14791
+ "type": "string",
14792
+ "required": false,
14793
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14794
+ },
14795
+ {
14796
+ "name": "page_size",
14797
+ "type": "integer",
14798
+ "required": false,
14799
+ "description": "Records per page; defaults to 30, maximum 100."
14800
+ },
14801
+ {
14802
+ "name": "page_token",
14803
+ "type": "string",
14804
+ "required": false,
14805
+ "description": "Cursor returned as next_page_token; omit for the first page."
14806
+ }
14807
+ ]
14808
+ },
14809
+ {
14810
+ "resource": "ticket.tickets.dependencies.blockedBy",
14811
+ "method": "create",
14812
+ "summary": "Create or add blocked by",
14813
+ "description": "Create or add blocked by 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.",
14814
+ "http": "POST",
14815
+ "path": "/ticket/v1/tickets/{number}/dependencies/blocked_by",
14816
+ "streaming": "no",
14817
+ "pagination": false,
14818
+ "pathParams": [
14819
+ {
14820
+ "name": "number",
14821
+ "sdkName": "number"
14822
+ }
14823
+ ],
14824
+ "query": [
14825
+ {
14826
+ "name": "repository",
14827
+ "type": "string",
14828
+ "required": false,
14829
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14830
+ }
14831
+ ],
14832
+ "body": {
14833
+ "required": true,
14834
+ "fields": [
14835
+ {
14836
+ "name": "blocked_by",
14837
+ "type": "integer",
14838
+ "required": true,
14839
+ "description": "Repository-local number returned by create or list; distinct from the object's id."
14840
+ }
14841
+ ]
14842
+ }
14843
+ },
14844
+ {
14845
+ "resource": "ticket.tickets.dependencies.blockedBy",
14846
+ "method": "delete",
14847
+ "summary": "Remove blocked by",
14848
+ "description": "Remove blocked by 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.",
14849
+ "http": "DELETE",
14850
+ "path": "/ticket/v1/tickets/{number}/dependencies/blocked_by/{n}",
14851
+ "streaming": "no",
14852
+ "pagination": false,
14853
+ "pathParams": [
14854
+ {
14855
+ "name": "number",
14856
+ "sdkName": "number"
14857
+ },
14858
+ {
14859
+ "name": "n",
14860
+ "sdkName": "n"
14861
+ }
14862
+ ],
14863
+ "query": [
14864
+ {
14865
+ "name": "repository",
14866
+ "type": "string",
14867
+ "required": false,
14868
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14869
+ }
14870
+ ]
14871
+ },
14872
+ {
14873
+ "resource": "ticket.tickets.dependencies",
14874
+ "method": "retrieveBlocking",
14875
+ "summary": "List blocking",
14876
+ "description": "List blocking within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Pass next_page_token as page_token to continue with the same filter. Service authorization applies to the verified human subject.",
14877
+ "http": "GET",
14878
+ "path": "/ticket/v1/tickets/{number}/dependencies/blocking",
14879
+ "streaming": "no",
14880
+ "pagination": false,
14881
+ "pathParams": [
14882
+ {
14883
+ "name": "number",
14884
+ "sdkName": "number"
14885
+ }
14886
+ ],
14887
+ "query": [
14888
+ {
14889
+ "name": "repository",
14890
+ "type": "string",
14891
+ "required": false,
14892
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14893
+ },
14894
+ {
14895
+ "name": "page_size",
14896
+ "type": "integer",
14897
+ "required": false,
14898
+ "description": "Records per page; defaults to 30, maximum 100."
14899
+ },
14900
+ {
14901
+ "name": "page_token",
14902
+ "type": "string",
14903
+ "required": false,
14904
+ "description": "Cursor returned as next_page_token; omit for the first page."
14905
+ }
14906
+ ]
14907
+ },
14908
+ {
14909
+ "resource": "ticket.tickets.events",
14910
+ "method": "list",
14911
+ "summary": "List events",
14912
+ "description": "List events within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Pass next_page_token as page_token to continue with the same filter. Service authorization applies to the verified human subject.",
14913
+ "http": "GET",
14914
+ "path": "/ticket/v1/tickets/{number}/events",
14915
+ "streaming": "no",
14916
+ "pagination": false,
14917
+ "pathParams": [
14918
+ {
14919
+ "name": "number",
14920
+ "sdkName": "number"
14921
+ }
14922
+ ],
14923
+ "query": [
14924
+ {
14925
+ "name": "repository",
14926
+ "type": "string",
14927
+ "required": false,
14928
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14929
+ },
14930
+ {
14931
+ "name": "page_size",
14932
+ "type": "integer",
14933
+ "required": false,
14934
+ "description": "Records per page; defaults to 30, maximum 100."
14935
+ },
14936
+ {
14937
+ "name": "page_token",
14938
+ "type": "string",
14939
+ "required": false,
14940
+ "description": "Cursor returned as next_page_token; omit for the first page."
14941
+ }
14942
+ ]
14943
+ },
14944
+ {
14945
+ "resource": "ticket.tickets",
14946
+ "method": "deleteLock",
14947
+ "summary": "Remove lock",
14948
+ "description": "Remove lock 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.",
14949
+ "http": "DELETE",
14950
+ "path": "/ticket/v1/tickets/{number}/lock",
14951
+ "streaming": "no",
14952
+ "pagination": false,
14953
+ "pathParams": [
14954
+ {
14955
+ "name": "number",
14956
+ "sdkName": "number"
14957
+ }
14958
+ ],
14959
+ "query": [
14960
+ {
14961
+ "name": "repository",
14962
+ "type": "string",
14963
+ "required": false,
14964
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14965
+ }
14966
+ ]
14967
+ },
14968
+ {
14969
+ "resource": "ticket.tickets",
14970
+ "method": "updateLock",
14971
+ "summary": "Update lock",
14972
+ "description": "Update lock 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.",
14973
+ "http": "PUT",
14974
+ "path": "/ticket/v1/tickets/{number}/lock",
14975
+ "streaming": "no",
14976
+ "pagination": false,
14977
+ "pathParams": [
14978
+ {
14979
+ "name": "number",
14980
+ "sdkName": "number"
14981
+ }
14982
+ ],
14983
+ "query": [
14984
+ {
14985
+ "name": "repository",
14986
+ "type": "string",
14987
+ "required": false,
14988
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14989
+ }
14990
+ ],
14991
+ "body": {
14992
+ "required": false,
14993
+ "fields": [
14994
+ {
14995
+ "name": "lock_reason",
14996
+ "type": "string",
14997
+ "enum": [
14998
+ "off-topic",
14999
+ "too heated",
15000
+ "resolved",
15001
+ "spam"
15002
+ ],
15003
+ "required": false,
15004
+ "description": "Reason for locking: off-topic, too heated, resolved, or spam."
15005
+ }
15006
+ ]
15007
+ }
15008
+ },
15009
+ {
15010
+ "resource": "ticket.tickets.reactions",
15011
+ "method": "list",
15012
+ "summary": "List reactions",
15013
+ "description": "List reactions within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Pass next_page_token as page_token to continue with the same filter. Service authorization applies to the verified human subject.",
15014
+ "http": "GET",
15015
+ "path": "/ticket/v1/tickets/{number}/reactions",
15016
+ "streaming": "no",
15017
+ "pagination": false,
15018
+ "pathParams": [
15019
+ {
15020
+ "name": "number",
15021
+ "sdkName": "number"
15022
+ }
15023
+ ],
15024
+ "query": [
15025
+ {
15026
+ "name": "repository",
15027
+ "type": "string",
15028
+ "required": false,
15029
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15030
+ },
15031
+ {
15032
+ "name": "page_size",
15033
+ "type": "integer",
15034
+ "required": false,
15035
+ "description": "Records per page; defaults to 30, maximum 100."
15036
+ },
15037
+ {
15038
+ "name": "page_token",
15039
+ "type": "string",
15040
+ "required": false,
15041
+ "description": "Cursor returned as next_page_token; omit for the first page."
15042
+ }
15043
+ ]
15044
+ },
15045
+ {
15046
+ "resource": "ticket.tickets.reactions",
15047
+ "method": "create",
15048
+ "summary": "Create or add reactions",
15049
+ "description": "Create or add reactions 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.",
15050
+ "http": "POST",
15051
+ "path": "/ticket/v1/tickets/{number}/reactions",
15052
+ "streaming": "no",
15053
+ "pagination": false,
15054
+ "pathParams": [
15055
+ {
15056
+ "name": "number",
15057
+ "sdkName": "number"
15058
+ }
15059
+ ],
15060
+ "query": [
15061
+ {
15062
+ "name": "repository",
15063
+ "type": "string",
15064
+ "required": false,
15065
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15066
+ }
15067
+ ],
15068
+ "body": {
15069
+ "required": true,
15070
+ "fields": [
15071
+ {
15072
+ "name": "content",
15073
+ "type": "string",
15074
+ "enum": [
15075
+ "+1",
15076
+ "-1",
15077
+ "laugh",
15078
+ "confused",
15079
+ "heart",
15080
+ "hooray",
15081
+ "eyes",
15082
+ "rocket"
15083
+ ],
15084
+ "required": true,
15085
+ "description": "Reaction to add or remove: +1 approves, -1 disapproves, laugh, confused, heart, hooray, eyes, or rocket."
15086
+ }
15087
+ ]
15088
+ }
15089
+ },
15090
+ {
15091
+ "resource": "ticket.tickets.reactions",
15092
+ "method": "delete",
15093
+ "summary": "Remove reactions",
15094
+ "description": "Remove reactions 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.",
15095
+ "http": "DELETE",
15096
+ "path": "/ticket/v1/tickets/{number}/reactions/{content}",
15097
+ "streaming": "no",
15098
+ "pagination": false,
15099
+ "pathParams": [
15100
+ {
15101
+ "name": "number",
15102
+ "sdkName": "number"
15103
+ },
15104
+ {
15105
+ "name": "content",
15106
+ "sdkName": "content"
15107
+ }
15108
+ ],
15109
+ "query": [
15110
+ {
15111
+ "name": "repository",
15112
+ "type": "string",
15113
+ "required": false,
15114
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15115
+ }
15116
+ ]
15117
+ },
15118
+ {
15119
+ "resource": "ticket.tickets.relations",
15120
+ "method": "list",
15121
+ "summary": "List relations",
15122
+ "description": "List relations within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Pass next_page_token as page_token to continue with the same filter. Service authorization applies to the verified human subject.",
15123
+ "http": "GET",
15124
+ "path": "/ticket/v1/tickets/{number}/relations",
15125
+ "streaming": "no",
15126
+ "pagination": false,
15127
+ "pathParams": [
15128
+ {
15129
+ "name": "number",
15130
+ "sdkName": "number"
15131
+ }
15132
+ ],
15133
+ "query": [
15134
+ {
15135
+ "name": "repository",
15136
+ "type": "string",
15137
+ "required": false,
15138
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15139
+ },
15140
+ {
15141
+ "name": "page_size",
15142
+ "type": "integer",
15143
+ "required": false,
15144
+ "description": "Records per page; defaults to 30, maximum 100."
15145
+ },
15146
+ {
15147
+ "name": "page_token",
15148
+ "type": "string",
15149
+ "required": false,
15150
+ "description": "Cursor returned as next_page_token; omit for the first page."
15151
+ }
15152
+ ]
15153
+ },
15154
+ {
15155
+ "resource": "ticket.tickets.relations",
15156
+ "method": "create",
15157
+ "summary": "Create or add relations",
15158
+ "description": "Create or add relations 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.",
15159
+ "http": "POST",
15160
+ "path": "/ticket/v1/tickets/{number}/relations",
15161
+ "streaming": "no",
15162
+ "pagination": false,
15163
+ "pathParams": [
15164
+ {
15165
+ "name": "number",
15166
+ "sdkName": "number"
15167
+ }
15168
+ ],
15169
+ "query": [
15170
+ {
15171
+ "name": "repository",
15172
+ "type": "string",
15173
+ "required": false,
15174
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15175
+ }
15176
+ ],
15177
+ "body": {
15178
+ "required": true,
15179
+ "fields": [
15180
+ {
15181
+ "name": "relates_to",
15182
+ "type": "integer",
15183
+ "required": true,
15184
+ "description": "Repository-local number returned by create or list; distinct from the object's id."
15185
+ }
15186
+ ]
15187
+ }
15188
+ },
15189
+ {
15190
+ "resource": "ticket.tickets.relations",
15191
+ "method": "delete",
15192
+ "summary": "Remove relations",
15193
+ "description": "Remove relations 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.",
15194
+ "http": "DELETE",
15195
+ "path": "/ticket/v1/tickets/{number}/relations/{n}",
15196
+ "streaming": "no",
15197
+ "pagination": false,
15198
+ "pathParams": [
15199
+ {
15200
+ "name": "number",
15201
+ "sdkName": "number"
15202
+ },
15203
+ {
15204
+ "name": "n",
15205
+ "sdkName": "n"
15206
+ }
15207
+ ],
15208
+ "query": [
15209
+ {
15210
+ "name": "repository",
15211
+ "type": "string",
15212
+ "required": false,
15213
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15214
+ }
15215
+ ]
15216
+ },
15217
+ {
15218
+ "resource": "ticket.tickets.subTickets",
15219
+ "method": "list",
15220
+ "summary": "List sub tickets",
15221
+ "description": "List sub tickets within the authenticated organization. Obtain resource identifiers from the corresponding list or create response. Pass next_page_token as page_token to continue with the same filter. Service authorization applies to the verified human subject.",
15222
+ "http": "GET",
15223
+ "path": "/ticket/v1/tickets/{number}/sub_tickets",
15224
+ "streaming": "no",
15225
+ "pagination": false,
15226
+ "pathParams": [
15227
+ {
15228
+ "name": "number",
15229
+ "sdkName": "number"
15230
+ }
15231
+ ],
15232
+ "query": [
15233
+ {
15234
+ "name": "repository",
15235
+ "type": "string",
15236
+ "required": false,
15237
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15238
+ },
15239
+ {
15240
+ "name": "page_size",
15241
+ "type": "integer",
15242
+ "required": false,
15243
+ "description": "Records per page; defaults to 30, maximum 100."
15244
+ },
15245
+ {
15246
+ "name": "page_token",
15247
+ "type": "string",
15248
+ "required": false,
15249
+ "description": "Cursor returned as next_page_token; omit for the first page."
15250
+ }
15251
+ ]
15252
+ },
15253
+ {
15254
+ "resource": "ticket.tickets.subTickets",
15255
+ "method": "create",
15256
+ "summary": "Create or add sub tickets",
15257
+ "description": "Create or add sub tickets 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.",
15258
+ "http": "POST",
15259
+ "path": "/ticket/v1/tickets/{number}/sub_tickets",
15260
+ "streaming": "no",
15261
+ "pagination": false,
15262
+ "pathParams": [
15263
+ {
15264
+ "name": "number",
15265
+ "sdkName": "number"
15266
+ }
15267
+ ],
15268
+ "query": [
15269
+ {
15270
+ "name": "repository",
15271
+ "type": "string",
15272
+ "required": false,
15273
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15274
+ }
15275
+ ],
15276
+ "body": {
15277
+ "required": true,
15278
+ "fields": [
15279
+ {
15280
+ "name": "child",
15281
+ "type": "integer",
15282
+ "required": true,
15283
+ "description": "Repository-local number returned by create or list; distinct from the object's id."
15284
+ },
15285
+ {
15286
+ "name": "replace_parent",
15287
+ "type": "boolean",
15288
+ "required": false,
15289
+ "description": "Allow replacing an existing parent."
15290
+ }
15291
+ ]
15292
+ }
15293
+ },
15294
+ {
15295
+ "resource": "ticket.tickets.subTickets",
15296
+ "method": "delete",
15297
+ "summary": "Remove sub tickets",
15298
+ "description": "Remove sub tickets 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.",
15299
+ "http": "DELETE",
15300
+ "path": "/ticket/v1/tickets/{number}/sub_tickets/{child}",
15301
+ "streaming": "no",
15302
+ "pagination": false,
15303
+ "pathParams": [
15304
+ {
15305
+ "name": "number",
15306
+ "sdkName": "number"
15307
+ },
15308
+ {
15309
+ "name": "child",
15310
+ "sdkName": "child"
15311
+ }
15312
+ ],
15313
+ "query": [
15314
+ {
15315
+ "name": "repository",
15316
+ "type": "string",
15317
+ "required": false,
15318
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15319
+ }
15320
+ ]
15321
+ },
15322
+ {
15323
+ "resource": "ticket.types",
15324
+ "method": "list",
15325
+ "summary": "Read types",
15326
+ "description": "Read types 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.",
15327
+ "http": "GET",
15328
+ "path": "/ticket/v1/types",
15329
+ "streaming": "no",
15330
+ "pagination": false,
15331
+ "pathParams": [],
15332
+ "query": [
15333
+ {
15334
+ "name": "repository",
15335
+ "type": "string",
15336
+ "required": false,
15337
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15338
+ }
15339
+ ]
15340
+ },
13645
15341
  {
13646
15342
  "resource": "vault.authorizations",
13647
15343
  "method": "create",