@deepraxis/sdk 0.1.0-dev.fe2a6ba → 0.1.0

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,13 @@ 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": "bindings",
133
+ "type": "array",
134
+ "itemType": "object",
135
+ "required": false,
136
+ "description": "Platform resources and services this service agent's codemode may reach, as one list of typed bindings. Only kind=service accepts a nonempty list; personal agents return 400. There are two kinds. A resource binding names one resource with id and access: database (id db_..., read_only or read_write), vector_store (id vs_..., read_only or read_write), file (id file_..., read_only), media_library (any id without ':' or whitespace, read_only or read_write), model (a model catalog id, invoke), workflow and script (id <namespace>/<name>, invoke). A service binding opens a whole service and carries only enabled: search or browser. At most 20 bindings per type, no repeated type and id, and each service type at most once. Newly added bindings apply only to new sessions; disabling or removing a binding immediately revokes access in running sessions. A resource that is not bound returns 404, a service that is not opened returns 403, and writes to read_only resources are refused. Unknown types, fields on the wrong kind (id, access or instructions on a service binding), wrong access and malformed ids return 400. The former databases, vector_stores and files fields are removed and return 400. Omit on create for no bindings."
137
+ },
131
138
  {
132
139
  "name": "kind",
133
140
  "type": "string",
@@ -176,6 +183,25 @@ export const operations = [
176
183
  "required": false,
177
184
  "description": "Praxis extension: switchable model ids on /agent/v1 only. The default model must be included. When omitted, only the default model is selectable."
178
185
  },
186
+ {
187
+ "name": "avatar",
188
+ "type": "string",
189
+ "required": false,
190
+ "description": "Avatar image of the agent: an absolute https URL of at most 2048 characters, without credentials; any other value returns 400 avatar must be an https URL. It is the default picture in agent lists, the agent detail, the chat header and embedded chat when the embed appearance sets none. Saved with the agent version like other configuration, so apply=false keeps the previous avatar in effect until that version is applied. Omit on create for no avatar; on update, omit to keep it and send null to clear it. Both personal and service agents accept it. /agent/v1 only; /anthropic neither accepts nor returns it."
191
+ },
192
+ {
193
+ "name": "environment_id",
194
+ "type": "string",
195
+ "required": false,
196
+ "description": "Default environment of a service agent: the environment_id a new session gets when it names none. Use light, node22 or the env_ id of an active environment of your organization; any other value returns 400 environment_id <id> was not found. null means no environment, so sessions are plain conversation without codemode or bash. Saved with the agent version like other configuration, so apply=false keeps the previous environment in effect for new sessions until that version is applied; a session that sets environment_id itself, null included, overrides it. Omit on create for light; on update, omit to keep it. Versions saved before this field existed read as light. Personal agents use a Computer: a non-null value returns 400 and the field is not returned. /agent/v1 only; /anthropic neither accepts nor returns it."
197
+ },
198
+ {
199
+ "name": "vault_ids",
200
+ "type": "array",
201
+ "itemType": "string",
202
+ "required": false,
203
+ "description": "Default vaults of a service agent: the vault_ids a new session gets when it names none, so the agent's credentials follow the version. At most 50 ids without duplicates; each must be a vault of your organization that is not archived, otherwise 400 vault_ids[<index>] <id> was not found. Saved with the agent version like other configuration, so apply=false keeps the previous vaults in effect for new sessions until that version is applied; a session that sets vault_ids itself, [] included, overrides it. Omit on create for []; on update, omit to keep the list and send an array to replace it as a whole. Versions saved before this field existed read as []. Embed tokens use the vault_ids of the version they pin; vault_ids on the embed policy is deprecated, still accepted and ignored. Personal agents get no default vaults: a non-empty value returns 400 and the field is not returned. /agent/v1 only; /anthropic neither accepts nor returns it."
204
+ },
179
205
  {
180
206
  "name": "preset",
181
207
  "type": "string",
@@ -218,7 +244,7 @@ export const operations = [
218
244
  "resource": "agent.agents",
219
245
  "method": "update",
220
246
  "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.",
247
+ "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
248
  "http": "POST",
223
249
  "path": "/agent/v1/agents/{agent_id}",
224
250
  "streaming": "no",
@@ -296,6 +322,25 @@ export const operations = [
296
322
  "required": false,
297
323
  "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
324
  },
325
+ {
326
+ "name": "apply",
327
+ "type": "boolean",
328
+ "required": false,
329
+ "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."
330
+ },
331
+ {
332
+ "name": "version_note",
333
+ "type": "string",
334
+ "required": false,
335
+ "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."
336
+ },
337
+ {
338
+ "name": "bindings",
339
+ "type": "array",
340
+ "itemType": "object",
341
+ "required": false,
342
+ "description": "Replace the whole bindings list; 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 a nonempty list."
343
+ },
299
344
  {
300
345
  "name": "kind",
301
346
  "type": "string",
@@ -344,6 +389,25 @@ export const operations = [
344
389
  "required": false,
345
390
  "description": "Praxis extension: switchable model ids on /agent/v1 only. The default model must be included. When omitted, only the default model is selectable."
346
391
  },
392
+ {
393
+ "name": "avatar",
394
+ "type": "string",
395
+ "required": false,
396
+ "description": "Avatar image of the agent: an absolute https URL of at most 2048 characters, without credentials; any other value returns 400 avatar must be an https URL. It is the default picture in agent lists, the agent detail, the chat header and embedded chat when the embed appearance sets none. Saved with the agent version like other configuration, so apply=false keeps the previous avatar in effect until that version is applied. Omit on create for no avatar; on update, omit to keep it and send null to clear it. Both personal and service agents accept it. /agent/v1 only; /anthropic neither accepts nor returns it."
397
+ },
398
+ {
399
+ "name": "environment_id",
400
+ "type": "string",
401
+ "required": false,
402
+ "description": "Default environment of a service agent: the environment_id a new session gets when it names none. Use light, node22 or the env_ id of an active environment of your organization; any other value returns 400 environment_id <id> was not found. null means no environment, so sessions are plain conversation without codemode or bash. Saved with the agent version like other configuration, so apply=false keeps the previous environment in effect for new sessions until that version is applied; a session that sets environment_id itself, null included, overrides it. Omit on create for light; on update, omit to keep it. Versions saved before this field existed read as light. Personal agents use a Computer: a non-null value returns 400 and the field is not returned. /agent/v1 only; /anthropic neither accepts nor returns it."
403
+ },
404
+ {
405
+ "name": "vault_ids",
406
+ "type": "array",
407
+ "itemType": "string",
408
+ "required": false,
409
+ "description": "Default vaults of a service agent: the vault_ids a new session gets when it names none, so the agent's credentials follow the version. At most 50 ids without duplicates; each must be a vault of your organization that is not archived, otherwise 400 vault_ids[<index>] <id> was not found. Saved with the agent version like other configuration, so apply=false keeps the previous vaults in effect for new sessions until that version is applied; a session that sets vault_ids itself, [] included, overrides it. Omit on create for []; on update, omit to keep the list and send an array to replace it as a whole. Versions saved before this field existed read as []. Embed tokens use the vault_ids of the version they pin; vault_ids on the embed policy is deprecated, still accepted and ignored. Personal agents get no default vaults: a non-empty value returns 400 and the field is not returned. /agent/v1 only; /anthropic neither accepts nor returns it."
410
+ },
347
411
  {
348
412
  "name": "preset",
349
413
  "type": "string",
@@ -591,6 +655,27 @@ export const operations = [
591
655
  }
592
656
  ]
593
657
  },
658
+ {
659
+ "resource": "agent.agents.versions",
660
+ "method": "apply",
661
+ "summary": "Apply Agent Version",
662
+ "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.",
663
+ "http": "POST",
664
+ "path": "/agent/v1/agents/{agent_id}/versions/{version}/apply",
665
+ "streaming": "no",
666
+ "pagination": false,
667
+ "pathParams": [
668
+ {
669
+ "name": "agent_id",
670
+ "sdkName": "agent_id"
671
+ },
672
+ {
673
+ "name": "version",
674
+ "sdkName": "version"
675
+ }
676
+ ],
677
+ "query": []
678
+ },
594
679
  {
595
680
  "resource": "agent.computers",
596
681
  "method": "list",
@@ -756,7 +841,7 @@ export const operations = [
756
841
  "resource": "agent.computers",
757
842
  "method": "connect",
758
843
  "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.\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. Heavy running time counts toward the daily budget in seconds. Renew the lease while using the connection and release it with DELETE when finished. If the daily budget is exhausted, 429 COMPUTER_BUDGET_EXHAUSTED allows you to continue with need light.",
844
+ "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
845
  "http": "POST",
761
846
  "path": "/agent/v1/computers/{computer_id}/connect",
762
847
  "streaming": "no",
@@ -1793,7 +1878,7 @@ export const operations = [
1793
1878
  "resource": "agent.sessions",
1794
1879
  "method": "create",
1795
1880
  "summary": "Create session",
1796
- "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.",
1881
+ "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.",
1797
1882
  "http": "POST",
1798
1883
  "path": "/agent/v1/sessions",
1799
1884
  "streaming": "no",
@@ -1813,7 +1898,7 @@ export const operations = [
1813
1898
  "name": "environment_id",
1814
1899
  "type": "string",
1815
1900
  "required": false,
1816
- "description": "ID of the `environment` defining the container configuration for\nthis session."
1901
+ "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."
1817
1902
  },
1818
1903
  {
1819
1904
  "name": "budget",
@@ -2679,6 +2764,225 @@ export const operations = [
2679
2764
  }
2680
2765
  ]
2681
2766
  },
2767
+ {
2768
+ "resource": "agent.skills",
2769
+ "method": "list",
2770
+ "summary": "List skills",
2771
+ "description": "List the skills uploaded to your organization, newest first, in pages of at most 100 (default 20). Use it to find a skill id before reading, versioning or deleting it. Only source=custom has content; source=anthropic returns an empty list. Pass next_page from the response as page to read the next page; a null next_page means the end.",
2772
+ "http": "GET",
2773
+ "path": "/agent/v1/skills",
2774
+ "streaming": "no",
2775
+ "pagination": false,
2776
+ "pathParams": [],
2777
+ "query": [
2778
+ {
2779
+ "name": "source",
2780
+ "type": "string",
2781
+ "required": false,
2782
+ "description": "Filter skills by source.\n\nIf provided, only skills from the specified source will be returned:\n\n- `\"custom\"`: only return user-created skills\n- `\"anthropic\"`: only return Anthropic-created skills"
2783
+ },
2784
+ {
2785
+ "name": "limit",
2786
+ "type": "number",
2787
+ "required": false,
2788
+ "description": "Number of items per page."
2789
+ },
2790
+ {
2791
+ "name": "page",
2792
+ "type": "string",
2793
+ "required": false,
2794
+ "description": "Opaque pagination cursor: pass the next_page value of the previous response unchanged. Omit it for the first page. A cursor from a different query or a malformed one returns 400."
2795
+ }
2796
+ ]
2797
+ },
2798
+ {
2799
+ "resource": "agent.skills",
2800
+ "method": "create",
2801
+ "summary": "Create skill",
2802
+ "description": "Upload a skill: a directory that contains SKILL.md, which the agent reads when it needs the skill. Send multipart/form-data with one files part per file, each file name being its path under one top-level directory (pdf/SKILL.md, pdf/scripts/run.py), and an optional display_name. SKILL.md frontmatter needs a description; name defaults to the directory name. Limits: 8 MB in total, at most 200 files, no .. segments, absolute paths or empty names; a violation returns 400 naming the path or field. The upload creates the skill and its first version, and versions are immutable. Attach the skill to an agent with `skills` on the agent.",
2803
+ "http": "POST",
2804
+ "path": "/agent/v1/skills",
2805
+ "streaming": "no",
2806
+ "pagination": false,
2807
+ "multipart": true,
2808
+ "pathParams": [],
2809
+ "query": [],
2810
+ "body": {
2811
+ "required": true,
2812
+ "fields": [
2813
+ {
2814
+ "name": "files",
2815
+ "type": "array",
2816
+ "itemType": "string",
2817
+ "required": true,
2818
+ "description": "Files to upload for the skill.\n\nAll files must be in the same top-level directory and must include a SKILL.md\nfile at the root of that directory."
2819
+ },
2820
+ {
2821
+ "name": "display_name",
2822
+ "type": "string",
2823
+ "required": false,
2824
+ "description": "Human-readable, single-line label for the Skill. Maximum 255\ncharacters. Always set: derived from the SKILL.md frontmatter `name` when\nomitted at creation. Not unique."
2825
+ }
2826
+ ]
2827
+ }
2828
+ },
2829
+ {
2830
+ "resource": "agent.skills",
2831
+ "method": "delete",
2832
+ "summary": "Delete skill",
2833
+ "description": "Delete a skill that has no live versions. A skill that still has versions returns 409 Delete all versions first; remove each with skills.versions.delete, then call this. Returns {id, type: skill_deleted}. skill_id comes from skills.create or skills.list.",
2834
+ "http": "DELETE",
2835
+ "path": "/agent/v1/skills/{skill_id}",
2836
+ "streaming": "no",
2837
+ "pagination": false,
2838
+ "pathParams": [
2839
+ {
2840
+ "name": "skill_id",
2841
+ "sdkName": "skill_id"
2842
+ }
2843
+ ],
2844
+ "query": []
2845
+ },
2846
+ {
2847
+ "resource": "agent.skills",
2848
+ "method": "retrieve",
2849
+ "summary": "Get skill",
2850
+ "description": "Read one skill by id: its display_name, source and latest_version_id. skill_id comes from skills.create or skills.list. A skill of another organization, or a deleted one, returns 404 Skill not found.",
2851
+ "http": "GET",
2852
+ "path": "/agent/v1/skills/{skill_id}",
2853
+ "streaming": "no",
2854
+ "pagination": false,
2855
+ "pathParams": [
2856
+ {
2857
+ "name": "skill_id",
2858
+ "sdkName": "skill_id"
2859
+ }
2860
+ ],
2861
+ "query": []
2862
+ },
2863
+ {
2864
+ "resource": "agent.skills.versions",
2865
+ "method": "list",
2866
+ "summary": "List skill versions",
2867
+ "description": "List the live versions of one skill, newest first, in pages of at most 100 (default 20). Each item carries the name and description read from the SKILL.md of that version. Pass next_page from the response as page to read the next page; a null next_page means the end.",
2868
+ "http": "GET",
2869
+ "path": "/agent/v1/skills/{skill_id}/versions",
2870
+ "streaming": "no",
2871
+ "pagination": false,
2872
+ "pathParams": [
2873
+ {
2874
+ "name": "skill_id",
2875
+ "sdkName": "skill_id"
2876
+ }
2877
+ ],
2878
+ "query": [
2879
+ {
2880
+ "name": "limit",
2881
+ "type": "number",
2882
+ "required": false,
2883
+ "description": "Number of items per page."
2884
+ },
2885
+ {
2886
+ "name": "page",
2887
+ "type": "string",
2888
+ "required": false,
2889
+ "description": "Opaque pagination cursor: pass the next_page value of the previous response unchanged. Omit it for the first page. A cursor from a different query or a malformed one returns 400."
2890
+ }
2891
+ ]
2892
+ },
2893
+ {
2894
+ "resource": "agent.skills.versions",
2895
+ "method": "create",
2896
+ "summary": "Create skill version",
2897
+ "description": "Upload a new version of a skill with the same multipart/form-data shape and limits as skills.create (8 MB, 200 files, one top-level directory containing SKILL.md). The SKILL.md name must equal the name of the skill; a different name returns 400. The new version becomes latest_version_id of the skill, and earlier versions stay unchanged because versions are immutable. Attach it to an agent with `skills` on the agent.",
2898
+ "http": "POST",
2899
+ "path": "/agent/v1/skills/{skill_id}/versions",
2900
+ "streaming": "no",
2901
+ "pagination": false,
2902
+ "multipart": true,
2903
+ "pathParams": [
2904
+ {
2905
+ "name": "skill_id",
2906
+ "sdkName": "skill_id"
2907
+ }
2908
+ ],
2909
+ "query": [],
2910
+ "body": {
2911
+ "required": true,
2912
+ "fields": [
2913
+ {
2914
+ "name": "files",
2915
+ "type": "array",
2916
+ "itemType": "string",
2917
+ "required": true,
2918
+ "description": "Files to upload for the skill.\n\nAll files must be in the same top-level directory and must include a SKILL.md\nfile at the root of that directory."
2919
+ }
2920
+ ]
2921
+ }
2922
+ },
2923
+ {
2924
+ "resource": "agent.skills.versions",
2925
+ "method": "delete",
2926
+ "summary": "Delete skill version",
2927
+ "description": "Soft-delete one version of a skill so it can no longer be read or downloaded; latest_version_id of the skill falls back to the newest remaining version. Returns {id, type: skill_version_deleted}. A skill can be deleted only after all of its versions are deleted.",
2928
+ "http": "DELETE",
2929
+ "path": "/agent/v1/skills/{skill_id}/versions/{version}",
2930
+ "streaming": "no",
2931
+ "pagination": false,
2932
+ "pathParams": [
2933
+ {
2934
+ "name": "skill_id",
2935
+ "sdkName": "skill_id"
2936
+ },
2937
+ {
2938
+ "name": "version",
2939
+ "sdkName": "version"
2940
+ }
2941
+ ],
2942
+ "query": []
2943
+ },
2944
+ {
2945
+ "resource": "agent.skills.versions",
2946
+ "method": "retrieve",
2947
+ "summary": "Get skill version",
2948
+ "description": "Read one version of a skill: its name, description and created_at as read from SKILL.md. version is the id returned by skills.versions.create or skills.versions.list. A deleted or unknown version returns 404 Skill version not found.",
2949
+ "http": "GET",
2950
+ "path": "/agent/v1/skills/{skill_id}/versions/{version}",
2951
+ "streaming": "no",
2952
+ "pagination": false,
2953
+ "pathParams": [
2954
+ {
2955
+ "name": "skill_id",
2956
+ "sdkName": "skill_id"
2957
+ },
2958
+ {
2959
+ "name": "version",
2960
+ "sdkName": "version"
2961
+ }
2962
+ ],
2963
+ "query": []
2964
+ },
2965
+ {
2966
+ "resource": "agent.skills.versions",
2967
+ "method": "retrieveContent",
2968
+ "summary": "Download skill version",
2969
+ "description": "Download the content of one version as a zip archive (application/zip): the uploaded directory with its top-level folder and every file. version is the id returned by skills.versions.create or skills.versions.list; a deleted version returns 404.",
2970
+ "http": "GET",
2971
+ "path": "/agent/v1/skills/{skill_id}/versions/{version}/content",
2972
+ "streaming": "no",
2973
+ "pagination": false,
2974
+ "pathParams": [
2975
+ {
2976
+ "name": "skill_id",
2977
+ "sdkName": "skill_id"
2978
+ },
2979
+ {
2980
+ "name": "version",
2981
+ "sdkName": "version"
2982
+ }
2983
+ ],
2984
+ "query": []
2985
+ },
2682
2986
  {
2683
2987
  "resource": "agent.toolsets",
2684
2988
  "method": "list",
@@ -3521,13 +3825,13 @@ export const operations = [
3521
3825
  "name": "namespace",
3522
3826
  "type": "string",
3523
3827
  "required": true,
3524
- "description": "Choose a namespace without prior registration; praxis is read-only. Folded to lowercase; matches [a-z0-9][a-z0-9._-]{0,63}."
3828
+ "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}."
3525
3829
  },
3526
3830
  {
3527
3831
  "name": "name",
3528
3832
  "type": "string",
3529
3833
  "required": true,
3530
- "description": "Name, folded to lowercase; matches [a-z0-9][a-z0-9._-]{0,63}."
3834
+ "description": "Name, folded to lowercase; matches [a-z0-9][a-z0-9_-]{0,63}."
3531
3835
  },
3532
3836
  {
3533
3837
  "name": "description",
@@ -3590,8 +3894,8 @@ export const operations = [
3590
3894
  {
3591
3895
  "resource": "automation.actions",
3592
3896
  "method": "retrieve",
3593
- "summary": "Get an action",
3594
- "description": "Read the action and its full current implementation. The response ETag is the current revision ID for conditional updates.",
3897
+ "summary": "Get an Action with its current input and output JSON Schemas",
3898
+ "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.",
3595
3899
  "http": "GET",
3596
3900
  "path": "/automation/v1/actions/{ns}/{name}",
3597
3901
  "streaming": "no",
@@ -4165,8 +4469,8 @@ export const operations = [
4165
4469
  {
4166
4470
  "resource": "automation.runs",
4167
4471
  "method": "create",
4168
- "summary": "Create a run",
4169
- "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}.",
4472
+ "summary": "Run a published target or execute draft source",
4473
+ "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.",
4170
4474
  "http": "POST",
4171
4475
  "path": "/automation/v1/runs",
4172
4476
  "streaming": "no",
@@ -4644,7 +4948,7 @@ export const operations = [
4644
4948
  "resource": "automation.scripts",
4645
4949
  "method": "create",
4646
4950
  "summary": "Create a script",
4647
- "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.",
4951
+ "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.",
4648
4952
  "http": "POST",
4649
4953
  "path": "/automation/v1/scripts",
4650
4954
  "streaming": "no",
@@ -4658,13 +4962,13 @@ export const operations = [
4658
4962
  "name": "namespace",
4659
4963
  "type": "string",
4660
4964
  "required": true,
4661
- "description": "Choose a namespace without prior registration; praxis is read-only. Folded to lowercase; matches [a-z0-9][a-z0-9._-]{0,63}."
4965
+ "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}."
4662
4966
  },
4663
4967
  {
4664
4968
  "name": "name",
4665
4969
  "type": "string",
4666
4970
  "required": true,
4667
- "description": "Name, folded to lowercase; matches [a-z0-9][a-z0-9._-]{0,63}."
4971
+ "description": "Name, folded to lowercase; matches [a-z0-9][a-z0-9_-]{0,63}."
4668
4972
  },
4669
4973
  {
4670
4974
  "name": "description",
@@ -4712,7 +5016,7 @@ export const operations = [
4712
5016
  "resource": "automation.scripts",
4713
5017
  "method": "update",
4714
5018
  "summary": "Update a script draft",
4715
- "description": "Update description, labels or draft with the current draft revision in If-Match. Even metadata-only updates create a new draft revision.",
5019
+ "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.",
4716
5020
  "http": "PATCH",
4717
5021
  "path": "/automation/v1/scripts/{ns}/{name}",
4718
5022
  "streaming": "no",
@@ -5666,7 +5970,7 @@ export const operations = [
5666
5970
  "resource": "automation.workflows",
5667
5971
  "method": "create",
5668
5972
  "summary": "Create a workflow",
5669
- "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.",
5973
+ "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.",
5670
5974
  "http": "POST",
5671
5975
  "path": "/automation/v1/workflows",
5672
5976
  "streaming": "no",
@@ -5680,13 +5984,13 @@ export const operations = [
5680
5984
  "name": "namespace",
5681
5985
  "type": "string",
5682
5986
  "required": true,
5683
- "description": "Choose a namespace without prior registration; praxis is read-only. Folded to lowercase; matches [a-z0-9][a-z0-9._-]{0,63}."
5987
+ "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}."
5684
5988
  },
5685
5989
  {
5686
5990
  "name": "name",
5687
5991
  "type": "string",
5688
5992
  "required": true,
5689
- "description": "Name, folded to lowercase; matches [a-z0-9][a-z0-9._-]{0,63}."
5993
+ "description": "Name, folded to lowercase; matches [a-z0-9][a-z0-9_-]{0,63}."
5690
5994
  },
5691
5995
  {
5692
5996
  "name": "description",
@@ -6841,7 +7145,7 @@ export const operations = [
6841
7145
  "name": "{column}",
6842
7146
  "type": "string",
6843
7147
  "required": false,
6844
- "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."
7148
+ "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."
6845
7149
  },
6846
7150
  {
6847
7151
  "name": "and",
@@ -6889,7 +7193,7 @@ export const operations = [
6889
7193
  "name": "on_conflict",
6890
7194
  "type": "string",
6891
7195
  "required": false,
6892
- "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."
7196
+ "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."
6893
7197
  },
6894
7198
  {
6895
7199
  "name": "columns",
@@ -6903,7 +7207,7 @@ export const operations = [
6903
7207
  "resource": "database.databases.rest",
6904
7208
  "method": "retrieve",
6905
7209
  "summary": "Select rows",
6906
- "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.",
7210
+ "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.",
6907
7211
  "http": "GET",
6908
7212
  "path": "/database/v1/databases/{database_id}/rest/{table}",
6909
7213
  "streaming": "no",
@@ -6929,7 +7233,7 @@ export const operations = [
6929
7233
  "name": "{column}",
6930
7234
  "type": "string",
6931
7235
  "required": false,
6932
- "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."
7236
+ "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."
6933
7237
  },
6934
7238
  {
6935
7239
  "name": "and",
@@ -6977,7 +7281,7 @@ export const operations = [
6977
7281
  "name": "on_conflict",
6978
7282
  "type": "string",
6979
7283
  "required": false,
6980
- "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."
7284
+ "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."
6981
7285
  },
6982
7286
  {
6983
7287
  "name": "columns",
@@ -6991,7 +7295,7 @@ export const operations = [
6991
7295
  "resource": "database.databases.rest",
6992
7296
  "method": "head",
6993
7297
  "summary": "Count rows",
6994
- "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.",
7298
+ "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.",
6995
7299
  "http": "HEAD",
6996
7300
  "path": "/database/v1/databases/{database_id}/rest/{table}",
6997
7301
  "streaming": "no",
@@ -7017,7 +7321,7 @@ export const operations = [
7017
7321
  "name": "{column}",
7018
7322
  "type": "string",
7019
7323
  "required": false,
7020
- "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."
7324
+ "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."
7021
7325
  },
7022
7326
  {
7023
7327
  "name": "and",
@@ -7065,7 +7369,7 @@ export const operations = [
7065
7369
  "name": "on_conflict",
7066
7370
  "type": "string",
7067
7371
  "required": false,
7068
- "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."
7372
+ "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."
7069
7373
  },
7070
7374
  {
7071
7375
  "name": "columns",
@@ -7105,7 +7409,7 @@ export const operations = [
7105
7409
  "name": "{column}",
7106
7410
  "type": "string",
7107
7411
  "required": false,
7108
- "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."
7412
+ "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."
7109
7413
  },
7110
7414
  {
7111
7415
  "name": "and",
@@ -7153,7 +7457,7 @@ export const operations = [
7153
7457
  "name": "on_conflict",
7154
7458
  "type": "string",
7155
7459
  "required": false,
7156
- "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."
7460
+ "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."
7157
7461
  },
7158
7462
  {
7159
7463
  "name": "columns",
@@ -7171,7 +7475,7 @@ export const operations = [
7171
7475
  "resource": "database.databases.rest",
7172
7476
  "method": "create",
7173
7477
  "summary": "Insert rows",
7174
- "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.",
7478
+ "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.",
7175
7479
  "http": "POST",
7176
7480
  "path": "/database/v1/databases/{database_id}/rest/{table}",
7177
7481
  "streaming": "no",
@@ -7197,7 +7501,7 @@ export const operations = [
7197
7501
  "name": "{column}",
7198
7502
  "type": "string",
7199
7503
  "required": false,
7200
- "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."
7504
+ "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."
7201
7505
  },
7202
7506
  {
7203
7507
  "name": "and",
@@ -7245,7 +7549,7 @@ export const operations = [
7245
7549
  "name": "on_conflict",
7246
7550
  "type": "string",
7247
7551
  "required": false,
7248
- "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."
7552
+ "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."
7249
7553
  },
7250
7554
  {
7251
7555
  "name": "columns",
@@ -7297,7 +7601,7 @@ export const operations = [
7297
7601
  "resource": "database.databases.tables",
7298
7602
  "method": "create",
7299
7603
  "summary": "Create table",
7300
- "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.",
7604
+ "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.",
7301
7605
  "http": "POST",
7302
7606
  "path": "/database/v1/databases/{database_id}/tables",
7303
7607
  "streaming": "no",
@@ -7418,7 +7722,7 @@ export const operations = [
7418
7722
  "resource": "database.databases.tables.fields",
7419
7723
  "method": "create",
7420
7724
  "summary": "Add field",
7421
- "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.",
7725
+ "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.",
7422
7726
  "http": "POST",
7423
7727
  "path": "/database/v1/databases/{database_id}/tables/{table}/fields",
7424
7728
  "streaming": "no",
@@ -7587,7 +7891,7 @@ export const operations = [
7587
7891
  "resource": "file.files",
7588
7892
  "method": "create",
7589
7893
  "summary": "Upload file",
7590
- "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.",
7894
+ "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.",
7591
7895
  "http": "POST",
7592
7896
  "path": "/file/v1/files",
7593
7897
  "streaming": "no",
@@ -7602,7 +7906,7 @@ export const operations = [
7602
7906
  "name": "file",
7603
7907
  "type": "string",
7604
7908
  "required": true,
7605
- "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."
7909
+ "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."
7606
7910
  },
7607
7911
  {
7608
7912
  "name": "purpose",
@@ -7651,7 +7955,7 @@ export const operations = [
7651
7955
  "resource": "file.files",
7652
7956
  "method": "retrieve",
7653
7957
  "summary": "Retrieve file",
7654
- "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.",
7958
+ "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.",
7655
7959
  "http": "GET",
7656
7960
  "path": "/file/v1/files/{file_id}",
7657
7961
  "streaming": "no",
@@ -7668,7 +7972,7 @@ export const operations = [
7668
7972
  "resource": "file.files",
7669
7973
  "method": "retrieveContent",
7670
7974
  "summary": "Retrieve file content",
7671
- "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.",
7975
+ "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.",
7672
7976
  "http": "GET",
7673
7977
  "path": "/file/v1/files/{file_id}/content",
7674
7978
  "streaming": "no",
@@ -7682,30 +7986,176 @@ export const operations = [
7682
7986
  "query": []
7683
7987
  },
7684
7988
  {
7685
- "resource": "knowledge.vectorStores",
7686
- "method": "list",
7687
- "summary": "List knowledge bases",
7688
- "description": "Lists knowledge bases visible to the caller, newest first by default. Use last_id as after to read the next page; for example, ?limit=20.",
7689
- "http": "GET",
7690
- "path": "/knowledge/v1/vector_stores",
7989
+ "resource": "file.uploads",
7990
+ "method": "create",
7991
+ "summary": "Create an upload",
7992
+ "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.",
7993
+ "http": "POST",
7994
+ "path": "/file/v1/uploads",
7691
7995
  "streaming": "no",
7692
7996
  "pagination": false,
7693
7997
  "pathParams": [],
7694
- "query": [
7695
- {
7696
- "name": "status",
7697
- "type": "string",
7698
- "enum": [
7699
- "active",
7700
- "deleting"
7701
- ],
7702
- "required": false,
7703
- "description": "active selects active stores; deleting selects soft-deleted stores awaiting purge. Omission excludes soft-deleted stores."
7704
- },
7705
- {
7706
- "name": "after",
7707
- "type": "string",
7708
- "required": false,
7998
+ "query": [],
7999
+ "body": {
8000
+ "required": true,
8001
+ "fields": [
8002
+ {
8003
+ "name": "bytes",
8004
+ "type": "integer",
8005
+ "required": true,
8006
+ "description": "Exact complete file length in bytes, from 1 through 2147483648 (2 GiB); the sum of completed parts must match."
8007
+ },
8008
+ {
8009
+ "name": "filename",
8010
+ "type": "string",
8011
+ "required": true,
8012
+ "description": "Filename for the resulting file, at most 255 UTF-8 bytes."
8013
+ },
8014
+ {
8015
+ "name": "mime_type",
8016
+ "type": "string",
8017
+ "required": true,
8018
+ "description": "Declared MIME type; validated against the assembled content."
8019
+ },
8020
+ {
8021
+ "name": "purpose",
8022
+ "type": "string",
8023
+ "enum": [
8024
+ "user_data",
8025
+ "assistants",
8026
+ "vision"
8027
+ ],
8028
+ "required": true,
8029
+ "description": "Use user_data for conversation attachments, assistants for assistant files, or vision for PNG, JPEG, GIF and WebP images."
8030
+ },
8031
+ {
8032
+ "name": "expires_after",
8033
+ "type": "object",
8034
+ "required": false,
8035
+ "description": "Optional expiry policy for the resulting file; omission retains the file until deletion."
8036
+ },
8037
+ {
8038
+ "name": "part_size",
8039
+ "type": "integer",
8040
+ "required": false,
8041
+ "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."
8042
+ }
8043
+ ]
8044
+ }
8045
+ },
8046
+ {
8047
+ "resource": "file.uploads",
8048
+ "method": "cancel",
8049
+ "summary": "Cancel an upload",
8050
+ "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.",
8051
+ "http": "POST",
8052
+ "path": "/file/v1/uploads/{upload_id}/cancel",
8053
+ "streaming": "no",
8054
+ "pagination": false,
8055
+ "pathParams": [
8056
+ {
8057
+ "name": "upload_id",
8058
+ "sdkName": "upload_id"
8059
+ }
8060
+ ],
8061
+ "query": []
8062
+ },
8063
+ {
8064
+ "resource": "file.uploads",
8065
+ "method": "complete",
8066
+ "summary": "Complete an upload",
8067
+ "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.",
8068
+ "http": "POST",
8069
+ "path": "/file/v1/uploads/{upload_id}/complete",
8070
+ "streaming": "no",
8071
+ "pagination": false,
8072
+ "pathParams": [
8073
+ {
8074
+ "name": "upload_id",
8075
+ "sdkName": "upload_id"
8076
+ }
8077
+ ],
8078
+ "query": [],
8079
+ "body": {
8080
+ "required": true,
8081
+ "fields": [
8082
+ {
8083
+ "name": "part_ids",
8084
+ "type": "array",
8085
+ "itemType": "string",
8086
+ "required": true,
8087
+ "description": "All part IDs in concatenation order, without duplicates. Fixed-size uploads require increasing part_number order."
8088
+ },
8089
+ {
8090
+ "name": "md5",
8091
+ "type": "string",
8092
+ "required": false,
8093
+ "description": "Optional whole-file MD5 as 32 hexadecimal characters; verified after assembly."
8094
+ }
8095
+ ]
8096
+ }
8097
+ },
8098
+ {
8099
+ "resource": "file.uploads.parts",
8100
+ "method": "create",
8101
+ "summary": "Add an upload part",
8102
+ "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.",
8103
+ "http": "POST",
8104
+ "path": "/file/v1/uploads/{upload_id}/parts",
8105
+ "streaming": "no",
8106
+ "pagination": false,
8107
+ "multipart": true,
8108
+ "pathParams": [
8109
+ {
8110
+ "name": "upload_id",
8111
+ "sdkName": "upload_id"
8112
+ }
8113
+ ],
8114
+ "query": [
8115
+ {
8116
+ "name": "part_number",
8117
+ "type": "integer",
8118
+ "required": false,
8119
+ "description": "Required when create set part_size; 1 through ceil(bytes / part_size). Ignored for general uploads."
8120
+ }
8121
+ ],
8122
+ "body": {
8123
+ "required": true,
8124
+ "fields": [
8125
+ {
8126
+ "name": "data",
8127
+ "type": "string",
8128
+ "required": true,
8129
+ "description": "Raw bytes of this part, nonempty and at most 64000000 bytes."
8130
+ }
8131
+ ]
8132
+ }
8133
+ },
8134
+ {
8135
+ "resource": "knowledge.vectorStores",
8136
+ "method": "list",
8137
+ "summary": "List knowledge bases",
8138
+ "description": "Lists knowledge bases visible to the caller, newest first by default. Use last_id as after to read the next page; for example, ?limit=20.",
8139
+ "http": "GET",
8140
+ "path": "/knowledge/v1/vector_stores",
8141
+ "streaming": "no",
8142
+ "pagination": false,
8143
+ "pathParams": [],
8144
+ "query": [
8145
+ {
8146
+ "name": "status",
8147
+ "type": "string",
8148
+ "enum": [
8149
+ "active",
8150
+ "deleting"
8151
+ ],
8152
+ "required": false,
8153
+ "description": "active selects active stores; deleting selects soft-deleted stores awaiting purge. Omission excludes soft-deleted stores."
8154
+ },
8155
+ {
8156
+ "name": "after",
8157
+ "type": "string",
8158
+ "required": false,
7709
8159
  "description": "Cursor ID from the previous page."
7710
8160
  },
7711
8161
  {
@@ -11811,7 +12261,7 @@ export const operations = [
11811
12261
  "name": "message",
11812
12262
  "type": "string",
11813
12263
  "required": true,
11814
- "description": "Problem description and original error text; at most 4096 Unicode code points."
12264
+ "description": "Problem description, at most 4096 Unicode code points; may be empty only when contexts.praxis.error.message is a non-empty string."
11815
12265
  },
11816
12266
  {
11817
12267
  "name": "contact_email",
@@ -12109,7 +12559,7 @@ export const operations = [
12109
12559
  "resource": "sandbox.sandboxes",
12110
12560
  "method": "create",
12111
12561
  "summary": "Create sandbox (v2)",
12112
- "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.",
12562
+ "description": "Create a sandbox from the template. All system communication with the sandbox is secured.",
12113
12563
  "http": "POST",
12114
12564
  "path": "/sandbox/v1/sandboxes",
12115
12565
  "streaming": "no",
@@ -12123,7 +12573,7 @@ export const operations = [
12123
12573
  "name": "templateID",
12124
12574
  "type": "string",
12125
12575
  "required": true,
12126
- "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`)."
12576
+ "description": "Identifier of the required template"
12127
12577
  },
12128
12578
  {
12129
12579
  "name": "timeout",
@@ -12261,7 +12711,7 @@ export const operations = [
12261
12711
  "resource": "sandbox.sandboxes",
12262
12712
  "method": "connect",
12263
12713
  "summary": "Connect sandbox (v2)",
12264
- "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.",
12714
+ "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.",
12265
12715
  "http": "POST",
12266
12716
  "path": "/sandbox/v1/sandboxes/{sandboxID}/connect",
12267
12717
  "streaming": "no",
@@ -12420,7 +12870,7 @@ export const operations = [
12420
12870
  "resource": "sandbox.sandboxes.metrics",
12421
12871
  "method": "list",
12422
12872
  "summary": "Sandbox metrics",
12423
- "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.",
12873
+ "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.",
12424
12874
  "http": "GET",
12425
12875
  "path": "/sandbox/v1/sandboxes/{sandboxID}/metrics",
12426
12876
  "streaming": "no",
@@ -12504,7 +12954,7 @@ export const operations = [
12504
12954
  "resource": "sandbox.sandboxes",
12505
12955
  "method": "pause",
12506
12956
  "summary": "Pause sandbox",
12507
- "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.",
12957
+ "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.",
12508
12958
  "http": "POST",
12509
12959
  "path": "/sandbox/v1/sandboxes/{sandboxID}/pause",
12510
12960
  "streaming": "no",
@@ -12896,7 +13346,7 @@ export const operations = [
12896
13346
  "resource": "sandbox.templates",
12897
13347
  "method": "list",
12898
13348
  "summary": "List templates (v2)",
12899
- "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.",
13349
+ "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.",
12900
13350
  "http": "GET",
12901
13351
  "path": "/sandbox/v1/templates",
12902
13352
  "streaming": "no",
@@ -13657,6 +14107,1466 @@ export const operations = [
13657
14107
  ]
13658
14108
  }
13659
14109
  },
14110
+ {
14111
+ "resource": "ticket.activity",
14112
+ "method": "retrieve",
14113
+ "summary": "List activity",
14114
+ "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.",
14115
+ "http": "GET",
14116
+ "path": "/ticket/v1/activity",
14117
+ "streaming": "no",
14118
+ "pagination": false,
14119
+ "pathParams": [],
14120
+ "query": [
14121
+ {
14122
+ "name": "repository",
14123
+ "type": "string",
14124
+ "required": false,
14125
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14126
+ },
14127
+ {
14128
+ "name": "page_size",
14129
+ "type": "integer",
14130
+ "required": false,
14131
+ "description": "Records per page; defaults to 30, maximum 100."
14132
+ },
14133
+ {
14134
+ "name": "page_token",
14135
+ "type": "string",
14136
+ "required": false,
14137
+ "description": "Cursor returned as next_page_token; omit for the first page."
14138
+ },
14139
+ {
14140
+ "name": "filter",
14141
+ "type": "string",
14142
+ "required": false,
14143
+ "description": "Activity qualifiers: actor, actor-kind, action, ticket, source and since; passed unchanged to the service."
14144
+ }
14145
+ ]
14146
+ },
14147
+ {
14148
+ "resource": "ticket.comments",
14149
+ "method": "delete",
14150
+ "summary": "Remove comments",
14151
+ "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.",
14152
+ "http": "DELETE",
14153
+ "path": "/ticket/v1/comments/{id}",
14154
+ "streaming": "no",
14155
+ "pagination": false,
14156
+ "pathParams": [
14157
+ {
14158
+ "name": "id",
14159
+ "sdkName": "id"
14160
+ }
14161
+ ],
14162
+ "query": [
14163
+ {
14164
+ "name": "repository",
14165
+ "type": "string",
14166
+ "required": false,
14167
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14168
+ }
14169
+ ]
14170
+ },
14171
+ {
14172
+ "resource": "ticket.comments",
14173
+ "method": "retrieve",
14174
+ "summary": "Read comments",
14175
+ "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.",
14176
+ "http": "GET",
14177
+ "path": "/ticket/v1/comments/{id}",
14178
+ "streaming": "no",
14179
+ "pagination": false,
14180
+ "pathParams": [
14181
+ {
14182
+ "name": "id",
14183
+ "sdkName": "id"
14184
+ }
14185
+ ],
14186
+ "query": [
14187
+ {
14188
+ "name": "repository",
14189
+ "type": "string",
14190
+ "required": false,
14191
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14192
+ }
14193
+ ]
14194
+ },
14195
+ {
14196
+ "resource": "ticket.comments",
14197
+ "method": "update",
14198
+ "summary": "Update comments",
14199
+ "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.",
14200
+ "http": "PATCH",
14201
+ "path": "/ticket/v1/comments/{id}",
14202
+ "streaming": "no",
14203
+ "pagination": false,
14204
+ "pathParams": [
14205
+ {
14206
+ "name": "id",
14207
+ "sdkName": "id"
14208
+ }
14209
+ ],
14210
+ "query": [
14211
+ {
14212
+ "name": "repository",
14213
+ "type": "string",
14214
+ "required": false,
14215
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14216
+ }
14217
+ ],
14218
+ "body": {
14219
+ "required": true,
14220
+ "fields": [
14221
+ {
14222
+ "name": "body",
14223
+ "type": "string",
14224
+ "required": true,
14225
+ "description": "Markdown text, at most 65536 characters."
14226
+ },
14227
+ {
14228
+ "name": "in_reply_to",
14229
+ "type": "string",
14230
+ "required": false,
14231
+ "description": "Opaque identifier returned by this resource's create or list operation."
14232
+ }
14233
+ ]
14234
+ }
14235
+ },
14236
+ {
14237
+ "resource": "ticket.comments.reactions",
14238
+ "method": "list",
14239
+ "summary": "List reactions",
14240
+ "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.",
14241
+ "http": "GET",
14242
+ "path": "/ticket/v1/comments/{id}/reactions",
14243
+ "streaming": "no",
14244
+ "pagination": false,
14245
+ "pathParams": [
14246
+ {
14247
+ "name": "id",
14248
+ "sdkName": "id"
14249
+ }
14250
+ ],
14251
+ "query": [
14252
+ {
14253
+ "name": "repository",
14254
+ "type": "string",
14255
+ "required": false,
14256
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14257
+ },
14258
+ {
14259
+ "name": "page_size",
14260
+ "type": "integer",
14261
+ "required": false,
14262
+ "description": "Records per page; defaults to 30, maximum 100."
14263
+ },
14264
+ {
14265
+ "name": "page_token",
14266
+ "type": "string",
14267
+ "required": false,
14268
+ "description": "Cursor returned as next_page_token; omit for the first page."
14269
+ }
14270
+ ]
14271
+ },
14272
+ {
14273
+ "resource": "ticket.comments.reactions",
14274
+ "method": "create",
14275
+ "summary": "Create or add reactions",
14276
+ "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.",
14277
+ "http": "POST",
14278
+ "path": "/ticket/v1/comments/{id}/reactions",
14279
+ "streaming": "no",
14280
+ "pagination": false,
14281
+ "pathParams": [
14282
+ {
14283
+ "name": "id",
14284
+ "sdkName": "id"
14285
+ }
14286
+ ],
14287
+ "query": [
14288
+ {
14289
+ "name": "repository",
14290
+ "type": "string",
14291
+ "required": false,
14292
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14293
+ }
14294
+ ],
14295
+ "body": {
14296
+ "required": true,
14297
+ "fields": [
14298
+ {
14299
+ "name": "content",
14300
+ "type": "string",
14301
+ "enum": [
14302
+ "+1",
14303
+ "-1",
14304
+ "laugh",
14305
+ "confused",
14306
+ "heart",
14307
+ "hooray",
14308
+ "eyes",
14309
+ "rocket"
14310
+ ],
14311
+ "required": true,
14312
+ "description": "Reaction to add or remove: +1 approves, -1 disapproves, laugh, confused, heart, hooray, eyes, or rocket."
14313
+ }
14314
+ ]
14315
+ }
14316
+ },
14317
+ {
14318
+ "resource": "ticket.comments.reactions",
14319
+ "method": "delete",
14320
+ "summary": "Remove reactions",
14321
+ "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.",
14322
+ "http": "DELETE",
14323
+ "path": "/ticket/v1/comments/{id}/reactions/{content}",
14324
+ "streaming": "no",
14325
+ "pagination": false,
14326
+ "pathParams": [
14327
+ {
14328
+ "name": "id",
14329
+ "sdkName": "id"
14330
+ },
14331
+ {
14332
+ "name": "content",
14333
+ "sdkName": "content"
14334
+ }
14335
+ ],
14336
+ "query": [
14337
+ {
14338
+ "name": "repository",
14339
+ "type": "string",
14340
+ "required": false,
14341
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14342
+ }
14343
+ ]
14344
+ },
14345
+ {
14346
+ "resource": "ticket.labels",
14347
+ "method": "list",
14348
+ "summary": "List labels",
14349
+ "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.",
14350
+ "http": "GET",
14351
+ "path": "/ticket/v1/labels",
14352
+ "streaming": "no",
14353
+ "pagination": false,
14354
+ "pathParams": [],
14355
+ "query": [
14356
+ {
14357
+ "name": "repository",
14358
+ "type": "string",
14359
+ "required": false,
14360
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14361
+ },
14362
+ {
14363
+ "name": "page_size",
14364
+ "type": "integer",
14365
+ "required": false,
14366
+ "description": "Records per page; defaults to 30, maximum 100."
14367
+ },
14368
+ {
14369
+ "name": "page_token",
14370
+ "type": "string",
14371
+ "required": false,
14372
+ "description": "Cursor returned as next_page_token; omit for the first page."
14373
+ }
14374
+ ]
14375
+ },
14376
+ {
14377
+ "resource": "ticket.labels",
14378
+ "method": "create",
14379
+ "summary": "Create or add labels",
14380
+ "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.",
14381
+ "http": "POST",
14382
+ "path": "/ticket/v1/labels",
14383
+ "streaming": "no",
14384
+ "pagination": false,
14385
+ "pathParams": [],
14386
+ "query": [
14387
+ {
14388
+ "name": "repository",
14389
+ "type": "string",
14390
+ "required": false,
14391
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14392
+ }
14393
+ ],
14394
+ "body": {
14395
+ "required": true,
14396
+ "fields": [
14397
+ {
14398
+ "name": "name",
14399
+ "type": "string",
14400
+ "required": true,
14401
+ "description": "Case-insensitive label name within the repository."
14402
+ },
14403
+ {
14404
+ "name": "color",
14405
+ "type": "string",
14406
+ "required": true,
14407
+ "description": "Six hexadecimal digits without #."
14408
+ },
14409
+ {
14410
+ "name": "description",
14411
+ "type": "string",
14412
+ "required": false,
14413
+ "description": "Label's purpose."
14414
+ }
14415
+ ]
14416
+ }
14417
+ },
14418
+ {
14419
+ "resource": "ticket.labels",
14420
+ "method": "delete",
14421
+ "summary": "Remove labels",
14422
+ "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.",
14423
+ "http": "DELETE",
14424
+ "path": "/ticket/v1/labels/{name}",
14425
+ "streaming": "no",
14426
+ "pagination": false,
14427
+ "pathParams": [
14428
+ {
14429
+ "name": "name",
14430
+ "sdkName": "name"
14431
+ }
14432
+ ],
14433
+ "query": [
14434
+ {
14435
+ "name": "repository",
14436
+ "type": "string",
14437
+ "required": false,
14438
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14439
+ }
14440
+ ]
14441
+ },
14442
+ {
14443
+ "resource": "ticket.labels",
14444
+ "method": "update",
14445
+ "summary": "Update labels",
14446
+ "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.",
14447
+ "http": "PATCH",
14448
+ "path": "/ticket/v1/labels/{name}",
14449
+ "streaming": "no",
14450
+ "pagination": false,
14451
+ "pathParams": [
14452
+ {
14453
+ "name": "name",
14454
+ "sdkName": "name"
14455
+ }
14456
+ ],
14457
+ "query": [
14458
+ {
14459
+ "name": "repository",
14460
+ "type": "string",
14461
+ "required": false,
14462
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14463
+ }
14464
+ ],
14465
+ "body": {
14466
+ "required": true,
14467
+ "fields": [
14468
+ {
14469
+ "name": "color",
14470
+ "type": "string",
14471
+ "required": false,
14472
+ "description": "Six hexadecimal digits without #."
14473
+ },
14474
+ {
14475
+ "name": "description",
14476
+ "type": "string",
14477
+ "required": false,
14478
+ "description": "Label's purpose."
14479
+ },
14480
+ {
14481
+ "name": "new_name",
14482
+ "type": "string",
14483
+ "required": false,
14484
+ "description": "Case-insensitive label name within the repository."
14485
+ }
14486
+ ]
14487
+ }
14488
+ },
14489
+ {
14490
+ "resource": "ticket.milestones",
14491
+ "method": "list",
14492
+ "summary": "List milestones",
14493
+ "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.",
14494
+ "http": "GET",
14495
+ "path": "/ticket/v1/milestones",
14496
+ "streaming": "no",
14497
+ "pagination": false,
14498
+ "pathParams": [],
14499
+ "query": [
14500
+ {
14501
+ "name": "repository",
14502
+ "type": "string",
14503
+ "required": false,
14504
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14505
+ },
14506
+ {
14507
+ "name": "page_size",
14508
+ "type": "integer",
14509
+ "required": false,
14510
+ "description": "Records per page; defaults to 30, maximum 100."
14511
+ },
14512
+ {
14513
+ "name": "page_token",
14514
+ "type": "string",
14515
+ "required": false,
14516
+ "description": "Cursor returned as next_page_token; omit for the first page."
14517
+ }
14518
+ ]
14519
+ },
14520
+ {
14521
+ "resource": "ticket.milestones",
14522
+ "method": "create",
14523
+ "summary": "Create or add milestones",
14524
+ "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.",
14525
+ "http": "POST",
14526
+ "path": "/ticket/v1/milestones",
14527
+ "streaming": "no",
14528
+ "pagination": false,
14529
+ "pathParams": [],
14530
+ "query": [
14531
+ {
14532
+ "name": "repository",
14533
+ "type": "string",
14534
+ "required": false,
14535
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14536
+ }
14537
+ ],
14538
+ "body": {
14539
+ "required": true,
14540
+ "fields": [
14541
+ {
14542
+ "name": "title",
14543
+ "type": "string",
14544
+ "required": true,
14545
+ "description": "Short title, at most 256 Unicode characters."
14546
+ },
14547
+ {
14548
+ "name": "description",
14549
+ "type": "string",
14550
+ "required": false,
14551
+ "description": "Milestone description."
14552
+ },
14553
+ {
14554
+ "name": "due_on",
14555
+ "type": "string",
14556
+ "required": false,
14557
+ "description": "Due date, or null if unset."
14558
+ },
14559
+ {
14560
+ "name": "state",
14561
+ "type": "string",
14562
+ "enum": [
14563
+ "open",
14564
+ "closed"
14565
+ ],
14566
+ "required": false,
14567
+ "description": "open means actionable; closed means resolved or declined."
14568
+ }
14569
+ ]
14570
+ }
14571
+ },
14572
+ {
14573
+ "resource": "ticket.milestones",
14574
+ "method": "delete",
14575
+ "summary": "Remove milestones",
14576
+ "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.",
14577
+ "http": "DELETE",
14578
+ "path": "/ticket/v1/milestones/{number}",
14579
+ "streaming": "no",
14580
+ "pagination": false,
14581
+ "pathParams": [
14582
+ {
14583
+ "name": "number",
14584
+ "sdkName": "number"
14585
+ }
14586
+ ],
14587
+ "query": [
14588
+ {
14589
+ "name": "repository",
14590
+ "type": "string",
14591
+ "required": false,
14592
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14593
+ }
14594
+ ]
14595
+ },
14596
+ {
14597
+ "resource": "ticket.milestones",
14598
+ "method": "retrieve",
14599
+ "summary": "Read milestones",
14600
+ "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.",
14601
+ "http": "GET",
14602
+ "path": "/ticket/v1/milestones/{number}",
14603
+ "streaming": "no",
14604
+ "pagination": false,
14605
+ "pathParams": [
14606
+ {
14607
+ "name": "number",
14608
+ "sdkName": "number"
14609
+ }
14610
+ ],
14611
+ "query": [
14612
+ {
14613
+ "name": "repository",
14614
+ "type": "string",
14615
+ "required": false,
14616
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14617
+ }
14618
+ ]
14619
+ },
14620
+ {
14621
+ "resource": "ticket.milestones",
14622
+ "method": "update",
14623
+ "summary": "Update milestones",
14624
+ "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.",
14625
+ "http": "PATCH",
14626
+ "path": "/ticket/v1/milestones/{number}",
14627
+ "streaming": "no",
14628
+ "pagination": false,
14629
+ "pathParams": [
14630
+ {
14631
+ "name": "number",
14632
+ "sdkName": "number"
14633
+ }
14634
+ ],
14635
+ "query": [
14636
+ {
14637
+ "name": "repository",
14638
+ "type": "string",
14639
+ "required": false,
14640
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14641
+ }
14642
+ ],
14643
+ "body": {
14644
+ "required": true,
14645
+ "fields": [
14646
+ {
14647
+ "name": "title",
14648
+ "type": "string",
14649
+ "required": false,
14650
+ "description": "Short title, at most 256 Unicode characters."
14651
+ },
14652
+ {
14653
+ "name": "description",
14654
+ "type": "string",
14655
+ "required": false,
14656
+ "description": "Milestone description."
14657
+ },
14658
+ {
14659
+ "name": "due_on",
14660
+ "type": "string",
14661
+ "required": false,
14662
+ "description": "Due date, or null if unset."
14663
+ },
14664
+ {
14665
+ "name": "state",
14666
+ "type": "string",
14667
+ "enum": [
14668
+ "open",
14669
+ "closed"
14670
+ ],
14671
+ "required": false,
14672
+ "description": "open means actionable; closed means resolved or declined."
14673
+ }
14674
+ ]
14675
+ }
14676
+ },
14677
+ {
14678
+ "resource": "ticket.repositories",
14679
+ "method": "list",
14680
+ "summary": "List repositories",
14681
+ "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.",
14682
+ "http": "GET",
14683
+ "path": "/ticket/v1/repositories",
14684
+ "streaming": "no",
14685
+ "pagination": false,
14686
+ "pathParams": [],
14687
+ "query": [
14688
+ {
14689
+ "name": "page_size",
14690
+ "type": "integer",
14691
+ "required": false,
14692
+ "description": "Records per page; defaults to 30, maximum 100."
14693
+ },
14694
+ {
14695
+ "name": "page_token",
14696
+ "type": "string",
14697
+ "required": false,
14698
+ "description": "Cursor returned as next_page_token; omit for the first page."
14699
+ }
14700
+ ]
14701
+ },
14702
+ {
14703
+ "resource": "ticket.tickets",
14704
+ "method": "list",
14705
+ "summary": "List tickets",
14706
+ "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.",
14707
+ "http": "GET",
14708
+ "path": "/ticket/v1/tickets",
14709
+ "streaming": "no",
14710
+ "pagination": false,
14711
+ "pathParams": [],
14712
+ "query": [
14713
+ {
14714
+ "name": "repository",
14715
+ "type": "string",
14716
+ "required": false,
14717
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14718
+ },
14719
+ {
14720
+ "name": "page_size",
14721
+ "type": "integer",
14722
+ "required": false,
14723
+ "description": "Records per page; defaults to 30, maximum 100."
14724
+ },
14725
+ {
14726
+ "name": "page_token",
14727
+ "type": "string",
14728
+ "required": false,
14729
+ "description": "Cursor returned as next_page_token; omit for the first page."
14730
+ },
14731
+ {
14732
+ "name": "filter",
14733
+ "type": "string",
14734
+ "required": false,
14735
+ "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."
14736
+ }
14737
+ ]
14738
+ },
14739
+ {
14740
+ "resource": "ticket.tickets",
14741
+ "method": "create",
14742
+ "summary": "Create or add tickets",
14743
+ "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.",
14744
+ "http": "POST",
14745
+ "path": "/ticket/v1/tickets",
14746
+ "streaming": "no",
14747
+ "pagination": false,
14748
+ "pathParams": [],
14749
+ "query": [
14750
+ {
14751
+ "name": "repository",
14752
+ "type": "string",
14753
+ "required": false,
14754
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14755
+ }
14756
+ ],
14757
+ "body": {
14758
+ "required": true,
14759
+ "fields": [
14760
+ {
14761
+ "name": "title",
14762
+ "type": "string",
14763
+ "required": true,
14764
+ "description": "Short title, at most 256 Unicode characters."
14765
+ },
14766
+ {
14767
+ "name": "body",
14768
+ "type": "string",
14769
+ "required": false,
14770
+ "description": "Markdown text, at most 65536 characters."
14771
+ },
14772
+ {
14773
+ "name": "type",
14774
+ "type": "string",
14775
+ "required": false,
14776
+ "description": "Built-in type name; null clears an existing type."
14777
+ },
14778
+ {
14779
+ "name": "labels",
14780
+ "type": "array",
14781
+ "itemType": "string",
14782
+ "required": false,
14783
+ "description": "Labels attached to this ticket; updates replace the complete list."
14784
+ },
14785
+ {
14786
+ "name": "assignees",
14787
+ "type": "array",
14788
+ "itemType": "string",
14789
+ "required": false,
14790
+ "description": "Complete assignee list, at most ten."
14791
+ },
14792
+ {
14793
+ "name": "milestone",
14794
+ "type": "integer",
14795
+ "required": false,
14796
+ "description": "Repository-local number returned by create or list; distinct from the object's id."
14797
+ },
14798
+ {
14799
+ "name": "parent",
14800
+ "type": "integer",
14801
+ "required": false,
14802
+ "description": "Repository-local number returned by create or list; distinct from the object's id."
14803
+ }
14804
+ ]
14805
+ }
14806
+ },
14807
+ {
14808
+ "resource": "ticket.tickets",
14809
+ "method": "retrieve",
14810
+ "summary": "Read tickets",
14811
+ "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.",
14812
+ "http": "GET",
14813
+ "path": "/ticket/v1/tickets/{number}",
14814
+ "streaming": "no",
14815
+ "pagination": false,
14816
+ "pathParams": [
14817
+ {
14818
+ "name": "number",
14819
+ "sdkName": "number"
14820
+ }
14821
+ ],
14822
+ "query": [
14823
+ {
14824
+ "name": "repository",
14825
+ "type": "string",
14826
+ "required": false,
14827
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14828
+ }
14829
+ ]
14830
+ },
14831
+ {
14832
+ "resource": "ticket.tickets",
14833
+ "method": "update",
14834
+ "summary": "Update tickets",
14835
+ "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.",
14836
+ "http": "PATCH",
14837
+ "path": "/ticket/v1/tickets/{number}",
14838
+ "streaming": "no",
14839
+ "pagination": false,
14840
+ "pathParams": [
14841
+ {
14842
+ "name": "number",
14843
+ "sdkName": "number"
14844
+ }
14845
+ ],
14846
+ "query": [
14847
+ {
14848
+ "name": "repository",
14849
+ "type": "string",
14850
+ "required": false,
14851
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14852
+ }
14853
+ ],
14854
+ "body": {
14855
+ "required": true,
14856
+ "fields": [
14857
+ {
14858
+ "name": "title",
14859
+ "type": "string",
14860
+ "required": false,
14861
+ "description": "Short title, at most 256 Unicode characters."
14862
+ },
14863
+ {
14864
+ "name": "body",
14865
+ "type": "string",
14866
+ "required": false,
14867
+ "description": "Markdown text, at most 65536 characters."
14868
+ },
14869
+ {
14870
+ "name": "type",
14871
+ "type": "string",
14872
+ "required": false,
14873
+ "description": "Built-in type name; null clears an existing type."
14874
+ },
14875
+ {
14876
+ "name": "labels",
14877
+ "type": "array",
14878
+ "itemType": "string",
14879
+ "required": false,
14880
+ "description": "Labels attached to this ticket; updates replace the complete list."
14881
+ },
14882
+ {
14883
+ "name": "assignees",
14884
+ "type": "array",
14885
+ "itemType": "string",
14886
+ "required": false,
14887
+ "description": "Complete assignee list, at most ten."
14888
+ },
14889
+ {
14890
+ "name": "milestone",
14891
+ "type": "integer",
14892
+ "required": false,
14893
+ "description": "Repository-local number returned by create or list; distinct from the object's id."
14894
+ },
14895
+ {
14896
+ "name": "state",
14897
+ "type": "string",
14898
+ "enum": [
14899
+ "open",
14900
+ "closed"
14901
+ ],
14902
+ "required": false,
14903
+ "description": "open means actionable; closed means resolved or declined."
14904
+ },
14905
+ {
14906
+ "name": "state_reason",
14907
+ "type": "string",
14908
+ "enum": [
14909
+ "completed",
14910
+ "not_planned",
14911
+ "duplicate"
14912
+ ],
14913
+ "required": false,
14914
+ "description": "Reason for closing: completed resolves, not_planned declines, duplicate marks a duplicate."
14915
+ },
14916
+ {
14917
+ "name": "duplicate_of",
14918
+ "type": "integer",
14919
+ "required": false,
14920
+ "description": "Repository-local number returned by create or list; distinct from the object's id."
14921
+ }
14922
+ ]
14923
+ }
14924
+ },
14925
+ {
14926
+ "resource": "ticket.tickets.comments",
14927
+ "method": "list",
14928
+ "summary": "List comments",
14929
+ "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.",
14930
+ "http": "GET",
14931
+ "path": "/ticket/v1/tickets/{number}/comments",
14932
+ "streaming": "no",
14933
+ "pagination": false,
14934
+ "pathParams": [
14935
+ {
14936
+ "name": "number",
14937
+ "sdkName": "number"
14938
+ }
14939
+ ],
14940
+ "query": [
14941
+ {
14942
+ "name": "repository",
14943
+ "type": "string",
14944
+ "required": false,
14945
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14946
+ },
14947
+ {
14948
+ "name": "page_size",
14949
+ "type": "integer",
14950
+ "required": false,
14951
+ "description": "Records per page; defaults to 30, maximum 100."
14952
+ },
14953
+ {
14954
+ "name": "page_token",
14955
+ "type": "string",
14956
+ "required": false,
14957
+ "description": "Cursor returned as next_page_token; omit for the first page."
14958
+ }
14959
+ ]
14960
+ },
14961
+ {
14962
+ "resource": "ticket.tickets.comments",
14963
+ "method": "create",
14964
+ "summary": "Create or add comments",
14965
+ "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.",
14966
+ "http": "POST",
14967
+ "path": "/ticket/v1/tickets/{number}/comments",
14968
+ "streaming": "no",
14969
+ "pagination": false,
14970
+ "pathParams": [
14971
+ {
14972
+ "name": "number",
14973
+ "sdkName": "number"
14974
+ }
14975
+ ],
14976
+ "query": [
14977
+ {
14978
+ "name": "repository",
14979
+ "type": "string",
14980
+ "required": false,
14981
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14982
+ }
14983
+ ],
14984
+ "body": {
14985
+ "required": true,
14986
+ "fields": [
14987
+ {
14988
+ "name": "body",
14989
+ "type": "string",
14990
+ "required": true,
14991
+ "description": "Markdown text, at most 65536 characters."
14992
+ },
14993
+ {
14994
+ "name": "in_reply_to",
14995
+ "type": "string",
14996
+ "required": false,
14997
+ "description": "Opaque identifier returned by this resource's create or list operation."
14998
+ }
14999
+ ]
15000
+ }
15001
+ },
15002
+ {
15003
+ "resource": "ticket.tickets.dependencies",
15004
+ "method": "retrieveBlockedBy",
15005
+ "summary": "List blocked by",
15006
+ "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.",
15007
+ "http": "GET",
15008
+ "path": "/ticket/v1/tickets/{number}/dependencies/blocked_by",
15009
+ "streaming": "no",
15010
+ "pagination": false,
15011
+ "pathParams": [
15012
+ {
15013
+ "name": "number",
15014
+ "sdkName": "number"
15015
+ }
15016
+ ],
15017
+ "query": [
15018
+ {
15019
+ "name": "repository",
15020
+ "type": "string",
15021
+ "required": false,
15022
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15023
+ },
15024
+ {
15025
+ "name": "page_size",
15026
+ "type": "integer",
15027
+ "required": false,
15028
+ "description": "Records per page; defaults to 30, maximum 100."
15029
+ },
15030
+ {
15031
+ "name": "page_token",
15032
+ "type": "string",
15033
+ "required": false,
15034
+ "description": "Cursor returned as next_page_token; omit for the first page."
15035
+ }
15036
+ ]
15037
+ },
15038
+ {
15039
+ "resource": "ticket.tickets.dependencies.blockedBy",
15040
+ "method": "create",
15041
+ "summary": "Create or add blocked by",
15042
+ "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.",
15043
+ "http": "POST",
15044
+ "path": "/ticket/v1/tickets/{number}/dependencies/blocked_by",
15045
+ "streaming": "no",
15046
+ "pagination": false,
15047
+ "pathParams": [
15048
+ {
15049
+ "name": "number",
15050
+ "sdkName": "number"
15051
+ }
15052
+ ],
15053
+ "query": [
15054
+ {
15055
+ "name": "repository",
15056
+ "type": "string",
15057
+ "required": false,
15058
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15059
+ }
15060
+ ],
15061
+ "body": {
15062
+ "required": true,
15063
+ "fields": [
15064
+ {
15065
+ "name": "blocked_by",
15066
+ "type": "integer",
15067
+ "required": true,
15068
+ "description": "Repository-local number returned by create or list; distinct from the object's id."
15069
+ }
15070
+ ]
15071
+ }
15072
+ },
15073
+ {
15074
+ "resource": "ticket.tickets.dependencies.blockedBy",
15075
+ "method": "delete",
15076
+ "summary": "Remove blocked by",
15077
+ "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.",
15078
+ "http": "DELETE",
15079
+ "path": "/ticket/v1/tickets/{number}/dependencies/blocked_by/{n}",
15080
+ "streaming": "no",
15081
+ "pagination": false,
15082
+ "pathParams": [
15083
+ {
15084
+ "name": "number",
15085
+ "sdkName": "number"
15086
+ },
15087
+ {
15088
+ "name": "n",
15089
+ "sdkName": "n"
15090
+ }
15091
+ ],
15092
+ "query": [
15093
+ {
15094
+ "name": "repository",
15095
+ "type": "string",
15096
+ "required": false,
15097
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15098
+ }
15099
+ ]
15100
+ },
15101
+ {
15102
+ "resource": "ticket.tickets.dependencies",
15103
+ "method": "retrieveBlocking",
15104
+ "summary": "List blocking",
15105
+ "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.",
15106
+ "http": "GET",
15107
+ "path": "/ticket/v1/tickets/{number}/dependencies/blocking",
15108
+ "streaming": "no",
15109
+ "pagination": false,
15110
+ "pathParams": [
15111
+ {
15112
+ "name": "number",
15113
+ "sdkName": "number"
15114
+ }
15115
+ ],
15116
+ "query": [
15117
+ {
15118
+ "name": "repository",
15119
+ "type": "string",
15120
+ "required": false,
15121
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15122
+ },
15123
+ {
15124
+ "name": "page_size",
15125
+ "type": "integer",
15126
+ "required": false,
15127
+ "description": "Records per page; defaults to 30, maximum 100."
15128
+ },
15129
+ {
15130
+ "name": "page_token",
15131
+ "type": "string",
15132
+ "required": false,
15133
+ "description": "Cursor returned as next_page_token; omit for the first page."
15134
+ }
15135
+ ]
15136
+ },
15137
+ {
15138
+ "resource": "ticket.tickets.events",
15139
+ "method": "list",
15140
+ "summary": "List events",
15141
+ "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.",
15142
+ "http": "GET",
15143
+ "path": "/ticket/v1/tickets/{number}/events",
15144
+ "streaming": "no",
15145
+ "pagination": false,
15146
+ "pathParams": [
15147
+ {
15148
+ "name": "number",
15149
+ "sdkName": "number"
15150
+ }
15151
+ ],
15152
+ "query": [
15153
+ {
15154
+ "name": "repository",
15155
+ "type": "string",
15156
+ "required": false,
15157
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15158
+ },
15159
+ {
15160
+ "name": "page_size",
15161
+ "type": "integer",
15162
+ "required": false,
15163
+ "description": "Records per page; defaults to 30, maximum 100."
15164
+ },
15165
+ {
15166
+ "name": "page_token",
15167
+ "type": "string",
15168
+ "required": false,
15169
+ "description": "Cursor returned as next_page_token; omit for the first page."
15170
+ }
15171
+ ]
15172
+ },
15173
+ {
15174
+ "resource": "ticket.tickets",
15175
+ "method": "deleteLock",
15176
+ "summary": "Remove lock",
15177
+ "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.",
15178
+ "http": "DELETE",
15179
+ "path": "/ticket/v1/tickets/{number}/lock",
15180
+ "streaming": "no",
15181
+ "pagination": false,
15182
+ "pathParams": [
15183
+ {
15184
+ "name": "number",
15185
+ "sdkName": "number"
15186
+ }
15187
+ ],
15188
+ "query": [
15189
+ {
15190
+ "name": "repository",
15191
+ "type": "string",
15192
+ "required": false,
15193
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15194
+ }
15195
+ ]
15196
+ },
15197
+ {
15198
+ "resource": "ticket.tickets",
15199
+ "method": "updateLock",
15200
+ "summary": "Update lock",
15201
+ "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.",
15202
+ "http": "PUT",
15203
+ "path": "/ticket/v1/tickets/{number}/lock",
15204
+ "streaming": "no",
15205
+ "pagination": false,
15206
+ "pathParams": [
15207
+ {
15208
+ "name": "number",
15209
+ "sdkName": "number"
15210
+ }
15211
+ ],
15212
+ "query": [
15213
+ {
15214
+ "name": "repository",
15215
+ "type": "string",
15216
+ "required": false,
15217
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15218
+ }
15219
+ ],
15220
+ "body": {
15221
+ "required": false,
15222
+ "fields": [
15223
+ {
15224
+ "name": "lock_reason",
15225
+ "type": "string",
15226
+ "enum": [
15227
+ "off-topic",
15228
+ "too heated",
15229
+ "resolved",
15230
+ "spam"
15231
+ ],
15232
+ "required": false,
15233
+ "description": "Reason for locking: off-topic, too heated, resolved, or spam."
15234
+ }
15235
+ ]
15236
+ }
15237
+ },
15238
+ {
15239
+ "resource": "ticket.tickets.reactions",
15240
+ "method": "list",
15241
+ "summary": "List reactions",
15242
+ "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.",
15243
+ "http": "GET",
15244
+ "path": "/ticket/v1/tickets/{number}/reactions",
15245
+ "streaming": "no",
15246
+ "pagination": false,
15247
+ "pathParams": [
15248
+ {
15249
+ "name": "number",
15250
+ "sdkName": "number"
15251
+ }
15252
+ ],
15253
+ "query": [
15254
+ {
15255
+ "name": "repository",
15256
+ "type": "string",
15257
+ "required": false,
15258
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15259
+ },
15260
+ {
15261
+ "name": "page_size",
15262
+ "type": "integer",
15263
+ "required": false,
15264
+ "description": "Records per page; defaults to 30, maximum 100."
15265
+ },
15266
+ {
15267
+ "name": "page_token",
15268
+ "type": "string",
15269
+ "required": false,
15270
+ "description": "Cursor returned as next_page_token; omit for the first page."
15271
+ }
15272
+ ]
15273
+ },
15274
+ {
15275
+ "resource": "ticket.tickets.reactions",
15276
+ "method": "create",
15277
+ "summary": "Create or add reactions",
15278
+ "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.",
15279
+ "http": "POST",
15280
+ "path": "/ticket/v1/tickets/{number}/reactions",
15281
+ "streaming": "no",
15282
+ "pagination": false,
15283
+ "pathParams": [
15284
+ {
15285
+ "name": "number",
15286
+ "sdkName": "number"
15287
+ }
15288
+ ],
15289
+ "query": [
15290
+ {
15291
+ "name": "repository",
15292
+ "type": "string",
15293
+ "required": false,
15294
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15295
+ }
15296
+ ],
15297
+ "body": {
15298
+ "required": true,
15299
+ "fields": [
15300
+ {
15301
+ "name": "content",
15302
+ "type": "string",
15303
+ "enum": [
15304
+ "+1",
15305
+ "-1",
15306
+ "laugh",
15307
+ "confused",
15308
+ "heart",
15309
+ "hooray",
15310
+ "eyes",
15311
+ "rocket"
15312
+ ],
15313
+ "required": true,
15314
+ "description": "Reaction to add or remove: +1 approves, -1 disapproves, laugh, confused, heart, hooray, eyes, or rocket."
15315
+ }
15316
+ ]
15317
+ }
15318
+ },
15319
+ {
15320
+ "resource": "ticket.tickets.reactions",
15321
+ "method": "delete",
15322
+ "summary": "Remove reactions",
15323
+ "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.",
15324
+ "http": "DELETE",
15325
+ "path": "/ticket/v1/tickets/{number}/reactions/{content}",
15326
+ "streaming": "no",
15327
+ "pagination": false,
15328
+ "pathParams": [
15329
+ {
15330
+ "name": "number",
15331
+ "sdkName": "number"
15332
+ },
15333
+ {
15334
+ "name": "content",
15335
+ "sdkName": "content"
15336
+ }
15337
+ ],
15338
+ "query": [
15339
+ {
15340
+ "name": "repository",
15341
+ "type": "string",
15342
+ "required": false,
15343
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15344
+ }
15345
+ ]
15346
+ },
15347
+ {
15348
+ "resource": "ticket.tickets.relations",
15349
+ "method": "list",
15350
+ "summary": "List relations",
15351
+ "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.",
15352
+ "http": "GET",
15353
+ "path": "/ticket/v1/tickets/{number}/relations",
15354
+ "streaming": "no",
15355
+ "pagination": false,
15356
+ "pathParams": [
15357
+ {
15358
+ "name": "number",
15359
+ "sdkName": "number"
15360
+ }
15361
+ ],
15362
+ "query": [
15363
+ {
15364
+ "name": "repository",
15365
+ "type": "string",
15366
+ "required": false,
15367
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15368
+ },
15369
+ {
15370
+ "name": "page_size",
15371
+ "type": "integer",
15372
+ "required": false,
15373
+ "description": "Records per page; defaults to 30, maximum 100."
15374
+ },
15375
+ {
15376
+ "name": "page_token",
15377
+ "type": "string",
15378
+ "required": false,
15379
+ "description": "Cursor returned as next_page_token; omit for the first page."
15380
+ }
15381
+ ]
15382
+ },
15383
+ {
15384
+ "resource": "ticket.tickets.relations",
15385
+ "method": "create",
15386
+ "summary": "Create or add relations",
15387
+ "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.",
15388
+ "http": "POST",
15389
+ "path": "/ticket/v1/tickets/{number}/relations",
15390
+ "streaming": "no",
15391
+ "pagination": false,
15392
+ "pathParams": [
15393
+ {
15394
+ "name": "number",
15395
+ "sdkName": "number"
15396
+ }
15397
+ ],
15398
+ "query": [
15399
+ {
15400
+ "name": "repository",
15401
+ "type": "string",
15402
+ "required": false,
15403
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15404
+ }
15405
+ ],
15406
+ "body": {
15407
+ "required": true,
15408
+ "fields": [
15409
+ {
15410
+ "name": "relates_to",
15411
+ "type": "integer",
15412
+ "required": true,
15413
+ "description": "Repository-local number returned by create or list; distinct from the object's id."
15414
+ }
15415
+ ]
15416
+ }
15417
+ },
15418
+ {
15419
+ "resource": "ticket.tickets.relations",
15420
+ "method": "delete",
15421
+ "summary": "Remove relations",
15422
+ "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.",
15423
+ "http": "DELETE",
15424
+ "path": "/ticket/v1/tickets/{number}/relations/{n}",
15425
+ "streaming": "no",
15426
+ "pagination": false,
15427
+ "pathParams": [
15428
+ {
15429
+ "name": "number",
15430
+ "sdkName": "number"
15431
+ },
15432
+ {
15433
+ "name": "n",
15434
+ "sdkName": "n"
15435
+ }
15436
+ ],
15437
+ "query": [
15438
+ {
15439
+ "name": "repository",
15440
+ "type": "string",
15441
+ "required": false,
15442
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15443
+ }
15444
+ ]
15445
+ },
15446
+ {
15447
+ "resource": "ticket.tickets.subTickets",
15448
+ "method": "list",
15449
+ "summary": "List sub tickets",
15450
+ "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.",
15451
+ "http": "GET",
15452
+ "path": "/ticket/v1/tickets/{number}/sub_tickets",
15453
+ "streaming": "no",
15454
+ "pagination": false,
15455
+ "pathParams": [
15456
+ {
15457
+ "name": "number",
15458
+ "sdkName": "number"
15459
+ }
15460
+ ],
15461
+ "query": [
15462
+ {
15463
+ "name": "repository",
15464
+ "type": "string",
15465
+ "required": false,
15466
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15467
+ },
15468
+ {
15469
+ "name": "page_size",
15470
+ "type": "integer",
15471
+ "required": false,
15472
+ "description": "Records per page; defaults to 30, maximum 100."
15473
+ },
15474
+ {
15475
+ "name": "page_token",
15476
+ "type": "string",
15477
+ "required": false,
15478
+ "description": "Cursor returned as next_page_token; omit for the first page."
15479
+ }
15480
+ ]
15481
+ },
15482
+ {
15483
+ "resource": "ticket.tickets.subTickets",
15484
+ "method": "create",
15485
+ "summary": "Create or add sub tickets",
15486
+ "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.",
15487
+ "http": "POST",
15488
+ "path": "/ticket/v1/tickets/{number}/sub_tickets",
15489
+ "streaming": "no",
15490
+ "pagination": false,
15491
+ "pathParams": [
15492
+ {
15493
+ "name": "number",
15494
+ "sdkName": "number"
15495
+ }
15496
+ ],
15497
+ "query": [
15498
+ {
15499
+ "name": "repository",
15500
+ "type": "string",
15501
+ "required": false,
15502
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15503
+ }
15504
+ ],
15505
+ "body": {
15506
+ "required": true,
15507
+ "fields": [
15508
+ {
15509
+ "name": "child",
15510
+ "type": "integer",
15511
+ "required": true,
15512
+ "description": "Repository-local number returned by create or list; distinct from the object's id."
15513
+ },
15514
+ {
15515
+ "name": "replace_parent",
15516
+ "type": "boolean",
15517
+ "required": false,
15518
+ "description": "Allow replacing an existing parent."
15519
+ }
15520
+ ]
15521
+ }
15522
+ },
15523
+ {
15524
+ "resource": "ticket.tickets.subTickets",
15525
+ "method": "delete",
15526
+ "summary": "Remove sub tickets",
15527
+ "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.",
15528
+ "http": "DELETE",
15529
+ "path": "/ticket/v1/tickets/{number}/sub_tickets/{child}",
15530
+ "streaming": "no",
15531
+ "pagination": false,
15532
+ "pathParams": [
15533
+ {
15534
+ "name": "number",
15535
+ "sdkName": "number"
15536
+ },
15537
+ {
15538
+ "name": "child",
15539
+ "sdkName": "child"
15540
+ }
15541
+ ],
15542
+ "query": [
15543
+ {
15544
+ "name": "repository",
15545
+ "type": "string",
15546
+ "required": false,
15547
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15548
+ }
15549
+ ]
15550
+ },
15551
+ {
15552
+ "resource": "ticket.types",
15553
+ "method": "list",
15554
+ "summary": "Read types",
15555
+ "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.",
15556
+ "http": "GET",
15557
+ "path": "/ticket/v1/types",
15558
+ "streaming": "no",
15559
+ "pagination": false,
15560
+ "pathParams": [],
15561
+ "query": [
15562
+ {
15563
+ "name": "repository",
15564
+ "type": "string",
15565
+ "required": false,
15566
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15567
+ }
15568
+ ]
15569
+ },
13660
15570
  {
13661
15571
  "resource": "vault.authorizations",
13662
15572
  "method": "create",