@deepraxis/sdk 0.1.0-dev.ea77ce8 → 0.1.0-dev.ec3814e

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.
@@ -61,7 +61,7 @@ export const operations = [
61
61
  "resource": "agent.agents",
62
62
  "method": "create",
63
63
  "summary": "Create agent",
64
- "description": "Create a reusable agent definition, then pass its returned id to sessions.create to start a conversation. The definition includes model, system prompt, tools, MCP servers and an optional multiagent roster. It is saved as version 1; real updates create new versions. Unlike Anthropic Managed Agents, nonempty skills attachments and custom tool entries return 400; the native skill tool is separate from the skills field. Use tools: [{type: \"agent_toolset_20260401\"}] for built-in tools including codemode, skill and agent; inspect toolsets.list for names and schemas, and keep bash enabled for native additions. To offer only some tools, set default_config: {enabled: false} and list the tools to keep in configs, e.g. tools: [{type: \"agent_toolset_20260401\", default_config: {enabled: false}, configs: [{name: \"codemode\", enabled: true}, {name: \"bash\", enabled: true, permission_policy: {type: \"always_ask\"}}]}]; every tool not listed, including todo_write, enter_plan_mode, ask_user_question and goal_read, follows default_config, and the response echoes it. codemode runs through bash, so enabling codemode while bash is disabled returns 400. Optional mcp_toolset entries pair with mcp_servers. model accepts platform model IDs such as deepseek-flash, not only the Claude IDs in the protocol examples. model.settings.reasoning sets default thinking; other extra model controls return 400. Example: {\"name\":\"helper\",\"model\":{\"id\":\"deepseek-flash\"},\"tools\":[{\"type\":\"agent_toolset_20260401\"}]}.",
64
+ "description": "Create a reusable agent definition, then pass its returned id to sessions.create to start a conversation. The definition includes model, system prompt, tools, MCP servers and an optional multiagent roster. It is saved as version 1; real updates create new versions. Unlike Anthropic Managed Agents, nonempty skills attachments return 400; the native skill tool is separate from the skills field. Use tools: [{type: \"agent_toolset_20260401\"}] for built-in tools including codemode, skill and agent; inspect toolsets.list for names and schemas, and keep bash enabled for native additions. To offer only some tools, set default_config: {enabled: false} and list the tools to keep in configs, e.g. tools: [{type: \"agent_toolset_20260401\", default_config: {enabled: false}, configs: [{name: \"codemode\", enabled: true}, {name: \"bash\", enabled: true, permission_policy: {type: \"always_ask\"}}]}]; every tool not listed, including todo_write, enter_plan_mode, ask_user_question and goal_read, follows default_config, and the response echoes it. codemode runs through bash, so enabling codemode while bash is disabled returns 400. Optional mcp_toolset entries pair with mcp_servers. model accepts platform model IDs such as deepseek-flash, not only the Claude IDs in the protocol examples. model.settings.reasoning sets default thinking; other extra model controls return 400. Example: {\"name\":\"helper\",\"model\":{\"id\":\"deepseek-flash\"},\"tools\":[{\"type\":\"agent_toolset_20260401\"}]}.",
65
65
  "http": "POST",
66
66
  "path": "/agent/v1/agents",
67
67
  "streaming": "no",
@@ -94,7 +94,7 @@ export const operations = [
94
94
  "type": "array",
95
95
  "itemType": "object",
96
96
  "required": false,
97
- "description": "MCP servers this agent connects to. Maximum 20. Names must be unique\nwithin the array. Every server must be referenced by an `mcp_toolset` in\n`tools`; unreferenced servers are rejected. See the\n[MCP connector guide](https://platform.claude.com/docs/en/managed-agents/mcp-connector)."
97
+ "description": "Praxis extension: HTTP, SSE or trusted stdio MCP servers paired with mcp_toolset entries and saved with the agent version."
98
98
  },
99
99
  {
100
100
  "name": "metadata",
@@ -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- plus 24 letters or digits, as the File API returns it; read_only), media_library (any id without ':' or whitespace, read_only or read_write), model (a model catalog id, invoke), workflow and script (id <namespace>/<name>, invoke). A service binding opens a whole service and carries only enabled: search or browser. At most 20 bindings per type, no repeated type and id, and each service type at most once. A session is authorized by the agent version it runs: newly added bindings apply only to new sessions, and a version saved with apply=false changes no access until it is applied. Applying a version that disables, removes or downgrades a binding revokes it immediately in running sessions on older versions. A resource that is not bound returns 404, a service that is not opened returns 403, and a write to a resource bound read_only returns 403 BINDING_READ_ONLY. Unknown types, fields on the wrong kind (id, access or instructions on a service binding), wrong access and malformed ids return 400. The former databases, vector_stores and files fields are removed and return 400. Omit on create for no bindings."
137
+ },
131
138
  {
132
139
  "name": "kind",
133
140
  "type": "string",
@@ -175,6 +182,36 @@ export const operations = [
175
182
  "type": "object",
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."
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
+ },
205
+ {
206
+ "name": "preset",
207
+ "type": "string",
208
+ "enum": [
209
+ "minimal",
210
+ "data-editor",
211
+ "full"
212
+ ],
213
+ "required": false,
214
+ "description": "Optional tool preset. minimal enables read, glob, grep and ask_user_question; data-editor also enables write and edit; full uses the default toolset with always_allow. Explicit tools override matching preset entries. codemode requires bash and is absent from data-editor."
178
215
  }
179
216
  ]
180
217
  }
@@ -207,7 +244,7 @@ export const operations = [
207
244
  "resource": "agent.agents",
208
245
  "method": "update",
209
246
  "summary": "Update agent",
210
- "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 and custom tools 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.",
211
248
  "http": "POST",
212
249
  "path": "/agent/v1/agents/{agent_id}",
213
250
  "streaming": "no",
@@ -233,7 +270,7 @@ export const operations = [
233
270
  "type": "array",
234
271
  "itemType": "object",
235
272
  "required": false,
236
- "description": "MCP servers. Full replacement. Omit to preserve; send empty array or\n`null` to clear. Names must be unique. Maximum 20. Every server must be\nreferenced by an `mcp_toolset` in the agent's resulting `tools`; unreferenced\nservers are rejected. See the\n[MCP connector guide](https://platform.claude.com/docs/en/managed-agents/mcp-connector)."
273
+ "description": "Praxis extension: HTTP, SSE or trusted stdio MCP servers paired with mcp_toolset entries and saved with the agent version."
237
274
  },
238
275
  {
239
276
  "name": "metadata",
@@ -285,6 +322,25 @@ export const operations = [
285
322
  "required": false,
286
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."
287
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; once this version is applied, disabling, removing or downgrading a binding revokes it immediately in running sessions on older versions, while apply=false changes no access. Only service agents accept a nonempty list."
343
+ },
288
344
  {
289
345
  "name": "kind",
290
346
  "type": "string",
@@ -332,6 +388,36 @@ export const operations = [
332
388
  "type": "object",
333
389
  "required": false,
334
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."
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
+ },
411
+ {
412
+ "name": "preset",
413
+ "type": "string",
414
+ "enum": [
415
+ "minimal",
416
+ "data-editor",
417
+ "full"
418
+ ],
419
+ "required": false,
420
+ "description": "Optional tool preset. minimal enables read, glob, grep and ask_user_question; data-editor also enables write and edit; full uses the default toolset with always_allow. Explicit tools override matching preset entries. codemode requires bash and is absent from data-editor."
335
421
  }
336
422
  ]
337
423
  }
@@ -354,12 +440,12 @@ export const operations = [
354
440
  "query": []
355
441
  },
356
442
  {
357
- "resource": "agent.agents.versions",
358
- "method": "list",
359
- "summary": "List agent versions",
360
- "description": "List the saved versions of one agent, in pages of at most 100 (default 20). Each item is the full agent definition at that version, so you can compare what changed between versions. Use agents.retrieve with version to read a single one; agent_id comes from agents.list or agents.create.",
361
- "http": "GET",
362
- "path": "/agent/v1/agents/{agent_id}/versions",
443
+ "resource": "agent.agents.customers.auth.accessTokens",
444
+ "method": "create",
445
+ "summary": "Create customer access token",
446
+ "description": "Exchange a grant code, or the agent's publishable key for an anonymous visitor, for a customer access token that authorizes the agent's embedded sessions.\n\nNo Authorization header is required: the grant code or the publishable key is the credential. Agent Kit calls this from the browser, so send the page Origin. With grant_code, the code is consumed atomically: concurrent attempts have exactly one winner, and unknown, used, expired and other-agent codes all return the same 401 GRANT_CODE_INVALID. The sign-in starts now and lasts the code's max_session_seconds. Unlike Shopify, a visitor without an account gets a token too: send publishable_key instead and a new anonymous customer (anon_…) is created, bound to the request Origin, for 7 days. The access token lasts at most two hours and never outlives the sign-in; renew it with access_tokens/renew before expires_at. Both forms share the per-IP minute limit of anonymous issuance (default 20). Example body: {\"grant_code\":\"cgc_…\"}.",
447
+ "http": "POST",
448
+ "path": "/agent/v1/agents/{agent_id}/customers/auth/access_tokens",
363
449
  "streaming": "no",
364
450
  "pagination": false,
365
451
  "pathParams": [
@@ -368,130 +454,475 @@ export const operations = [
368
454
  "sdkName": "agent_id"
369
455
  }
370
456
  ],
371
- "query": [
372
- {
373
- "name": "limit",
374
- "type": "number",
375
- "required": false,
376
- "description": "Number of items per page."
377
- },
457
+ "query": [],
458
+ "body": {
459
+ "required": true,
460
+ "fields": []
461
+ }
462
+ },
463
+ {
464
+ "resource": "agent.agents.customers.auth.accessTokens",
465
+ "method": "deleteCurrent",
466
+ "summary": "Log out customer",
467
+ "description": "Log the customer out by revoking the sign-in of the presented access token and every token issued in it.\n\nSend the current customer access token as the Bearer credential, with no body, when the customer logs out of your site. Every token of the sign-in, including renewed ones, stops working, and their live event streams close; the customer's conversations are kept. Returns 204. Calling it again with the same token returns 401 ACCESS_TOKEN_REVOKED, so treat that as already logged out.",
468
+ "http": "DELETE",
469
+ "path": "/agent/v1/agents/{agent_id}/customers/auth/access_tokens/current",
470
+ "streaming": "no",
471
+ "pagination": false,
472
+ "pathParams": [
378
473
  {
379
- "name": "page",
380
- "type": "string",
381
- "required": false,
382
- "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."
474
+ "name": "agent_id",
475
+ "sdkName": "agent_id"
383
476
  }
384
- ]
477
+ ],
478
+ "query": []
385
479
  },
386
480
  {
387
- "resource": "agent.computers",
388
- "method": "list",
389
- "summary": "ComputersList",
390
- "description": "Tenant-owned durable computer resource.\n\nPraxis extension: MA only has session-scoped temporary containers and memory_stores, not durable browsable computers. Archived files remain readable, but new sessions cannot bind them. environment_id is an optional recipe reference; computers start with a light sandbox and expose the public SDK sandbox_id. Lists include archived computers.",
391
- "http": "GET",
392
- "path": "/agent/v1/computers",
481
+ "resource": "agent.agents.customers.auth.accessTokens.renew",
482
+ "method": "create",
483
+ "summary": "Renew customer access token",
484
+ "description": "Get a fresh customer access token in the same sign-in, authenticated with the current one.\n\nSend the current customer access token as the Bearer credential, with no body, a few minutes before expires_at. The new token keeps the version, budget, context, metadata and origin binding of the sign-in and lasts at most two hours, never past session_expires_at. Unlike Shopify, renewal does not revoke the presented token: it stays valid until its own expiry, so a reply that is streaming on it is not cut off. When less than 60 seconds of the sign-in remain, renewal returns 401 CUSTOMER_SESSION_EXPIRED; sign the customer in again with a new grant code from your backend. A token that was logged out or merged returns 401 ACCESS_TOKEN_REVOKED.",
485
+ "http": "POST",
486
+ "path": "/agent/v1/agents/{agent_id}/customers/auth/access_tokens/renew",
393
487
  "streaming": "no",
394
488
  "pagination": false,
395
- "pathParams": [],
396
- "query": [
397
- {
398
- "name": "limit",
399
- "type": "integer",
400
- "required": false,
401
- "description": "Maximum number of items to return in this page: a positive integer, at most 100 (default 20; for session resources default and maximum are 1000). A larger value returns 400."
402
- },
489
+ "pathParams": [
403
490
  {
404
- "name": "page",
405
- "type": "string",
406
- "required": false,
407
- "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."
491
+ "name": "agent_id",
492
+ "sdkName": "agent_id"
408
493
  }
409
- ]
494
+ ],
495
+ "query": []
410
496
  },
411
497
  {
412
- "resource": "agent.computers",
498
+ "resource": "agent.agents.customers.auth.grantCodes",
413
499
  "method": "create",
414
- "summary": "ComputersCreate",
415
- "description": "Tenant-owned durable computer resource.\n\nPraxis extension: MA only has session-scoped temporary containers and memory_stores, not durable browsable computers. Archived files remain readable, but new sessions cannot bind them. environment_id is an optional recipe reference; computers start with a light sandbox and expose the public SDK sandbox_id. Lists include archived computers.",
500
+ "summary": "Create customer grant code",
501
+ "description": "Sign your logged-in customer in to a service agent from your backend with a one-time grant code that Agent Kit exchanges for a customer access token.\n\nCall this from your backend with your API key after your own login succeeds, then pass the returned code to Agent Kit in the browser; never call it from the browser. Customer authorization follows Shopify Storefront customer access tokens (Multipass-style sign-in, a short-lived token, renewal and logout), so that experience applies. customer_id is your own identifier for the customer: use an opaque id such as your database user id, not an email address or phone number. The value auth is reserved, and ids starting with anon_ are reserved for anonymous customers. The code works once and expires after expires_in seconds (default 900). The sign-in it starts lasts max_session_seconds (default 7 days); version, budget_cents, system_message, agent_override and metadata apply to every token of the sign-in. Unlike Shopify, origin binds the whole sign-in to one page origin, and anonymous_access_token merges the conversations of the anonymous visitor who chatted before signing in into this customer. Example body: {\"customer_id\":\"cus_8f2a91\",\"origin\":\"https://shop.example.com\"}.",
416
502
  "http": "POST",
417
- "path": "/agent/v1/computers",
503
+ "path": "/agent/v1/agents/{agent_id}/customers/auth/grant_codes",
418
504
  "streaming": "no",
419
505
  "pagination": false,
420
- "pathParams": [],
506
+ "pathParams": [
507
+ {
508
+ "name": "agent_id",
509
+ "sdkName": "agent_id"
510
+ }
511
+ ],
421
512
  "query": [],
422
513
  "body": {
423
514
  "required": true,
424
515
  "fields": [
425
516
  {
426
- "name": "name",
517
+ "name": "customer_id",
427
518
  "type": "string",
428
519
  "required": true,
429
- "description": "Name of the entry or object."
520
+ "description": "Your stable, opaque identifier for the signed-in customer, such as your database user id. Do not use an email address or phone number. \"auth\" is reserved, and ids starting with anon_ are reserved for anonymous customers."
430
521
  },
431
522
  {
432
- "name": "environment_id",
523
+ "name": "version",
524
+ "type": "integer",
525
+ "required": false,
526
+ "description": "Existing agent version that every token of this sign-in pins. Defaults to the agent's active_version when the code is issued."
527
+ },
528
+ {
529
+ "name": "budget_cents",
530
+ "type": "integer",
531
+ "required": false,
532
+ "description": "Budget in cents for each session the customer starts. Defaults to the embed policy session budget and cannot exceed its maximum."
533
+ },
534
+ {
535
+ "name": "system_message",
536
+ "type": "array",
537
+ "itemType": "object",
538
+ "required": false,
539
+ "description": "Optional context the agent receives at the start of each session, as text blocks, limited to 8192 UTF-8 bytes in total."
540
+ },
541
+ {
542
+ "name": "agent_override",
543
+ "type": "object",
544
+ "required": false,
545
+ "description": "Optional system prompt override, accepted only when the embed policy allows agent overrides."
546
+ },
547
+ {
548
+ "name": "metadata",
549
+ "type": "object",
550
+ "required": false,
551
+ "description": "Up to 16 string pairs copied onto every session the customer starts. The playground key is reserved."
552
+ },
553
+ {
554
+ "name": "origin",
433
555
  "type": "string",
434
556
  "required": false,
435
- "description": "Environment recipe id; null or omitted when none was selected."
557
+ "description": "Page origin, such as https://shop.example.com, that must be one of the agent policy's allowed_origins (or localhost when the policy allows it). When set, every token of this sign-in works only from exactly this origin. Omit to accept any policy origin."
558
+ },
559
+ {
560
+ "name": "expires_in",
561
+ "type": "integer",
562
+ "required": false,
563
+ "description": "Seconds the code stays redeemable, from 60 to 86400. Defaults to 900."
564
+ },
565
+ {
566
+ "name": "max_session_seconds",
567
+ "type": "integer",
568
+ "required": false,
569
+ "description": "Total lifetime of the sign-in in seconds, from 3600 to 604800 (7 days). Tokens renew within it; after it the customer signs in again. Defaults to 604800."
570
+ },
571
+ {
572
+ "name": "anonymous_access_token",
573
+ "type": "string",
574
+ "required": false,
575
+ "description": "The current access token of the anonymous customer who used this agent before signing in. Their conversations become visible to the identified customer, and the anonymous sign-in ends at exchange."
436
576
  }
437
577
  ]
438
578
  }
439
579
  },
440
580
  {
441
- "resource": "agent.computers",
581
+ "resource": "agent.agents.endUsers",
582
+ "method": "list",
583
+ "summary": "List End Users",
584
+ "description": "List users who have sessions or token issuance history on a service agent.\n\nOrdered by last_active_at and external_user_id descending. q is a case-sensitive literal prefix, including underscores. limit is 1–100, default 20. Reuse next_page with the same organization, agent, q and limit. Preemptively blocked users without history do not appear. End-user credentials and inaccessible or personal agents return 404.",
585
+ "http": "GET",
586
+ "path": "/agent/v1/agents/{agent_id}/end_users",
587
+ "streaming": "no",
588
+ "pagination": false,
589
+ "pathParams": [
590
+ {
591
+ "name": "agent_id",
592
+ "sdkName": "agent_id"
593
+ }
594
+ ],
595
+ "query": [
596
+ {
597
+ "name": "limit",
598
+ "type": "integer",
599
+ "required": false,
600
+ "description": "Maximum users per page; defaults to 20."
601
+ },
602
+ {
603
+ "name": "page",
604
+ "type": "string",
605
+ "required": false,
606
+ "description": "next_page from the previous response with the same agent, q and limit."
607
+ },
608
+ {
609
+ "name": "q",
610
+ "type": "string",
611
+ "required": false,
612
+ "description": "Case-sensitive literal prefix of external_user_id; omit or use an empty string for all users."
613
+ }
614
+ ]
615
+ },
616
+ {
617
+ "resource": "agent.agents.endUsers",
442
618
  "method": "delete",
443
- "summary": "Delete Archived Computer",
444
- "description": "Permanently delete an archived explicit computer and its files and code runs.\n\nOwn-face superset: Managed Agents has no persistent Computer deletion lifecycle. Only archived computers can be deleted. Active computers return 400 COMPUTER_ACTIVE (archive first). Destroy storage before removing registration. Success returns id and type=computer_deleted; missing or foreign computers return 404.",
619
+ "summary": "Delete end-user data",
620
+ "description": "Delete a host application's end-user data from one service agent after explicit confirmation.\n\nDevelop only. Set confirm to the exact external_user_id; missing or mismatched confirmation returns 400. Returns 202 with a pending task id, not completion. Poll the deletion endpoint. Concurrent requests reuse the unfinished task; retry DELETE after failure to resume it. Tokens are revoked and the user is blocked before a seven-day recovery snapshot is verified. Sessions including child sessions, conversation data, grants and feedback are then removed. A pre-existing block remains; a temporary block is removed on success. Attachment metadata is recorded and File attachments are retained. No charge is introduced by this operation. Example: DELETE /agent/v1/agents/agent_example/end_users/customer_123?confirm=customer_123.",
445
621
  "http": "DELETE",
446
- "path": "/agent/v1/computers/{computer_id}",
622
+ "path": "/agent/v1/agents/{agent_id}/end_users/{external_user_id}",
447
623
  "streaming": "no",
448
624
  "pagination": false,
449
625
  "pathParams": [
450
626
  {
451
- "name": "computer_id",
452
- "sdkName": "computer_id"
627
+ "name": "agent_id",
628
+ "sdkName": "agent_id"
629
+ },
630
+ {
631
+ "name": "external_user_id",
632
+ "sdkName": "external_user_id"
453
633
  }
454
634
  ],
455
- "query": []
635
+ "query": [
636
+ {
637
+ "name": "confirm",
638
+ "type": "string",
639
+ "required": true,
640
+ "description": "Must exactly equal the external_user_id path parameter to confirm destructive deletion."
641
+ }
642
+ ]
456
643
  },
457
644
  {
458
- "resource": "agent.computers",
645
+ "resource": "agent.agents.endUsers",
459
646
  "method": "retrieve",
460
- "summary": "ComputersRetrieve",
461
- "description": "Tenant-owned durable computer resource.\n\nPraxis extension: MA only has session-scoped temporary containers and memory_stores, not durable browsable computers. Archived files remain readable, but new sessions cannot bind them. environment_id is an optional recipe reference; computers start with a light sandbox and expose the public SDK sandbox_id. Lists include archived computers.",
647
+ "summary": "Get End User",
648
+ "description": "Inspect one end user and their twenty most recently updated sessions.\n\nUse external_user_id from listing or your host application. Users without session or issuance history return 404, including preemptively blocked users. End-user credentials and inaccessible or personal agents return 404.",
462
649
  "http": "GET",
463
- "path": "/agent/v1/computers/{computer_id}",
650
+ "path": "/agent/v1/agents/{agent_id}/end_users/{external_user_id}",
464
651
  "streaming": "no",
465
652
  "pagination": false,
466
653
  "pathParams": [
467
654
  {
468
- "name": "computer_id",
469
- "sdkName": "computer_id"
655
+ "name": "agent_id",
656
+ "sdkName": "agent_id"
657
+ },
658
+ {
659
+ "name": "external_user_id",
660
+ "sdkName": "external_user_id"
470
661
  }
471
662
  ],
472
663
  "query": []
473
664
  },
474
665
  {
475
- "resource": "agent.computers",
476
- "method": "update",
477
- "summary": "ComputersUpdate",
478
- "description": "Tenant-owned durable computer resource.\n\nPraxis extension: MA only has session-scoped temporary containers and memory_stores, not durable browsable computers. Archived files remain readable, but new sessions cannot bind them. environment_id is an optional recipe reference; computers start with a light sandbox and expose the public SDK sandbox_id. Lists include archived computers.",
666
+ "resource": "agent.agents.endUsers.block",
667
+ "method": "create",
668
+ "summary": "Block End User",
669
+ "description": "Block token issuance and session creation, then revoke existing tokens for an end user.\n\nMay block a user before any history exists; timestamps are then null and counts and cost are zero. Requires an embed policy, otherwise returns 409 with setup guidance. Deduplicates the policy blocklist and retains its 1000-user maximum. If revocation returns 502, the user remains blocked; retry to finish revocation. Repeats keep the user blocked and revoke any remaining grants. End-user credentials and inaccessible or personal agents return 404.",
479
670
  "http": "POST",
480
- "path": "/agent/v1/computers/{computer_id}",
671
+ "path": "/agent/v1/agents/{agent_id}/end_users/{external_user_id}/block",
481
672
  "streaming": "no",
482
673
  "pagination": false,
483
674
  "pathParams": [
484
675
  {
485
- "name": "computer_id",
486
- "sdkName": "computer_id"
676
+ "name": "agent_id",
677
+ "sdkName": "agent_id"
678
+ },
679
+ {
680
+ "name": "external_user_id",
681
+ "sdkName": "external_user_id"
487
682
  }
488
683
  ],
489
- "query": [],
490
- "body": {
491
- "required": true,
492
- "fields": [
493
- {
494
- "name": "name",
684
+ "query": []
685
+ },
686
+ {
687
+ "resource": "agent.agents.endUsers",
688
+ "method": "retrieveDeletion",
689
+ "summary": "Get end-user deletion",
690
+ "description": "Poll the latest deletion task for an end user, including after the user data has been removed.\n\nUse the same agent_id and external_user_id as the confirmed DELETE. Status is pending, snapshotting, deleting, done or failed. Counts are empty until a verified snapshot exists. A failed task remains blocked and resumes when DELETE is retried with matching confirmation. snapshot_key is an operator recovery reference retained for seven days, not a public download URL. End-user credentials, inaccessible or personal agents, and missing tasks return 404. This read does not create a task or charge usage.",
691
+ "http": "GET",
692
+ "path": "/agent/v1/agents/{agent_id}/end_users/{external_user_id}/deletion",
693
+ "streaming": "no",
694
+ "pagination": false,
695
+ "pathParams": [
696
+ {
697
+ "name": "agent_id",
698
+ "sdkName": "agent_id"
699
+ },
700
+ {
701
+ "name": "external_user_id",
702
+ "sdkName": "external_user_id"
703
+ }
704
+ ],
705
+ "query": []
706
+ },
707
+ {
708
+ "resource": "agent.agents.endUsers.revokeTokens",
709
+ "method": "create",
710
+ "summary": "Revoke End User Tokens",
711
+ "description": "Revoke all issued tokens for an end user and terminate their open embed streams.\n\nRevokes credentials before marking grants revoked. Upstream failure returns 502 without changing grant revocation timestamps. Returns the count of newly revoked grants; a repeat without new grants returns zero. Does not block future issuance. End-user credentials and inaccessible or personal agents return 404.",
712
+ "http": "POST",
713
+ "path": "/agent/v1/agents/{agent_id}/end_users/{external_user_id}/revoke_tokens",
714
+ "streaming": "no",
715
+ "pagination": false,
716
+ "pathParams": [
717
+ {
718
+ "name": "agent_id",
719
+ "sdkName": "agent_id"
720
+ },
721
+ {
722
+ "name": "external_user_id",
723
+ "sdkName": "external_user_id"
724
+ }
725
+ ],
726
+ "query": []
727
+ },
728
+ {
729
+ "resource": "agent.agents.endUsers.unblock",
730
+ "method": "create",
731
+ "summary": "Unblock End User",
732
+ "description": "Allow an end user to receive new tokens and create new sessions again.\n\nRemoves the user from the blocklist; previously revoked tokens stay revoked. Idempotent. Requires an embed policy, otherwise returns 409 with setup guidance. Returns null timestamps and zero counts and cost when no session or issuance history exists. End-user credentials and inaccessible or personal agents return 404.",
733
+ "http": "POST",
734
+ "path": "/agent/v1/agents/{agent_id}/end_users/{external_user_id}/unblock",
735
+ "streaming": "no",
736
+ "pagination": false,
737
+ "pathParams": [
738
+ {
739
+ "name": "agent_id",
740
+ "sdkName": "agent_id"
741
+ },
742
+ {
743
+ "name": "external_user_id",
744
+ "sdkName": "external_user_id"
745
+ }
746
+ ],
747
+ "query": []
748
+ },
749
+ {
750
+ "resource": "agent.agents.unarchive",
751
+ "method": "create",
752
+ "summary": "Unarchive Agent",
753
+ "description": "Restore an archived agent without creating a configuration version. Already active agents are unchanged. Missing or inaccessible agents return 404. Use the returned agent id to create new sessions.",
754
+ "http": "POST",
755
+ "path": "/agent/v1/agents/{agent_id}/unarchive",
756
+ "streaming": "no",
757
+ "pagination": false,
758
+ "pathParams": [
759
+ {
760
+ "name": "agent_id",
761
+ "sdkName": "agent_id"
762
+ }
763
+ ],
764
+ "query": []
765
+ },
766
+ {
767
+ "resource": "agent.agents.versions",
768
+ "method": "list",
769
+ "summary": "List agent versions",
770
+ "description": "List the saved versions of one agent, in pages of at most 100 (default 20). Each item is the full agent definition at that version, so you can compare what changed between versions. Use agents.retrieve with version to read a single one; agent_id comes from agents.list or agents.create.",
771
+ "http": "GET",
772
+ "path": "/agent/v1/agents/{agent_id}/versions",
773
+ "streaming": "no",
774
+ "pagination": false,
775
+ "pathParams": [
776
+ {
777
+ "name": "agent_id",
778
+ "sdkName": "agent_id"
779
+ }
780
+ ],
781
+ "query": [
782
+ {
783
+ "name": "limit",
784
+ "type": "number",
785
+ "required": false,
786
+ "description": "Number of items per page."
787
+ },
788
+ {
789
+ "name": "page",
790
+ "type": "string",
791
+ "required": false,
792
+ "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."
793
+ }
794
+ ]
795
+ },
796
+ {
797
+ "resource": "agent.agents.versions",
798
+ "method": "apply",
799
+ "summary": "Apply Agent Version",
800
+ "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.",
801
+ "http": "POST",
802
+ "path": "/agent/v1/agents/{agent_id}/versions/{version}/apply",
803
+ "streaming": "no",
804
+ "pagination": false,
805
+ "pathParams": [
806
+ {
807
+ "name": "agent_id",
808
+ "sdkName": "agent_id"
809
+ },
810
+ {
811
+ "name": "version",
812
+ "sdkName": "version"
813
+ }
814
+ ],
815
+ "query": []
816
+ },
817
+ {
818
+ "resource": "agent.computers",
819
+ "method": "list",
820
+ "summary": "ComputersList",
821
+ "description": "Tenant-owned durable computer resource.\n\nPraxis extension: MA only has session-scoped temporary containers and memory_stores, not durable browsable computers. Archived files remain readable, but new sessions cannot bind them. environment_id is an optional recipe reference; computers start with a light sandbox and expose the public SDK sandbox_id. Lists include archived computers.",
822
+ "http": "GET",
823
+ "path": "/agent/v1/computers",
824
+ "streaming": "no",
825
+ "pagination": false,
826
+ "pathParams": [],
827
+ "query": [
828
+ {
829
+ "name": "limit",
830
+ "type": "integer",
831
+ "required": false,
832
+ "description": "Maximum number of items to return in this page: a positive integer, at most 100 (default 20; for session resources default and maximum are 1000). A larger value returns 400."
833
+ },
834
+ {
835
+ "name": "page",
836
+ "type": "string",
837
+ "required": false,
838
+ "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."
839
+ }
840
+ ]
841
+ },
842
+ {
843
+ "resource": "agent.computers",
844
+ "method": "create",
845
+ "summary": "ComputersCreate",
846
+ "description": "Tenant-owned durable computer resource.\n\nPraxis extension: MA only has session-scoped temporary containers and memory_stores, not durable browsable computers. Archived files remain readable, but new sessions cannot bind them. environment_id is an optional recipe reference; computers start with a light sandbox and expose the public SDK sandbox_id. Lists include archived computers.",
847
+ "http": "POST",
848
+ "path": "/agent/v1/computers",
849
+ "streaming": "no",
850
+ "pagination": false,
851
+ "pathParams": [],
852
+ "query": [],
853
+ "body": {
854
+ "required": true,
855
+ "fields": [
856
+ {
857
+ "name": "name",
858
+ "type": "string",
859
+ "required": true,
860
+ "description": "Name of the entry or object."
861
+ },
862
+ {
863
+ "name": "environment_id",
864
+ "type": "string",
865
+ "required": false,
866
+ "description": "Environment recipe id; null or omitted when none was selected."
867
+ }
868
+ ]
869
+ }
870
+ },
871
+ {
872
+ "resource": "agent.computers",
873
+ "method": "delete",
874
+ "summary": "Delete Archived Computer",
875
+ "description": "Permanently delete an archived explicit computer and its files and code runs.\n\nOwn-face superset: Managed Agents has no persistent Computer deletion lifecycle. Only archived computers can be deleted. Active computers return 400 COMPUTER_ACTIVE (archive first). Destroy storage before removing registration. Success returns id and type=computer_deleted; missing or foreign computers return 404.",
876
+ "http": "DELETE",
877
+ "path": "/agent/v1/computers/{computer_id}",
878
+ "streaming": "no",
879
+ "pagination": false,
880
+ "pathParams": [
881
+ {
882
+ "name": "computer_id",
883
+ "sdkName": "computer_id"
884
+ }
885
+ ],
886
+ "query": []
887
+ },
888
+ {
889
+ "resource": "agent.computers",
890
+ "method": "retrieve",
891
+ "summary": "ComputersRetrieve",
892
+ "description": "Tenant-owned durable computer resource.\n\nPraxis extension: MA only has session-scoped temporary containers and memory_stores, not durable browsable computers. Archived files remain readable, but new sessions cannot bind them. environment_id is an optional recipe reference; computers start with a light sandbox and expose the public SDK sandbox_id. Lists include archived computers.",
893
+ "http": "GET",
894
+ "path": "/agent/v1/computers/{computer_id}",
895
+ "streaming": "no",
896
+ "pagination": false,
897
+ "pathParams": [
898
+ {
899
+ "name": "computer_id",
900
+ "sdkName": "computer_id"
901
+ }
902
+ ],
903
+ "query": []
904
+ },
905
+ {
906
+ "resource": "agent.computers",
907
+ "method": "update",
908
+ "summary": "ComputersUpdate",
909
+ "description": "Tenant-owned durable computer resource.\n\nPraxis extension: MA only has session-scoped temporary containers and memory_stores, not durable browsable computers. Archived files remain readable, but new sessions cannot bind them. environment_id is an optional recipe reference; computers start with a light sandbox and expose the public SDK sandbox_id. Lists include archived computers.",
910
+ "http": "POST",
911
+ "path": "/agent/v1/computers/{computer_id}",
912
+ "streaming": "no",
913
+ "pagination": false,
914
+ "pathParams": [
915
+ {
916
+ "name": "computer_id",
917
+ "sdkName": "computer_id"
918
+ }
919
+ ],
920
+ "query": [],
921
+ "body": {
922
+ "required": true,
923
+ "fields": [
924
+ {
925
+ "name": "name",
495
926
  "type": "string",
496
927
  "required": true,
497
928
  "description": "Name of the entry or object."
@@ -548,7 +979,7 @@ export const operations = [
548
979
  "resource": "agent.computers",
549
980
  "method": "connect",
550
981
  "summary": "Connect computer",
551
- "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. Archived computers remain accessible; foreign or absent computers return 404. Never cache credentials.",
982
+ "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.",
552
983
  "http": "POST",
553
984
  "path": "/agent/v1/computers/{computer_id}/connect",
554
985
  "streaming": "no",
@@ -559,7 +990,22 @@ export const operations = [
559
990
  "sdkName": "computer_id"
560
991
  }
561
992
  ],
562
- "query": []
993
+ "query": [],
994
+ "body": {
995
+ "required": false,
996
+ "fields": [
997
+ {
998
+ "name": "need",
999
+ "type": "string",
1000
+ "enum": [
1001
+ "light",
1002
+ "heavy"
1003
+ ],
1004
+ "required": false,
1005
+ "description": "Defaults to light. light uses the lightweight shell, or the heavy instance while it is running. heavy requests a full Linux computer for interactive programs; heavy running time counts toward the daily budget in seconds."
1006
+ }
1007
+ ]
1008
+ }
563
1009
  },
564
1010
  {
565
1011
  "resource": "agent.computers.files",
@@ -610,31 +1056,73 @@ export const operations = [
610
1056
  ]
611
1057
  },
612
1058
  {
613
- "resource": "agent.deploymentRuns",
614
- "method": "list",
615
- "summary": "List deployment runs",
616
- "description": "List deployment runs newest first. Filter by deployment_id, has_error, trigger_type (manual or schedule) and created_at[gt|gte|lt|lte]. The default limit is 20, maximum 100; pass next_page as page with the same filters to continue. Each record identifies the resolved agent version and either its session or creation error.",
617
- "http": "GET",
618
- "path": "/agent/v1/deployment_runs",
1059
+ "resource": "agent.computers.leases",
1060
+ "method": "delete",
1061
+ "summary": "Release computer lease",
1062
+ "description": "Give the lease back when a connection closes so the full machine can be reclaimed without waiting for it to expire.\n\nOwn-face extension. Idempotent: an unknown or already released lease succeeds as well. Foreign or absent computers return 404.",
1063
+ "http": "DELETE",
1064
+ "path": "/agent/v1/computers/{computer_id}/leases/{lease_id}",
619
1065
  "streaming": "no",
620
1066
  "pagination": false,
621
- "pathParams": [],
622
- "query": [
623
- {
624
- "name": "created_at[gt]",
625
- "type": "string",
626
- "required": false,
627
- "description": "Return runs created strictly after this time (exclusive)."
628
- },
1067
+ "pathParams": [
629
1068
  {
630
- "name": "created_at[gte]",
631
- "type": "string",
632
- "required": false,
633
- "description": "Return runs created at or after this time (inclusive)."
1069
+ "name": "computer_id",
1070
+ "sdkName": "computer_id"
634
1071
  },
635
1072
  {
636
- "name": "created_at[lt]",
637
- "type": "string",
1073
+ "name": "lease_id",
1074
+ "sdkName": "lease_id"
1075
+ }
1076
+ ],
1077
+ "query": []
1078
+ },
1079
+ {
1080
+ "resource": "agent.computers.leases.renew",
1081
+ "method": "create",
1082
+ "summary": "Renew computer lease",
1083
+ "description": "Extend the lease a connection holds so the full machine stays in service while the connection is open.\n\nOwn-face extension. A lease that is no longer valid (released, expired, or the computer moved to another machine) returns 409 LEASE_STALE; call connect again for a new connection and lease. Foreign or absent computers return 404.",
1084
+ "http": "POST",
1085
+ "path": "/agent/v1/computers/{computer_id}/leases/{lease_id}/renew",
1086
+ "streaming": "no",
1087
+ "pagination": false,
1088
+ "pathParams": [
1089
+ {
1090
+ "name": "computer_id",
1091
+ "sdkName": "computer_id"
1092
+ },
1093
+ {
1094
+ "name": "lease_id",
1095
+ "sdkName": "lease_id"
1096
+ }
1097
+ ],
1098
+ "query": []
1099
+ },
1100
+ {
1101
+ "resource": "agent.deploymentRuns",
1102
+ "method": "list",
1103
+ "summary": "List deployment runs",
1104
+ "description": "List deployment runs newest first. Filter by deployment_id, has_error, trigger_type (manual or schedule) and created_at[gt|gte|lt|lte]. The default limit is 20, maximum 100; pass next_page as page with the same filters to continue. Each record identifies the resolved agent version and either its session or creation error.",
1105
+ "http": "GET",
1106
+ "path": "/agent/v1/deployment_runs",
1107
+ "streaming": "no",
1108
+ "pagination": false,
1109
+ "pathParams": [],
1110
+ "query": [
1111
+ {
1112
+ "name": "created_at[gt]",
1113
+ "type": "string",
1114
+ "required": false,
1115
+ "description": "Return runs created strictly after this time (exclusive)."
1116
+ },
1117
+ {
1118
+ "name": "created_at[gte]",
1119
+ "type": "string",
1120
+ "required": false,
1121
+ "description": "Return runs created at or after this time (inclusive)."
1122
+ },
1123
+ {
1124
+ "name": "created_at[lt]",
1125
+ "type": "string",
638
1126
  "required": false,
639
1127
  "description": "Return runs created strictly before this time (exclusive)."
640
1128
  },
@@ -1026,6 +1514,41 @@ export const operations = [
1026
1514
  ],
1027
1515
  "query": []
1028
1516
  },
1517
+ {
1518
+ "resource": "agent.embed",
1519
+ "method": "retrieveAppearance",
1520
+ "summary": "Read chat appearance",
1521
+ "description": "Load saved appearance for an iframe or Hosted chat page. Supply an end-user embed token as Bearer authorization, or a console-issued publishable key in Praxis-Publishable-Key before anonymous token issuance. The credential selects the agent; identity_number and agent_id query parameters are rejected with 400. Missing appearance returns an empty object. Kit option names retain camelCase. Responses are private and cacheable for 60 seconds. Component hosts configure Kit in their own code instead.",
1522
+ "http": "GET",
1523
+ "path": "/agent/v1/embed/appearance",
1524
+ "streaming": "no",
1525
+ "pagination": false,
1526
+ "pathParams": [],
1527
+ "query": []
1528
+ },
1529
+ {
1530
+ "resource": "agent.embed.exchange",
1531
+ "method": "create",
1532
+ "summary": "Exchange Hosted Code",
1533
+ "description": "Redeem a single-use hosted link credential for an end-user token.\n\nRead code from the c fragment parameter of hosted_url returned by embed token creation with hosted true, then remove the fragment before exchanging. No Authorization header is required; the code authenticates this request. The code expires after 60 seconds and is consumed atomically on exchange, so concurrent attempts have only one winner. Expired, used and unknown codes return the same 404 body. Keep the token in memory and return to the host website for a fresh link when it expires; exchange cannot refresh it. Requests are IP limited per minute using the anonymous entrypoint budget (default 20). Example body is {\"code\":\"<code from hosted_url>\"}.",
1534
+ "http": "POST",
1535
+ "path": "/agent/v1/embed/exchange",
1536
+ "streaming": "no",
1537
+ "pagination": false,
1538
+ "pathParams": [],
1539
+ "query": [],
1540
+ "body": {
1541
+ "required": true,
1542
+ "fields": [
1543
+ {
1544
+ "name": "code",
1545
+ "type": "string",
1546
+ "required": true,
1547
+ "description": "Single-use credential from the c fragment parameter of hosted_url returned by embed token creation. Valid for 60 seconds."
1548
+ }
1549
+ ]
1550
+ }
1551
+ },
1029
1552
  {
1030
1553
  "resource": "agent.embedTokens",
1031
1554
  "method": "list",
@@ -1067,7 +1590,7 @@ export const operations = [
1067
1590
  "resource": "agent.embedTokens",
1068
1591
  "method": "create",
1069
1592
  "summary": "Create Embed Token",
1070
- "description": "Issue a short-lived credential on your backend for an end user of a service agent.\n\nRequires an active service agent in your organization with an embed policy. Pins the requested version or the latest version and snapshots the policy environment, vaults and resources; metadata comes from the request. Blocked users cannot receive tokens. Keep your API key on the backend and pass only the returned token to the frontend. Every call creates a new grant; issuance is not idempotent. The hosted field is not supported.",
1593
+ "description": "Issue a short-lived credential on your backend for an end user of a service agent.\n\nRequires an active service agent in your organization with an embed policy. Pins the requested version or the latest version and snapshots the policy environment, vaults and resources; metadata comes from the request. Blocked users cannot receive tokens. Keep your API key on the backend and pass only the returned token to the frontend. Every call creates a new grant; issuance is not idempotent. Set hosted to true to also receive hosted_url; redirect the user there within 60 seconds. The agent must have an identity_number. The URL fragment contains a single-use exchange credential, not the token. Omit hosted or set false for ordinary token issuance.",
1071
1594
  "http": "POST",
1072
1595
  "path": "/agent/v1/embed_tokens",
1073
1596
  "streaming": "no",
@@ -1077,6 +1600,12 @@ export const operations = [
1077
1600
  "body": {
1078
1601
  "required": true,
1079
1602
  "fields": [
1603
+ {
1604
+ "name": "hosted",
1605
+ "type": "boolean",
1606
+ "required": false,
1607
+ "description": "Set true to also return a hosted chat URL with a single-use credential valid for 60 seconds. Defaults to false; the agent must have an identity_number."
1608
+ },
1080
1609
  {
1081
1610
  "name": "agent",
1082
1611
  "type": "string",
@@ -1136,6 +1665,35 @@ export const operations = [
1136
1665
  ]
1137
1666
  }
1138
1667
  },
1668
+ {
1669
+ "resource": "agent.embedTokens.anonymous",
1670
+ "method": "create",
1671
+ "summary": "Issue anonymous visitor token",
1672
+ "description": "Obtain a short-lived embedding token for a visitor without an account using the agent owner's publishable key.\n\nNo Authorization header is required. Send the browser Origin allowed by the agent policy. Save a returned visitor_secret and reuse it for refreshes; only new visitors receive one. Unknown secrets create new visitors, and extra fields including visitor_id return 400. Issuance uses the key creator's organization membership, the key session budget and the smaller of the policy TTL maximum and 3600 seconds. IP requests are limited per minute (default 20); UTC daily session and spending caps are checked across the key's primary sessions created that day. Token issuance itself does not create a session or charge usage; subsequent sessions bill the host organization. Example body: {\"publishable_key\":\"pk_praxis_example\"}.",
1673
+ "http": "POST",
1674
+ "path": "/agent/v1/embed_tokens/anonymous",
1675
+ "streaming": "no",
1676
+ "pagination": false,
1677
+ "pathParams": [],
1678
+ "query": [],
1679
+ "body": {
1680
+ "required": true,
1681
+ "fields": [
1682
+ {
1683
+ "name": "publishable_key",
1684
+ "type": "string",
1685
+ "required": true,
1686
+ "description": "Public key created by the service agent owner; safe to include in browser code."
1687
+ },
1688
+ {
1689
+ "name": "visitor_secret",
1690
+ "type": "string",
1691
+ "required": false,
1692
+ "description": "Secret returned by a previous anonymous issuance for this key. Omit for a new visitor; an unknown secret creates a new visitor."
1693
+ }
1694
+ ]
1695
+ }
1696
+ },
1139
1697
  {
1140
1698
  "resource": "agent.embedTokens.revoke",
1141
1699
  "method": "create",
@@ -1432,6 +1990,25 @@ export const operations = [
1432
1990
  "type": "string",
1433
1991
  "required": false,
1434
1992
  "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."
1993
+ },
1994
+ {
1995
+ "name": "external_user_id",
1996
+ "type": "string",
1997
+ "required": false,
1998
+ "description": "Filter by an exact end-user identifier (1–128 characters: A-Z, a-z, 0-9, underscore, dot, colon, at sign or hyphen). Keep this filter unchanged when following page."
1999
+ },
2000
+ {
2001
+ "name": "source",
2002
+ "type": "string",
2003
+ "enum": [
2004
+ "kit",
2005
+ "iframe",
2006
+ "hosted",
2007
+ "api",
2008
+ "automation"
2009
+ ],
2010
+ "required": false,
2011
+ "description": "Filter by session origin: kit, iframe, hosted, api or automation. Keep this filter unchanged when following page."
1435
2012
  }
1436
2013
  ]
1437
2014
  },
@@ -1439,7 +2016,7 @@ export const operations = [
1439
2016
  "resource": "agent.sessions",
1440
2017
  "method": "create",
1441
2018
  "summary": "Create session",
1442
- "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|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.",
2019
+ "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.",
1443
2020
  "http": "POST",
1444
2021
  "path": "/agent/v1/sessions",
1445
2022
  "streaming": "no",
@@ -1459,7 +2036,7 @@ export const operations = [
1459
2036
  "name": "environment_id",
1460
2037
  "type": "string",
1461
2038
  "required": false,
1462
- "description": "ID of the `environment` defining the container configuration for\nthis session."
2039
+ "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."
1463
2040
  },
1464
2041
  {
1465
2042
  "name": "budget",
@@ -1533,6 +2110,23 @@ export const operations = [
1533
2110
  ]
1534
2111
  }
1535
2112
  },
2113
+ {
2114
+ "resource": "agent.sessions",
2115
+ "method": "delete",
2116
+ "summary": "Delete session",
2117
+ "description": "Delete an idle or terminated session and its event history after saving a deletion snapshot. Supply the session id from creation or listing. Running sessions return 409 INVALID_STATE: interrupt first or wait until idle or terminated. Afterwards retrieval and event listing return 404 and lists omit the session. Example: DELETE /agent/v1/sessions/sesn_example.",
2118
+ "http": "DELETE",
2119
+ "path": "/agent/v1/sessions/{session_id}",
2120
+ "streaming": "no",
2121
+ "pagination": false,
2122
+ "pathParams": [
2123
+ {
2124
+ "name": "session_id",
2125
+ "sdkName": "session_id"
2126
+ }
2127
+ ],
2128
+ "query": []
2129
+ },
1536
2130
  {
1537
2131
  "resource": "agent.sessions",
1538
2132
  "method": "retrieve",
@@ -1791,7 +2385,7 @@ export const operations = [
1791
2385
  "resource": "agent.sessions.events",
1792
2386
  "method": "list",
1793
2387
  "summary": "List session events",
1794
- "description": "Read the event history of a session as a page of events, oldest first by default (order=desc for newest first). Use it after sending a message to collect the reply, to find tool calls that wait for approval (session.status_idle with stop_reason requires_action lists their event_ids), or to audit a run; to follow a running session live use sessions.events.stream instead. Filter by types and by a created_at range on processed_at; pages hold at most 100 events (default 20) and next_page continues. A failed run emits session.error before session.status_terminated. Native history also includes user.steer, user.withdraw, system.notification, session.forked, session.goal_changed and session.goal_verification; these are not accepted by the /anthropic/v1 event-type filter.",
2388
+ "description": "Read the event history of a session as a page of events, oldest first by default (order=desc for newest first). Use it after sending a message to collect the reply, to find tool calls that wait for approval or client custom tool results (session.status_idle with stop_reason requires_action lists their event_ids), or to audit a run; to follow a running session live use sessions.events.stream instead. Filter by types and by a created_at range on processed_at; pages hold at most 100 events (default 20) and next_page continues. A failed run emits session.error before session.status_terminated. Native history also includes user.steer, user.withdraw, system.notification, session.forked, session.goal_changed and session.goal_verification; these are not accepted by the /anthropic/v1 event-type filter.",
1795
2389
  "http": "GET",
1796
2390
  "path": "/agent/v1/sessions/{session_id}/events",
1797
2391
  "streaming": "no",
@@ -1862,7 +2456,7 @@ export const operations = [
1862
2456
  "resource": "agent.sessions.events",
1863
2457
  "method": "send",
1864
2458
  "summary": "Send session events",
1865
- "description": "Send events to a session: user.message (exactly one nonempty text block), user.interrupt, user.tool_confirmation to allow or deny a pending tool call, user.steer to inject a queued user.message into a turn that is still running, and user.withdraw to retract a queued message. The response only acknowledges the inputs; read replies with sessions.events.list or sessions.events.stream. A message sent while the session waits for tool approval is queued (processed_at null) and runs in order after the approval is resolved. Archived sessions reject new messages. To approve, read a pending agent.tool_use or agent.mcp_tool_use event and send {type: \"user.tool_confirmation\", tool_use_id: <that event id>, result: \"allow\"} (or deny); include session_thread_id for a child approval. Native confirmations also accept updated_permissions, answers and annotations, which /anthropic/v1 rejects.",
2459
+ "description": "Attach optional praxis_context={items:[{name,value}]} to user.message for untrusted page context on this turn only (maximum 32 items, 4096 UTF-8 JSON bytes). /anthropic/v1 rejects this field. Send events to a session: user.message (exactly one nonempty text block), user.interrupt, user.tool_confirmation to allow or deny a pending tool call, user.custom_tool_result to return a custom tool result, user.steer to inject a queued user.message into a turn that is still running, and user.withdraw to retract a queued message. The response only acknowledges the inputs; read replies with sessions.events.list or sessions.events.stream. A message sent while the session waits for tool approval is queued (processed_at null) and runs in order after the approval is resolved. Archived sessions reject new messages. To approve, read a pending agent.tool_use or agent.mcp_tool_use event and send {type: \"user.tool_confirmation\", tool_use_id: <that event id>, result: \"allow\"} (or deny); include session_thread_id for a child approval. Native confirmations also accept updated_permissions, answers and annotations, which /anthropic/v1 rejects. Both faces accept user.custom_tool_result with custom_tool_use_id from agent.custom_tool_use.id or the requires_action stop_reason.event_ids. Unlike Anthropic, result content accepts only text blocks (omit it for an empty array). Omitted or null is_error means false. The server routes child calls by id; session_thread_id is rejected in this input. Unknown call ids return 400; duplicate results or calls no longer waiting return 409.",
1866
2460
  "http": "POST",
1867
2461
  "path": "/agent/v1/sessions/{session_id}/events",
1868
2462
  "streaming": "no",
@@ -2309,214 +2903,145 @@ export const operations = [
2309
2903
  ]
2310
2904
  },
2311
2905
  {
2312
- "resource": "agent.toolsets",
2906
+ "resource": "agent.skills",
2313
2907
  "method": "list",
2314
- "summary": "List Toolsets",
2315
- "description": "Discover tool names, input schemas, read-only status and default permission policies before configuring an agent. The catalog is read-only: enable tools through agents.create or agents.update. agent_toolset_20260401 includes bash, edit, glob, grep, read, write, web_search, web_fetch, task_output, task_stop, monitor, agent, send_message, codemode and skill, plus todo_write, enter_plan_mode, ask_user_question and goal_read, which are listed so they can be switched off. Native additions require bash enabled; codemode requires bash (enabling it with bash disabled returns 400; keep bash enabled with permission_policy always_ask to restrict it); send_message also requires agent. To keep only some tools, set default_config.enabled to false and enable the wanted tools in configs; unlisted tools follow default_config. The catalog includes plugin names and versions. Sessions created through /anthropic/v1 expose only the eight official tools.",
2316
- "http": "GET",
2317
- "path": "/agent/v1/toolsets",
2318
- "streaming": "no",
2319
- "pagination": false,
2320
- "pathParams": [],
2321
- "query": []
2322
- },
2323
- {
2324
- "resource": "application.assets.upload",
2325
- "method": "create",
2326
- "summary": "Upload assets",
2327
- "description": "Upload one batch: files maps hash to base64 content. The last batch returns the completion token.",
2328
- "http": "POST",
2329
- "path": "/application/v1/assets/upload",
2330
- "streaming": "no",
2331
- "pagination": false,
2332
- "pathParams": [],
2333
- "query": [],
2334
- "body": {
2335
- "required": true,
2336
- "fields": [
2337
- {
2338
- "name": "jwt",
2339
- "type": "string",
2340
- "required": true,
2341
- "description": "Upload token from the session."
2342
- },
2343
- {
2344
- "name": "files",
2345
- "type": "object",
2346
- "required": true,
2347
- "description": "Hash → base64 file content."
2348
- }
2349
- ]
2350
- }
2351
- },
2352
- {
2353
- "resource": "application.subdomain",
2354
- "method": "retrieve",
2355
- "summary": "Get account subdomain",
2356
- "description": "Return the account subdomain used in every Worker URL. A default is created on first use.",
2908
+ "summary": "List skills",
2909
+ "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.",
2357
2910
  "http": "GET",
2358
- "path": "/application/v1/subdomain",
2359
- "streaming": "no",
2360
- "pagination": false,
2361
- "pathParams": [],
2362
- "query": []
2363
- },
2364
- {
2365
- "resource": "application.subdomain",
2366
- "method": "update",
2367
- "summary": "Change account subdomain",
2368
- "description": "Change the account subdomain. Every Worker moves to the new address at once; old addresses stop resolving.",
2369
- "http": "PUT",
2370
- "path": "/application/v1/subdomain",
2911
+ "path": "/agent/v1/skills",
2371
2912
  "streaming": "no",
2372
2913
  "pagination": false,
2373
2914
  "pathParams": [],
2374
- "query": [],
2375
- "body": {
2376
- "required": true,
2377
- "fields": [
2378
- {
2379
- "name": "subdomain",
2380
- "type": "string",
2381
- "required": true,
2382
- "description": "Account subdomain, 8–32 lowercase letters and digits; part of every Worker URL."
2383
- }
2384
- ]
2385
- }
2386
- },
2387
- {
2388
- "resource": "application.workers",
2389
- "method": "list",
2390
- "summary": "List Workers",
2391
- "description": "List Workers in your account. Filter by status or by label with label.<key>=<value>.",
2392
- "http": "GET",
2393
- "path": "/application/v1/workers",
2394
- "streaming": "no",
2395
- "pagination": true,
2396
- "pathParams": [],
2397
2915
  "query": [
2398
2916
  {
2399
- "name": "cursor",
2917
+ "name": "source",
2400
2918
  "type": "string",
2401
2919
  "required": false,
2402
- "description": "next_cursor from the previous page."
2920
+ "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"
2403
2921
  },
2404
2922
  {
2405
2923
  "name": "limit",
2406
- "type": "integer",
2924
+ "type": "number",
2407
2925
  "required": false,
2408
- "description": "Items per page."
2926
+ "description": "Number of items per page."
2409
2927
  },
2410
2928
  {
2411
- "name": "status",
2929
+ "name": "page",
2412
2930
  "type": "string",
2413
2931
  "required": false,
2414
- "description": "Worker status: draft (no deployment yet), active (serving), suspended (stopped by an administrator), deleted (soft-deleted, restorable for 7 days), purging (resources being removed), purged (gone)."
2932
+ "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."
2415
2933
  }
2416
2934
  ]
2417
2935
  },
2418
2936
  {
2419
- "resource": "application.workers",
2937
+ "resource": "agent.skills",
2420
2938
  "method": "create",
2421
- "summary": "Create Worker",
2422
- "description": "Create a Worker. It serves nothing until a version is deployed.",
2939
+ "summary": "Create skill",
2940
+ "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.",
2423
2941
  "http": "POST",
2424
- "path": "/application/v1/workers",
2942
+ "path": "/agent/v1/skills",
2425
2943
  "streaming": "no",
2426
2944
  "pagination": false,
2945
+ "multipart": true,
2427
2946
  "pathParams": [],
2428
2947
  "query": [],
2429
2948
  "body": {
2430
2949
  "required": true,
2431
2950
  "fields": [
2432
2951
  {
2433
- "name": "name",
2434
- "type": "string",
2435
- "required": true,
2436
- "description": "Worker name, unique in your account: 3–40 lowercase letters, digits or hyphens, starting and ending with a letter or digit, with no two hyphens in a row. The names www, api, admin, app, canary, canary-probe, status, docs and console are reserved."
2437
- },
2438
- {
2439
- "name": "tags",
2952
+ "name": "files",
2440
2953
  "type": "array",
2441
2954
  "itemType": "string",
2442
- "required": false,
2443
- "description": "Up to 8 tags."
2444
- },
2445
- {
2446
- "name": "observability",
2447
- "type": "object",
2448
- "required": false,
2449
- "description": "Observability settings."
2450
- },
2451
- {
2452
- "name": "subdomain",
2453
- "type": "object",
2454
- "required": false,
2455
- "description": "Subdomain settings."
2955
+ "required": true,
2956
+ "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."
2456
2957
  },
2457
2958
  {
2458
- "name": "praxis",
2459
- "type": "object",
2959
+ "name": "display_name",
2960
+ "type": "string",
2460
2961
  "required": false,
2461
- "description": "Praxis settings."
2962
+ "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."
2462
2963
  }
2463
2964
  ]
2464
2965
  }
2465
2966
  },
2466
2967
  {
2467
- "resource": "application.workers",
2968
+ "resource": "agent.skills",
2468
2969
  "method": "delete",
2469
- "summary": "Delete Worker",
2470
- "description": "Soft-delete a Worker. Unlike Cloudflare, deletion is reversible: it stops serving at once and can be restored with RestoreWorker for 7 days, after which it is purged.",
2970
+ "summary": "Delete skill",
2971
+ "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.",
2471
2972
  "http": "DELETE",
2472
- "path": "/application/v1/workers/{worker_id}",
2973
+ "path": "/agent/v1/skills/{skill_id}",
2473
2974
  "streaming": "no",
2474
2975
  "pagination": false,
2475
2976
  "pathParams": [
2476
2977
  {
2477
- "name": "worker_id",
2478
- "sdkName": "worker_id"
2978
+ "name": "skill_id",
2979
+ "sdkName": "skill_id"
2479
2980
  }
2480
2981
  ],
2481
2982
  "query": []
2482
2983
  },
2483
2984
  {
2484
- "resource": "application.workers",
2985
+ "resource": "agent.skills",
2485
2986
  "method": "retrieve",
2486
- "summary": "Get Worker",
2487
- "description": "Get a Worker. expand returns related objects in the same response.",
2987
+ "summary": "Get skill",
2988
+ "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.",
2488
2989
  "http": "GET",
2489
- "path": "/application/v1/workers/{worker_id}",
2990
+ "path": "/agent/v1/skills/{skill_id}",
2490
2991
  "streaming": "no",
2491
2992
  "pagination": false,
2492
2993
  "pathParams": [
2493
2994
  {
2494
- "name": "worker_id",
2495
- "sdkName": "worker_id"
2995
+ "name": "skill_id",
2996
+ "sdkName": "skill_id"
2997
+ }
2998
+ ],
2999
+ "query": []
3000
+ },
3001
+ {
3002
+ "resource": "agent.skills.versions",
3003
+ "method": "list",
3004
+ "summary": "List skill versions",
3005
+ "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.",
3006
+ "http": "GET",
3007
+ "path": "/agent/v1/skills/{skill_id}/versions",
3008
+ "streaming": "no",
3009
+ "pagination": false,
3010
+ "pathParams": [
3011
+ {
3012
+ "name": "skill_id",
3013
+ "sdkName": "skill_id"
2496
3014
  }
2497
3015
  ],
2498
3016
  "query": [
2499
3017
  {
2500
- "name": "expand",
3018
+ "name": "limit",
3019
+ "type": "number",
3020
+ "required": false,
3021
+ "description": "Number of items per page."
3022
+ },
3023
+ {
3024
+ "name": "page",
2501
3025
  "type": "string",
2502
3026
  "required": false,
2503
- "description": "Comma-separated: versions, deployments, components, secrets, grants."
3027
+ "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."
2504
3028
  }
2505
3029
  ]
2506
3030
  },
2507
3031
  {
2508
- "resource": "application.workers",
2509
- "method": "update",
2510
- "summary": "Update Worker",
2511
- "description": "Change name, tags, observability, subdomain or labels. Omitted fields stay unchanged.",
2512
- "http": "PATCH",
2513
- "path": "/application/v1/workers/{worker_id}",
3032
+ "resource": "agent.skills.versions",
3033
+ "method": "create",
3034
+ "summary": "Create skill version",
3035
+ "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.",
3036
+ "http": "POST",
3037
+ "path": "/agent/v1/skills/{skill_id}/versions",
2514
3038
  "streaming": "no",
2515
3039
  "pagination": false,
3040
+ "multipart": true,
2516
3041
  "pathParams": [
2517
3042
  {
2518
- "name": "worker_id",
2519
- "sdkName": "worker_id"
3043
+ "name": "skill_id",
3044
+ "sdkName": "skill_id"
2520
3045
  }
2521
3046
  ],
2522
3047
  "query": [],
@@ -2524,99 +3049,164 @@ export const operations = [
2524
3049
  "required": true,
2525
3050
  "fields": [
2526
3051
  {
2527
- "name": "name",
2528
- "type": "string",
2529
- "required": false,
2530
- "description": "Worker name, unique in your account: 3–40 lowercase letters, digits or hyphens, starting and ending with a letter or digit, with no two hyphens in a row. The names www, api, admin, app, canary, canary-probe, status, docs and console are reserved."
2531
- },
2532
- {
2533
- "name": "tags",
3052
+ "name": "files",
2534
3053
  "type": "array",
2535
3054
  "itemType": "string",
2536
- "required": false,
2537
- "description": "Replaces the tags."
2538
- },
2539
- {
2540
- "name": "observability",
2541
- "type": "object",
2542
- "required": false,
2543
- "description": "Observability settings."
2544
- },
2545
- {
2546
- "name": "subdomain",
2547
- "type": "object",
2548
- "required": false,
2549
- "description": "Subdomain settings."
2550
- },
2551
- {
2552
- "name": "praxis",
2553
- "type": "object",
2554
- "required": false,
2555
- "description": "Praxis settings."
3055
+ "required": true,
3056
+ "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."
2556
3057
  }
2557
3058
  ]
2558
3059
  }
2559
3060
  },
2560
3061
  {
2561
- "resource": "application.workers.assetsUploadSession",
2562
- "method": "create",
2563
- "summary": "Create asset upload session",
2564
- "description": "Declare the static file manifest. The answer lists the hashes still missing, grouped into upload batches, and an upload token.",
2565
- "http": "POST",
2566
- "path": "/application/v1/workers/{worker_id}/assets-upload-session",
3062
+ "resource": "agent.skills.versions",
3063
+ "method": "delete",
3064
+ "summary": "Delete skill version",
3065
+ "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.",
3066
+ "http": "DELETE",
3067
+ "path": "/agent/v1/skills/{skill_id}/versions/{version}",
2567
3068
  "streaming": "no",
2568
3069
  "pagination": false,
2569
3070
  "pathParams": [
2570
3071
  {
2571
- "name": "worker_id",
2572
- "sdkName": "worker_id"
3072
+ "name": "skill_id",
3073
+ "sdkName": "skill_id"
3074
+ },
3075
+ {
3076
+ "name": "version",
3077
+ "sdkName": "version"
3078
+ }
3079
+ ],
3080
+ "query": []
3081
+ },
3082
+ {
3083
+ "resource": "agent.skills.versions",
3084
+ "method": "retrieve",
3085
+ "summary": "Get skill version",
3086
+ "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.",
3087
+ "http": "GET",
3088
+ "path": "/agent/v1/skills/{skill_id}/versions/{version}",
3089
+ "streaming": "no",
3090
+ "pagination": false,
3091
+ "pathParams": [
3092
+ {
3093
+ "name": "skill_id",
3094
+ "sdkName": "skill_id"
3095
+ },
3096
+ {
3097
+ "name": "version",
3098
+ "sdkName": "version"
3099
+ }
3100
+ ],
3101
+ "query": []
3102
+ },
3103
+ {
3104
+ "resource": "agent.skills.versions",
3105
+ "method": "retrieveContent",
3106
+ "summary": "Download skill version",
3107
+ "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.",
3108
+ "http": "GET",
3109
+ "path": "/agent/v1/skills/{skill_id}/versions/{version}/content",
3110
+ "streaming": "no",
3111
+ "pagination": false,
3112
+ "pathParams": [
3113
+ {
3114
+ "name": "skill_id",
3115
+ "sdkName": "skill_id"
3116
+ },
3117
+ {
3118
+ "name": "version",
3119
+ "sdkName": "version"
2573
3120
  }
2574
3121
  ],
3122
+ "query": []
3123
+ },
3124
+ {
3125
+ "resource": "agent.toolsets",
3126
+ "method": "list",
3127
+ "summary": "List Toolsets",
3128
+ "description": "Discover tool names, input schemas, read-only status and default permission policies before configuring an agent. The catalog is read-only: enable tools through agents.create or agents.update. agent_toolset_20260401 includes bash, edit, glob, grep, read, write, web_search, web_fetch, task_output, task_stop, monitor, agent, send_message, codemode and skill, plus todo_write, enter_plan_mode, ask_user_question and goal_read, which are listed so they can be switched off. Native additions require bash enabled; codemode requires bash (enabling it with bash disabled returns 400; keep bash enabled with permission_policy always_ask to restrict it); send_message also requires agent. To keep only some tools, set default_config.enabled to false and enable the wanted tools in configs; unlisted tools follow default_config. The catalog includes plugin names and versions. Sessions created through /anthropic/v1 expose only the eight official tools.",
3129
+ "http": "GET",
3130
+ "path": "/agent/v1/toolsets",
3131
+ "streaming": "no",
3132
+ "pagination": false,
3133
+ "pathParams": [],
3134
+ "query": []
3135
+ },
3136
+ {
3137
+ "resource": "application.assets.upload",
3138
+ "method": "create",
3139
+ "summary": "Upload assets",
3140
+ "description": "Upload one batch: files maps hash to base64 content. The last batch returns the completion token.",
3141
+ "http": "POST",
3142
+ "path": "/application/v1/assets/upload",
3143
+ "streaming": "no",
3144
+ "pagination": false,
3145
+ "pathParams": [],
2575
3146
  "query": [],
2576
3147
  "body": {
2577
3148
  "required": true,
2578
3149
  "fields": [
2579
3150
  {
2580
- "name": "manifest",
3151
+ "name": "jwt",
3152
+ "type": "string",
3153
+ "required": true,
3154
+ "description": "Upload token from the session."
3155
+ },
3156
+ {
3157
+ "name": "files",
2581
3158
  "type": "object",
2582
3159
  "required": true,
2583
- "description": "Map of static file path to content hash and byte size. Paths start with /; the same hash must declare the same size. The root paths /_headers and /_redirects are response-header and redirect rule files and are not served as assets; same-named files in subdirectories are ordinary assets. _headers allows at most 100 rules and 2000 characters per line (whitespace included); _redirects allows at most 2000 static and 100 dynamic rules and 1000 characters per rule (whitespace included), and rules after the first dynamic rule count toward the dynamic quota. Exceeding a limit makes CreateVersion return INVALID_PARAMS, with violations.field pointing at the manifest entry."
3160
+ "description": "Hash → base64 file content."
2584
3161
  }
2585
3162
  ]
2586
3163
  }
2587
3164
  },
2588
3165
  {
2589
- "resource": "application.workers.components",
2590
- "method": "list",
2591
- "summary": "List components",
2592
- "description": "List the databases, namespaces and buckets this Worker owns.",
3166
+ "resource": "application.subdomain",
3167
+ "method": "retrieve",
3168
+ "summary": "Get account subdomain",
3169
+ "description": "Return the account subdomain used in every Worker URL. A default is created on first use.",
2593
3170
  "http": "GET",
2594
- "path": "/application/v1/workers/{worker_id}/components",
3171
+ "path": "/application/v1/subdomain",
2595
3172
  "streaming": "no",
2596
3173
  "pagination": false,
2597
- "pathParams": [
2598
- {
2599
- "name": "worker_id",
2600
- "sdkName": "worker_id"
2601
- }
2602
- ],
3174
+ "pathParams": [],
2603
3175
  "query": []
2604
3176
  },
2605
3177
  {
2606
- "resource": "application.workers.deployments",
3178
+ "resource": "application.subdomain",
3179
+ "method": "update",
3180
+ "summary": "Change account subdomain",
3181
+ "description": "Change the account subdomain. Every Worker moves to the new address at once; old addresses stop resolving.",
3182
+ "http": "PUT",
3183
+ "path": "/application/v1/subdomain",
3184
+ "streaming": "no",
3185
+ "pagination": false,
3186
+ "pathParams": [],
3187
+ "query": [],
3188
+ "body": {
3189
+ "required": true,
3190
+ "fields": [
3191
+ {
3192
+ "name": "subdomain",
3193
+ "type": "string",
3194
+ "required": true,
3195
+ "description": "Account subdomain, 8–32 lowercase letters and digits; part of every Worker URL."
3196
+ }
3197
+ ]
3198
+ }
3199
+ },
3200
+ {
3201
+ "resource": "application.workers",
2607
3202
  "method": "list",
2608
- "summary": "List deployments",
2609
- "description": "List the deployments of a Worker, newest first; the first active one is serving. Page with next_cursor.",
3203
+ "summary": "List Workers",
3204
+ "description": "List Workers in your account. Filter by status or by label with label.<key>=<value>.",
2610
3205
  "http": "GET",
2611
- "path": "/application/v1/workers/{worker_id}/deployments",
3206
+ "path": "/application/v1/workers",
2612
3207
  "streaming": "no",
2613
3208
  "pagination": true,
2614
- "pathParams": [
2615
- {
2616
- "name": "worker_id",
2617
- "sdkName": "worker_id"
2618
- }
2619
- ],
3209
+ "pathParams": [],
2620
3210
  "query": [
2621
3211
  {
2622
3212
  "name": "cursor",
@@ -2629,70 +3219,293 @@ export const operations = [
2629
3219
  "type": "integer",
2630
3220
  "required": false,
2631
3221
  "description": "Items per page."
3222
+ },
3223
+ {
3224
+ "name": "status",
3225
+ "type": "string",
3226
+ "required": false,
3227
+ "description": "Worker status: draft (no deployment yet), active (serving), suspended (stopped by an administrator), deleted (soft-deleted, restorable for 7 days), purging (resources being removed), purged (gone)."
2632
3228
  }
2633
3229
  ]
2634
3230
  },
2635
3231
  {
2636
- "resource": "application.workers.deployments",
3232
+ "resource": "application.workers",
2637
3233
  "method": "create",
2638
- "summary": "Create deployment",
2639
- "description": "Deploy one version to serve the Worker. Unlike Cloudflare, a deployment holds exactly one version at 100 percent (no gradual rollout), so strategy must be percentage. Deployment is asynchronous; poll the deployment until praxis.status is active or failed.",
3234
+ "summary": "Create Worker",
3235
+ "description": "Create a Worker. It serves nothing until a version is deployed.",
2640
3236
  "http": "POST",
2641
- "path": "/application/v1/workers/{worker_id}/deployments",
3237
+ "path": "/application/v1/workers",
2642
3238
  "streaming": "no",
2643
3239
  "pagination": false,
2644
- "pathParams": [
2645
- {
2646
- "name": "worker_id",
2647
- "sdkName": "worker_id"
2648
- }
2649
- ],
3240
+ "pathParams": [],
2650
3241
  "query": [],
2651
3242
  "body": {
2652
3243
  "required": true,
2653
3244
  "fields": [
2654
3245
  {
2655
- "name": "strategy",
3246
+ "name": "name",
2656
3247
  "type": "string",
2657
- "enum": [
2658
- "percentage"
2659
- ],
2660
3248
  "required": true,
2661
- "description": "Rollout strategy."
3249
+ "description": "Worker name, unique in your account: 3–40 lowercase letters, digits or hyphens, starting and ending with a letter or digit, with no two hyphens in a row. The names www, api, admin, app, canary, canary-probe, status, docs and console are reserved."
2662
3250
  },
2663
3251
  {
2664
- "name": "versions",
3252
+ "name": "tags",
2665
3253
  "type": "array",
2666
- "itemType": "object",
2667
- "required": true,
2668
- "description": "Exactly one version at 100 percent."
3254
+ "itemType": "string",
3255
+ "required": false,
3256
+ "description": "Up to 8 tags."
2669
3257
  },
2670
3258
  {
2671
- "name": "force",
2672
- "type": "boolean",
3259
+ "name": "observability",
3260
+ "type": "object",
2673
3261
  "required": false,
2674
- "description": "Own face only; on the compatible face use the force query parameter."
3262
+ "description": "Observability settings."
2675
3263
  },
2676
3264
  {
2677
- "name": "annotations",
3265
+ "name": "subdomain",
2678
3266
  "type": "object",
2679
3267
  "required": false,
2680
- "description": "Free-form annotations."
3268
+ "description": "Subdomain settings."
3269
+ },
3270
+ {
3271
+ "name": "praxis",
3272
+ "type": "object",
3273
+ "required": false,
3274
+ "description": "Praxis settings."
2681
3275
  }
2682
3276
  ]
2683
3277
  }
2684
3278
  },
2685
3279
  {
2686
- "resource": "application.workers.deployments",
2687
- "method": "retrieve",
2688
- "summary": "Get deployment",
2689
- "description": "Get one deployment with its status and upload progress; poll this after CreateDeployment until praxis.status is active or failed.",
2690
- "http": "GET",
2691
- "path": "/application/v1/workers/{worker_id}/deployments/{deployment_id}",
2692
- "streaming": "no",
2693
- "pagination": false,
2694
- "pathParams": [
2695
- {
3280
+ "resource": "application.workers",
3281
+ "method": "delete",
3282
+ "summary": "Delete Worker",
3283
+ "description": "Soft-delete a Worker. Unlike Cloudflare, deletion is reversible: it stops serving at once and can be restored with RestoreWorker for 7 days, after which it is purged.",
3284
+ "http": "DELETE",
3285
+ "path": "/application/v1/workers/{worker_id}",
3286
+ "streaming": "no",
3287
+ "pagination": false,
3288
+ "pathParams": [
3289
+ {
3290
+ "name": "worker_id",
3291
+ "sdkName": "worker_id"
3292
+ }
3293
+ ],
3294
+ "query": []
3295
+ },
3296
+ {
3297
+ "resource": "application.workers",
3298
+ "method": "retrieve",
3299
+ "summary": "Get Worker",
3300
+ "description": "Get a Worker. expand returns related objects in the same response.",
3301
+ "http": "GET",
3302
+ "path": "/application/v1/workers/{worker_id}",
3303
+ "streaming": "no",
3304
+ "pagination": false,
3305
+ "pathParams": [
3306
+ {
3307
+ "name": "worker_id",
3308
+ "sdkName": "worker_id"
3309
+ }
3310
+ ],
3311
+ "query": [
3312
+ {
3313
+ "name": "expand",
3314
+ "type": "string",
3315
+ "required": false,
3316
+ "description": "Comma-separated: versions, deployments, components, secrets, grants."
3317
+ }
3318
+ ]
3319
+ },
3320
+ {
3321
+ "resource": "application.workers",
3322
+ "method": "update",
3323
+ "summary": "Update Worker",
3324
+ "description": "Change name, tags, observability, subdomain or labels. Omitted fields stay unchanged.",
3325
+ "http": "PATCH",
3326
+ "path": "/application/v1/workers/{worker_id}",
3327
+ "streaming": "no",
3328
+ "pagination": false,
3329
+ "pathParams": [
3330
+ {
3331
+ "name": "worker_id",
3332
+ "sdkName": "worker_id"
3333
+ }
3334
+ ],
3335
+ "query": [],
3336
+ "body": {
3337
+ "required": true,
3338
+ "fields": [
3339
+ {
3340
+ "name": "name",
3341
+ "type": "string",
3342
+ "required": false,
3343
+ "description": "Worker name, unique in your account: 3–40 lowercase letters, digits or hyphens, starting and ending with a letter or digit, with no two hyphens in a row. The names www, api, admin, app, canary, canary-probe, status, docs and console are reserved."
3344
+ },
3345
+ {
3346
+ "name": "tags",
3347
+ "type": "array",
3348
+ "itemType": "string",
3349
+ "required": false,
3350
+ "description": "Replaces the tags."
3351
+ },
3352
+ {
3353
+ "name": "observability",
3354
+ "type": "object",
3355
+ "required": false,
3356
+ "description": "Observability settings."
3357
+ },
3358
+ {
3359
+ "name": "subdomain",
3360
+ "type": "object",
3361
+ "required": false,
3362
+ "description": "Subdomain settings."
3363
+ },
3364
+ {
3365
+ "name": "praxis",
3366
+ "type": "object",
3367
+ "required": false,
3368
+ "description": "Praxis settings."
3369
+ }
3370
+ ]
3371
+ }
3372
+ },
3373
+ {
3374
+ "resource": "application.workers.assetsUploadSession",
3375
+ "method": "create",
3376
+ "summary": "Create asset upload session",
3377
+ "description": "Declare the static file manifest. The answer lists the hashes still missing, grouped into upload batches, and an upload token.",
3378
+ "http": "POST",
3379
+ "path": "/application/v1/workers/{worker_id}/assets-upload-session",
3380
+ "streaming": "no",
3381
+ "pagination": false,
3382
+ "pathParams": [
3383
+ {
3384
+ "name": "worker_id",
3385
+ "sdkName": "worker_id"
3386
+ }
3387
+ ],
3388
+ "query": [],
3389
+ "body": {
3390
+ "required": true,
3391
+ "fields": [
3392
+ {
3393
+ "name": "manifest",
3394
+ "type": "object",
3395
+ "required": true,
3396
+ "description": "Map of static file path to content hash and byte size. Paths start with /; the same hash must declare the same size. The root paths /_headers and /_redirects are response-header and redirect rule files and are not served as assets; same-named files in subdirectories are ordinary assets. _headers allows at most 100 rules and 2000 characters per line (whitespace included); _redirects allows at most 2000 static and 100 dynamic rules and 1000 characters per rule (whitespace included), and rules after the first dynamic rule count toward the dynamic quota. Exceeding a limit makes CreateVersion return INVALID_PARAMS, with violations.field pointing at the manifest entry."
3397
+ }
3398
+ ]
3399
+ }
3400
+ },
3401
+ {
3402
+ "resource": "application.workers.components",
3403
+ "method": "list",
3404
+ "summary": "List components",
3405
+ "description": "List the databases, namespaces and buckets this Worker owns.",
3406
+ "http": "GET",
3407
+ "path": "/application/v1/workers/{worker_id}/components",
3408
+ "streaming": "no",
3409
+ "pagination": false,
3410
+ "pathParams": [
3411
+ {
3412
+ "name": "worker_id",
3413
+ "sdkName": "worker_id"
3414
+ }
3415
+ ],
3416
+ "query": []
3417
+ },
3418
+ {
3419
+ "resource": "application.workers.deployments",
3420
+ "method": "list",
3421
+ "summary": "List deployments",
3422
+ "description": "List the deployments of a Worker, newest first; the first active one is serving. Page with next_cursor.",
3423
+ "http": "GET",
3424
+ "path": "/application/v1/workers/{worker_id}/deployments",
3425
+ "streaming": "no",
3426
+ "pagination": true,
3427
+ "pathParams": [
3428
+ {
3429
+ "name": "worker_id",
3430
+ "sdkName": "worker_id"
3431
+ }
3432
+ ],
3433
+ "query": [
3434
+ {
3435
+ "name": "cursor",
3436
+ "type": "string",
3437
+ "required": false,
3438
+ "description": "next_cursor from the previous page."
3439
+ },
3440
+ {
3441
+ "name": "limit",
3442
+ "type": "integer",
3443
+ "required": false,
3444
+ "description": "Items per page."
3445
+ }
3446
+ ]
3447
+ },
3448
+ {
3449
+ "resource": "application.workers.deployments",
3450
+ "method": "create",
3451
+ "summary": "Create deployment",
3452
+ "description": "Deploy one version to serve the Worker. Unlike Cloudflare, a deployment holds exactly one version at 100 percent (no gradual rollout), so strategy must be percentage. Deployment is asynchronous; poll the deployment until praxis.status is active or failed.",
3453
+ "http": "POST",
3454
+ "path": "/application/v1/workers/{worker_id}/deployments",
3455
+ "streaming": "no",
3456
+ "pagination": false,
3457
+ "pathParams": [
3458
+ {
3459
+ "name": "worker_id",
3460
+ "sdkName": "worker_id"
3461
+ }
3462
+ ],
3463
+ "query": [],
3464
+ "body": {
3465
+ "required": true,
3466
+ "fields": [
3467
+ {
3468
+ "name": "strategy",
3469
+ "type": "string",
3470
+ "enum": [
3471
+ "percentage"
3472
+ ],
3473
+ "required": true,
3474
+ "description": "Rollout strategy."
3475
+ },
3476
+ {
3477
+ "name": "versions",
3478
+ "type": "array",
3479
+ "itemType": "object",
3480
+ "required": true,
3481
+ "description": "Exactly one version at 100 percent."
3482
+ },
3483
+ {
3484
+ "name": "force",
3485
+ "type": "boolean",
3486
+ "required": false,
3487
+ "description": "Own face only; on the compatible face use the force query parameter."
3488
+ },
3489
+ {
3490
+ "name": "annotations",
3491
+ "type": "object",
3492
+ "required": false,
3493
+ "description": "Free-form annotations."
3494
+ }
3495
+ ]
3496
+ }
3497
+ },
3498
+ {
3499
+ "resource": "application.workers.deployments",
3500
+ "method": "retrieve",
3501
+ "summary": "Get deployment",
3502
+ "description": "Get one deployment with its status and upload progress; poll this after CreateDeployment until praxis.status is active or failed.",
3503
+ "http": "GET",
3504
+ "path": "/application/v1/workers/{worker_id}/deployments/{deployment_id}",
3505
+ "streaming": "no",
3506
+ "pagination": false,
3507
+ "pathParams": [
3508
+ {
2696
3509
  "name": "worker_id",
2697
3510
  "sdkName": "worker_id"
2698
3511
  },
@@ -3026,6 +3839,27 @@ export const operations = [
3026
3839
  ],
3027
3840
  "query": []
3028
3841
  },
3842
+ {
3843
+ "resource": "application.workers.versions.assets",
3844
+ "method": "retrieveManifest",
3845
+ "summary": "Get version asset manifest",
3846
+ "description": "Read the retained asset paths, content hashes and byte sizes of a version for publication planning. This read creates no session or version. A version without assets returns an empty manifest; unavailable artifacts and foreign resources return 404.",
3847
+ "http": "GET",
3848
+ "path": "/application/v1/workers/{worker_id}/versions/{version_id}/assets/manifest",
3849
+ "streaming": "no",
3850
+ "pagination": false,
3851
+ "pathParams": [
3852
+ {
3853
+ "name": "worker_id",
3854
+ "sdkName": "worker_id"
3855
+ },
3856
+ {
3857
+ "name": "version_id",
3858
+ "sdkName": "version_id"
3859
+ }
3860
+ ],
3861
+ "query": []
3862
+ },
3029
3863
  {
3030
3864
  "resource": "automation.actions",
3031
3865
  "method": "list",
@@ -3129,13 +3963,13 @@ export const operations = [
3129
3963
  "name": "namespace",
3130
3964
  "type": "string",
3131
3965
  "required": true,
3132
- "description": "Choose a namespace without prior registration; praxis is read-only. Folded to lowercase; matches [a-z0-9][a-z0-9._-]{0,63}."
3966
+ "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}."
3133
3967
  },
3134
3968
  {
3135
3969
  "name": "name",
3136
3970
  "type": "string",
3137
3971
  "required": true,
3138
- "description": "Name, folded to lowercase; matches [a-z0-9][a-z0-9._-]{0,63}."
3972
+ "description": "Name, folded to lowercase; matches [a-z0-9][a-z0-9_-]{0,63}."
3139
3973
  },
3140
3974
  {
3141
3975
  "name": "description",
@@ -3198,8 +4032,8 @@ export const operations = [
3198
4032
  {
3199
4033
  "resource": "automation.actions",
3200
4034
  "method": "retrieve",
3201
- "summary": "Get an action",
3202
- "description": "Read the action and its full current implementation. The response ETag is the current revision ID for conditional updates.",
4035
+ "summary": "Get an Action with its current input and output JSON Schemas",
4036
+ "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.",
3203
4037
  "http": "GET",
3204
4038
  "path": "/automation/v1/actions/{ns}/{name}",
3205
4039
  "streaming": "no",
@@ -3773,8 +4607,8 @@ export const operations = [
3773
4607
  {
3774
4608
  "resource": "automation.runs",
3775
4609
  "method": "create",
3776
- "summary": "Create a run",
3777
- "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}.",
4610
+ "summary": "Run a published target or execute draft source",
4611
+ "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.",
3778
4612
  "http": "POST",
3779
4613
  "path": "/automation/v1/runs",
3780
4614
  "streaming": "no",
@@ -4252,7 +5086,7 @@ export const operations = [
4252
5086
  "resource": "automation.scripts",
4253
5087
  "method": "create",
4254
5088
  "summary": "Create a script",
4255
- "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.",
5089
+ "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.",
4256
5090
  "http": "POST",
4257
5091
  "path": "/automation/v1/scripts",
4258
5092
  "streaming": "no",
@@ -4266,13 +5100,13 @@ export const operations = [
4266
5100
  "name": "namespace",
4267
5101
  "type": "string",
4268
5102
  "required": true,
4269
- "description": "Choose a namespace without prior registration; praxis is read-only. Folded to lowercase; matches [a-z0-9][a-z0-9._-]{0,63}."
5103
+ "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}."
4270
5104
  },
4271
5105
  {
4272
5106
  "name": "name",
4273
5107
  "type": "string",
4274
5108
  "required": true,
4275
- "description": "Name, folded to lowercase; matches [a-z0-9][a-z0-9._-]{0,63}."
5109
+ "description": "Name, folded to lowercase; matches [a-z0-9][a-z0-9_-]{0,63}."
4276
5110
  },
4277
5111
  {
4278
5112
  "name": "description",
@@ -4320,7 +5154,7 @@ export const operations = [
4320
5154
  "resource": "automation.scripts",
4321
5155
  "method": "update",
4322
5156
  "summary": "Update a script draft",
4323
- "description": "Update description, labels or draft with the current draft revision in If-Match. Even metadata-only updates create a new draft revision.",
5157
+ "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.",
4324
5158
  "http": "PATCH",
4325
5159
  "path": "/automation/v1/scripts/{ns}/{name}",
4326
5160
  "streaming": "no",
@@ -5274,7 +6108,7 @@ export const operations = [
5274
6108
  "resource": "automation.workflows",
5275
6109
  "method": "create",
5276
6110
  "summary": "Create a workflow",
5277
- "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.",
6111
+ "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.",
5278
6112
  "http": "POST",
5279
6113
  "path": "/automation/v1/workflows",
5280
6114
  "streaming": "no",
@@ -5288,13 +6122,13 @@ export const operations = [
5288
6122
  "name": "namespace",
5289
6123
  "type": "string",
5290
6124
  "required": true,
5291
- "description": "Choose a namespace without prior registration; praxis is read-only. Folded to lowercase; matches [a-z0-9][a-z0-9._-]{0,63}."
6125
+ "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}."
5292
6126
  },
5293
6127
  {
5294
6128
  "name": "name",
5295
6129
  "type": "string",
5296
6130
  "required": true,
5297
- "description": "Name, folded to lowercase; matches [a-z0-9][a-z0-9._-]{0,63}."
6131
+ "description": "Name, folded to lowercase; matches [a-z0-9][a-z0-9_-]{0,63}."
5298
6132
  },
5299
6133
  {
5300
6134
  "name": "description",
@@ -6449,7 +7283,7 @@ export const operations = [
6449
7283
  "name": "{column}",
6450
7284
  "type": "string",
6451
7285
  "required": false,
6452
- "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."
7286
+ "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."
6453
7287
  },
6454
7288
  {
6455
7289
  "name": "and",
@@ -6497,7 +7331,7 @@ export const operations = [
6497
7331
  "name": "on_conflict",
6498
7332
  "type": "string",
6499
7333
  "required": false,
6500
- "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."
7334
+ "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."
6501
7335
  },
6502
7336
  {
6503
7337
  "name": "columns",
@@ -6511,7 +7345,7 @@ export const operations = [
6511
7345
  "resource": "database.databases.rest",
6512
7346
  "method": "retrieve",
6513
7347
  "summary": "Select rows",
6514
- "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.",
7348
+ "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.",
6515
7349
  "http": "GET",
6516
7350
  "path": "/database/v1/databases/{database_id}/rest/{table}",
6517
7351
  "streaming": "no",
@@ -6537,7 +7371,7 @@ export const operations = [
6537
7371
  "name": "{column}",
6538
7372
  "type": "string",
6539
7373
  "required": false,
6540
- "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."
7374
+ "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."
6541
7375
  },
6542
7376
  {
6543
7377
  "name": "and",
@@ -6585,7 +7419,7 @@ export const operations = [
6585
7419
  "name": "on_conflict",
6586
7420
  "type": "string",
6587
7421
  "required": false,
6588
- "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."
7422
+ "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."
6589
7423
  },
6590
7424
  {
6591
7425
  "name": "columns",
@@ -6599,7 +7433,7 @@ export const operations = [
6599
7433
  "resource": "database.databases.rest",
6600
7434
  "method": "head",
6601
7435
  "summary": "Count rows",
6602
- "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.",
7436
+ "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.",
6603
7437
  "http": "HEAD",
6604
7438
  "path": "/database/v1/databases/{database_id}/rest/{table}",
6605
7439
  "streaming": "no",
@@ -6625,7 +7459,7 @@ export const operations = [
6625
7459
  "name": "{column}",
6626
7460
  "type": "string",
6627
7461
  "required": false,
6628
- "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."
7462
+ "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."
6629
7463
  },
6630
7464
  {
6631
7465
  "name": "and",
@@ -6673,7 +7507,7 @@ export const operations = [
6673
7507
  "name": "on_conflict",
6674
7508
  "type": "string",
6675
7509
  "required": false,
6676
- "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."
7510
+ "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."
6677
7511
  },
6678
7512
  {
6679
7513
  "name": "columns",
@@ -6713,7 +7547,7 @@ export const operations = [
6713
7547
  "name": "{column}",
6714
7548
  "type": "string",
6715
7549
  "required": false,
6716
- "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."
7550
+ "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."
6717
7551
  },
6718
7552
  {
6719
7553
  "name": "and",
@@ -6761,7 +7595,7 @@ export const operations = [
6761
7595
  "name": "on_conflict",
6762
7596
  "type": "string",
6763
7597
  "required": false,
6764
- "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."
7598
+ "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."
6765
7599
  },
6766
7600
  {
6767
7601
  "name": "columns",
@@ -6779,7 +7613,7 @@ export const operations = [
6779
7613
  "resource": "database.databases.rest",
6780
7614
  "method": "create",
6781
7615
  "summary": "Insert rows",
6782
- "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.",
7616
+ "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.",
6783
7617
  "http": "POST",
6784
7618
  "path": "/database/v1/databases/{database_id}/rest/{table}",
6785
7619
  "streaming": "no",
@@ -6805,7 +7639,7 @@ export const operations = [
6805
7639
  "name": "{column}",
6806
7640
  "type": "string",
6807
7641
  "required": false,
6808
- "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."
7642
+ "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."
6809
7643
  },
6810
7644
  {
6811
7645
  "name": "and",
@@ -6853,7 +7687,7 @@ export const operations = [
6853
7687
  "name": "on_conflict",
6854
7688
  "type": "string",
6855
7689
  "required": false,
6856
- "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."
7690
+ "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."
6857
7691
  },
6858
7692
  {
6859
7693
  "name": "columns",
@@ -6905,7 +7739,7 @@ export const operations = [
6905
7739
  "resource": "database.databases.tables",
6906
7740
  "method": "create",
6907
7741
  "summary": "Create table",
6908
- "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.",
7742
+ "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.",
6909
7743
  "http": "POST",
6910
7744
  "path": "/database/v1/databases/{database_id}/tables",
6911
7745
  "streaming": "no",
@@ -7026,7 +7860,7 @@ export const operations = [
7026
7860
  "resource": "database.databases.tables.fields",
7027
7861
  "method": "create",
7028
7862
  "summary": "Add field",
7029
- "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.",
7863
+ "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.",
7030
7864
  "http": "POST",
7031
7865
  "path": "/database/v1/databases/{database_id}/tables/{table}/fields",
7032
7866
  "streaming": "no",
@@ -7195,7 +8029,7 @@ export const operations = [
7195
8029
  "resource": "file.files",
7196
8030
  "method": "create",
7197
8031
  "summary": "Upload file",
7198
- "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.",
8032
+ "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.",
7199
8033
  "http": "POST",
7200
8034
  "path": "/file/v1/files",
7201
8035
  "streaming": "no",
@@ -7210,7 +8044,7 @@ export const operations = [
7210
8044
  "name": "file",
7211
8045
  "type": "string",
7212
8046
  "required": true,
7213
- "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."
8047
+ "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."
7214
8048
  },
7215
8049
  {
7216
8050
  "name": "purpose",
@@ -7259,7 +8093,7 @@ export const operations = [
7259
8093
  "resource": "file.files",
7260
8094
  "method": "retrieve",
7261
8095
  "summary": "Retrieve file",
7262
- "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.",
8096
+ "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.",
7263
8097
  "http": "GET",
7264
8098
  "path": "/file/v1/files/{file_id}",
7265
8099
  "streaming": "no",
@@ -7276,7 +8110,7 @@ export const operations = [
7276
8110
  "resource": "file.files",
7277
8111
  "method": "retrieveContent",
7278
8112
  "summary": "Retrieve file content",
7279
- "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.",
8113
+ "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.",
7280
8114
  "http": "GET",
7281
8115
  "path": "/file/v1/files/{file_id}/content",
7282
8116
  "streaming": "no",
@@ -7290,17 +8124,163 @@ export const operations = [
7290
8124
  "query": []
7291
8125
  },
7292
8126
  {
7293
- "resource": "knowledge.vectorStores",
7294
- "method": "list",
7295
- "summary": "List knowledge bases",
7296
- "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.",
7297
- "http": "GET",
7298
- "path": "/knowledge/v1/vector_stores",
8127
+ "resource": "file.uploads",
8128
+ "method": "create",
8129
+ "summary": "Create an upload",
8130
+ "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.",
8131
+ "http": "POST",
8132
+ "path": "/file/v1/uploads",
7299
8133
  "streaming": "no",
7300
8134
  "pagination": false,
7301
8135
  "pathParams": [],
7302
- "query": [
7303
- {
8136
+ "query": [],
8137
+ "body": {
8138
+ "required": true,
8139
+ "fields": [
8140
+ {
8141
+ "name": "bytes",
8142
+ "type": "integer",
8143
+ "required": true,
8144
+ "description": "Exact complete file length in bytes, from 1 through 2147483648 (2 GiB); the sum of completed parts must match."
8145
+ },
8146
+ {
8147
+ "name": "filename",
8148
+ "type": "string",
8149
+ "required": true,
8150
+ "description": "Filename for the resulting file, at most 255 UTF-8 bytes."
8151
+ },
8152
+ {
8153
+ "name": "mime_type",
8154
+ "type": "string",
8155
+ "required": true,
8156
+ "description": "Declared MIME type; validated against the assembled content."
8157
+ },
8158
+ {
8159
+ "name": "purpose",
8160
+ "type": "string",
8161
+ "enum": [
8162
+ "user_data",
8163
+ "assistants",
8164
+ "vision"
8165
+ ],
8166
+ "required": true,
8167
+ "description": "Use user_data for conversation attachments, assistants for assistant files, or vision for PNG, JPEG, GIF and WebP images."
8168
+ },
8169
+ {
8170
+ "name": "expires_after",
8171
+ "type": "object",
8172
+ "required": false,
8173
+ "description": "Optional expiry policy for the resulting file; omission retains the file until deletion."
8174
+ },
8175
+ {
8176
+ "name": "part_size",
8177
+ "type": "integer",
8178
+ "required": false,
8179
+ "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."
8180
+ }
8181
+ ]
8182
+ }
8183
+ },
8184
+ {
8185
+ "resource": "file.uploads",
8186
+ "method": "cancel",
8187
+ "summary": "Cancel an upload",
8188
+ "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.",
8189
+ "http": "POST",
8190
+ "path": "/file/v1/uploads/{upload_id}/cancel",
8191
+ "streaming": "no",
8192
+ "pagination": false,
8193
+ "pathParams": [
8194
+ {
8195
+ "name": "upload_id",
8196
+ "sdkName": "upload_id"
8197
+ }
8198
+ ],
8199
+ "query": []
8200
+ },
8201
+ {
8202
+ "resource": "file.uploads",
8203
+ "method": "complete",
8204
+ "summary": "Complete an upload",
8205
+ "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.",
8206
+ "http": "POST",
8207
+ "path": "/file/v1/uploads/{upload_id}/complete",
8208
+ "streaming": "no",
8209
+ "pagination": false,
8210
+ "pathParams": [
8211
+ {
8212
+ "name": "upload_id",
8213
+ "sdkName": "upload_id"
8214
+ }
8215
+ ],
8216
+ "query": [],
8217
+ "body": {
8218
+ "required": true,
8219
+ "fields": [
8220
+ {
8221
+ "name": "part_ids",
8222
+ "type": "array",
8223
+ "itemType": "string",
8224
+ "required": true,
8225
+ "description": "All part IDs in concatenation order, without duplicates. Fixed-size uploads require increasing part_number order."
8226
+ },
8227
+ {
8228
+ "name": "md5",
8229
+ "type": "string",
8230
+ "required": false,
8231
+ "description": "Optional whole-file MD5 as 32 hexadecimal characters; verified after assembly."
8232
+ }
8233
+ ]
8234
+ }
8235
+ },
8236
+ {
8237
+ "resource": "file.uploads.parts",
8238
+ "method": "create",
8239
+ "summary": "Add an upload part",
8240
+ "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.",
8241
+ "http": "POST",
8242
+ "path": "/file/v1/uploads/{upload_id}/parts",
8243
+ "streaming": "no",
8244
+ "pagination": false,
8245
+ "multipart": true,
8246
+ "pathParams": [
8247
+ {
8248
+ "name": "upload_id",
8249
+ "sdkName": "upload_id"
8250
+ }
8251
+ ],
8252
+ "query": [
8253
+ {
8254
+ "name": "part_number",
8255
+ "type": "integer",
8256
+ "required": false,
8257
+ "description": "Required when create set part_size; 1 through ceil(bytes / part_size). Ignored for general uploads."
8258
+ }
8259
+ ],
8260
+ "body": {
8261
+ "required": true,
8262
+ "fields": [
8263
+ {
8264
+ "name": "data",
8265
+ "type": "string",
8266
+ "required": true,
8267
+ "description": "Raw bytes of this part, nonempty and at most 64000000 bytes."
8268
+ }
8269
+ ]
8270
+ }
8271
+ },
8272
+ {
8273
+ "resource": "knowledge.vectorStores",
8274
+ "method": "list",
8275
+ "summary": "List knowledge bases",
8276
+ "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.",
8277
+ "http": "GET",
8278
+ "path": "/knowledge/v1/vector_stores",
8279
+ "streaming": "no",
8280
+ "pagination": false,
8281
+ "pathParams": [],
8282
+ "query": [
8283
+ {
7304
8284
  "name": "status",
7305
8285
  "type": "string",
7306
8286
  "enum": [
@@ -11364,6 +12344,43 @@ export const operations = [
11364
12344
  ],
11365
12345
  "query": []
11366
12346
  },
12347
+ {
12348
+ "resource": "organization.feedback",
12349
+ "method": "list",
12350
+ "summary": "List your organization's feedback",
12351
+ "description": "Feedback submitted by your organization, newest first, with phase and unread state. Filter by phase and search titles and message text (case-insensitive). Page with next_page. Requires a valid API key, Console session, or machine token of the organization.",
12352
+ "http": "GET",
12353
+ "path": "/organization/v1/feedback",
12354
+ "streaming": "no",
12355
+ "pagination": false,
12356
+ "pathParams": [],
12357
+ "query": [
12358
+ {
12359
+ "name": "phase",
12360
+ "type": "string",
12361
+ "required": false,
12362
+ "description": "Only feedback in these phases: a comma-separated list of open, awaiting_customer, in_progress, resolved or closed, for example open,in_progress; see the phase field of a feedback for what each means."
12363
+ },
12364
+ {
12365
+ "name": "query",
12366
+ "type": "string",
12367
+ "required": false,
12368
+ "description": "Case-insensitive text matched against titles and message bodies."
12369
+ },
12370
+ {
12371
+ "name": "limit",
12372
+ "type": "integer",
12373
+ "required": false,
12374
+ "description": "Items per page, 1 to 100."
12375
+ },
12376
+ {
12377
+ "name": "page",
12378
+ "type": "string",
12379
+ "required": false,
12380
+ "description": "Opaque cursor from next_page of the previous response."
12381
+ }
12382
+ ]
12383
+ },
11367
12384
  {
11368
12385
  "resource": "organization.feedback",
11369
12386
  "method": "create",
@@ -11382,7 +12399,7 @@ export const operations = [
11382
12399
  "name": "message",
11383
12400
  "type": "string",
11384
12401
  "required": true,
11385
- "description": "Problem description and original error text; at most 4096 Unicode code points."
12402
+ "description": "Problem description, at most 4096 Unicode code points; may be empty only when contexts.praxis.error.message is a non-empty string."
11386
12403
  },
11387
12404
  {
11388
12405
  "name": "contact_email",
@@ -11408,6 +12425,18 @@ export const operations = [
11408
12425
  "required": false,
11409
12426
  "description": "X-Request-Id from the failed response or the related error event ID."
11410
12427
  },
12428
+ {
12429
+ "name": "title",
12430
+ "type": "string",
12431
+ "required": false,
12432
+ "description": "Short summary shown in the feedback list; at most 200 Unicode code points."
12433
+ },
12434
+ {
12435
+ "name": "type",
12436
+ "type": "string",
12437
+ "required": false,
12438
+ "description": "Feedback type key enabled in the help settings, such as issue, suggestion, billing or other. Unknown or disabled keys are rejected with INVALID_PARAMS."
12439
+ },
11411
12440
  {
11412
12441
  "name": "tags",
11413
12442
  "type": "object",
@@ -11440,6 +12469,100 @@ export const operations = [
11440
12469
  ]
11441
12470
  }
11442
12471
  },
12472
+ {
12473
+ "resource": "organization.feedback.counts",
12474
+ "method": "list",
12475
+ "summary": "Count your organization's feedback by phase",
12476
+ "description": "How many of your organization's feedback are in each phase, for status tabs. Counts never include another organization's feedback.",
12477
+ "http": "GET",
12478
+ "path": "/organization/v1/feedback/counts",
12479
+ "streaming": "no",
12480
+ "pagination": false,
12481
+ "pathParams": [],
12482
+ "query": []
12483
+ },
12484
+ {
12485
+ "resource": "organization.feedback",
12486
+ "method": "retrieve",
12487
+ "summary": "Get one of your organization's feedback",
12488
+ "description": "Read one feedback submitted by your organization with its current phase and first-response timing. Another organization's feedback answers 404 FEEDBACK_NOT_FOUND exactly like a missing one.",
12489
+ "http": "GET",
12490
+ "path": "/organization/v1/feedback/{id}",
12491
+ "streaming": "no",
12492
+ "pagination": false,
12493
+ "pathParams": [
12494
+ {
12495
+ "name": "id",
12496
+ "sdkName": "id"
12497
+ }
12498
+ ],
12499
+ "query": []
12500
+ },
12501
+ {
12502
+ "resource": "organization.feedback.messages",
12503
+ "method": "list",
12504
+ "summary": "List the messages of a feedback",
12505
+ "description": "The conversation of one feedback in time order: your messages, support replies and system events. Internal support notes are never returned. Page with next_page.",
12506
+ "http": "GET",
12507
+ "path": "/organization/v1/feedback/{id}/messages",
12508
+ "streaming": "no",
12509
+ "pagination": false,
12510
+ "pathParams": [
12511
+ {
12512
+ "name": "id",
12513
+ "sdkName": "id"
12514
+ }
12515
+ ],
12516
+ "query": [
12517
+ {
12518
+ "name": "limit",
12519
+ "type": "integer",
12520
+ "required": false,
12521
+ "description": "Items per page, 1 to 100."
12522
+ },
12523
+ {
12524
+ "name": "page",
12525
+ "type": "string",
12526
+ "required": false,
12527
+ "description": "Opaque cursor from next_page of the previous response."
12528
+ }
12529
+ ]
12530
+ },
12531
+ {
12532
+ "resource": "organization.feedback.messages",
12533
+ "method": "create",
12534
+ "summary": "Reply on a feedback",
12535
+ "description": "Add your message to a feedback conversation, for example to answer a question from support. A reply while the phase is awaiting_customer moves it to in_progress and notifies support.",
12536
+ "http": "POST",
12537
+ "path": "/organization/v1/feedback/{id}/messages",
12538
+ "streaming": "no",
12539
+ "pagination": false,
12540
+ "pathParams": [
12541
+ {
12542
+ "name": "id",
12543
+ "sdkName": "id"
12544
+ }
12545
+ ],
12546
+ "query": [],
12547
+ "body": {
12548
+ "required": true,
12549
+ "fields": [
12550
+ {
12551
+ "name": "body",
12552
+ "type": "string",
12553
+ "required": true,
12554
+ "description": "Markdown text; at most 4096 Unicode code points."
12555
+ },
12556
+ {
12557
+ "name": "attachments",
12558
+ "type": "array",
12559
+ "itemType": "object",
12560
+ "required": false,
12561
+ "description": "Up to five attachments; decoded bytes must not exceed 10 MiB each or 20 MiB in total."
12562
+ }
12563
+ ]
12564
+ }
12565
+ },
11443
12566
  {
11444
12567
  "resource": "organization.usage",
11445
12568
  "method": "list",
@@ -11574,7 +12697,7 @@ export const operations = [
11574
12697
  "resource": "sandbox.sandboxes",
11575
12698
  "method": "create",
11576
12699
  "summary": "Create sandbox (v2)",
11577
- "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.",
12700
+ "description": "Create a sandbox from the template. All system communication with the sandbox is secured.",
11578
12701
  "http": "POST",
11579
12702
  "path": "/sandbox/v1/sandboxes",
11580
12703
  "streaming": "no",
@@ -11588,7 +12711,7 @@ export const operations = [
11588
12711
  "name": "templateID",
11589
12712
  "type": "string",
11590
12713
  "required": true,
11591
- "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`)."
12714
+ "description": "Identifier of the required template"
11592
12715
  },
11593
12716
  {
11594
12717
  "name": "timeout",
@@ -11726,7 +12849,7 @@ export const operations = [
11726
12849
  "resource": "sandbox.sandboxes",
11727
12850
  "method": "connect",
11728
12851
  "summary": "Connect sandbox (v2)",
11729
- "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.",
12852
+ "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.",
11730
12853
  "http": "POST",
11731
12854
  "path": "/sandbox/v1/sandboxes/{sandboxID}/connect",
11732
12855
  "streaming": "no",
@@ -11885,7 +13008,7 @@ export const operations = [
11885
13008
  "resource": "sandbox.sandboxes.metrics",
11886
13009
  "method": "list",
11887
13010
  "summary": "Sandbox metrics",
11888
- "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.",
13011
+ "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.",
11889
13012
  "http": "GET",
11890
13013
  "path": "/sandbox/v1/sandboxes/{sandboxID}/metrics",
11891
13014
  "streaming": "no",
@@ -11969,7 +13092,7 @@ export const operations = [
11969
13092
  "resource": "sandbox.sandboxes",
11970
13093
  "method": "pause",
11971
13094
  "summary": "Pause sandbox",
11972
- "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.",
13095
+ "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.",
11973
13096
  "http": "POST",
11974
13097
  "path": "/sandbox/v1/sandboxes/{sandboxID}/pause",
11975
13098
  "streaming": "no",
@@ -12361,7 +13484,7 @@ export const operations = [
12361
13484
  "resource": "sandbox.templates",
12362
13485
  "method": "list",
12363
13486
  "summary": "List templates (v2)",
12364
- "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.",
13487
+ "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.",
12365
13488
  "http": "GET",
12366
13489
  "path": "/sandbox/v1/templates",
12367
13490
  "streaming": "no",
@@ -13122,6 +14245,1466 @@ export const operations = [
13122
14245
  ]
13123
14246
  }
13124
14247
  },
14248
+ {
14249
+ "resource": "ticket.activity",
14250
+ "method": "retrieve",
14251
+ "summary": "List activity",
14252
+ "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.",
14253
+ "http": "GET",
14254
+ "path": "/ticket/v1/activity",
14255
+ "streaming": "no",
14256
+ "pagination": false,
14257
+ "pathParams": [],
14258
+ "query": [
14259
+ {
14260
+ "name": "repository",
14261
+ "type": "string",
14262
+ "required": false,
14263
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14264
+ },
14265
+ {
14266
+ "name": "page_size",
14267
+ "type": "integer",
14268
+ "required": false,
14269
+ "description": "Records per page; defaults to 30, maximum 100."
14270
+ },
14271
+ {
14272
+ "name": "page_token",
14273
+ "type": "string",
14274
+ "required": false,
14275
+ "description": "Cursor returned as next_page_token; omit for the first page."
14276
+ },
14277
+ {
14278
+ "name": "filter",
14279
+ "type": "string",
14280
+ "required": false,
14281
+ "description": "Activity qualifiers: actor, actor-kind, action, ticket, source and since; passed unchanged to the service."
14282
+ }
14283
+ ]
14284
+ },
14285
+ {
14286
+ "resource": "ticket.comments",
14287
+ "method": "delete",
14288
+ "summary": "Remove comments",
14289
+ "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.",
14290
+ "http": "DELETE",
14291
+ "path": "/ticket/v1/comments/{id}",
14292
+ "streaming": "no",
14293
+ "pagination": false,
14294
+ "pathParams": [
14295
+ {
14296
+ "name": "id",
14297
+ "sdkName": "id"
14298
+ }
14299
+ ],
14300
+ "query": [
14301
+ {
14302
+ "name": "repository",
14303
+ "type": "string",
14304
+ "required": false,
14305
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14306
+ }
14307
+ ]
14308
+ },
14309
+ {
14310
+ "resource": "ticket.comments",
14311
+ "method": "retrieve",
14312
+ "summary": "Read comments",
14313
+ "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.",
14314
+ "http": "GET",
14315
+ "path": "/ticket/v1/comments/{id}",
14316
+ "streaming": "no",
14317
+ "pagination": false,
14318
+ "pathParams": [
14319
+ {
14320
+ "name": "id",
14321
+ "sdkName": "id"
14322
+ }
14323
+ ],
14324
+ "query": [
14325
+ {
14326
+ "name": "repository",
14327
+ "type": "string",
14328
+ "required": false,
14329
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14330
+ }
14331
+ ]
14332
+ },
14333
+ {
14334
+ "resource": "ticket.comments",
14335
+ "method": "update",
14336
+ "summary": "Update comments",
14337
+ "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.",
14338
+ "http": "PATCH",
14339
+ "path": "/ticket/v1/comments/{id}",
14340
+ "streaming": "no",
14341
+ "pagination": false,
14342
+ "pathParams": [
14343
+ {
14344
+ "name": "id",
14345
+ "sdkName": "id"
14346
+ }
14347
+ ],
14348
+ "query": [
14349
+ {
14350
+ "name": "repository",
14351
+ "type": "string",
14352
+ "required": false,
14353
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14354
+ }
14355
+ ],
14356
+ "body": {
14357
+ "required": true,
14358
+ "fields": [
14359
+ {
14360
+ "name": "body",
14361
+ "type": "string",
14362
+ "required": true,
14363
+ "description": "Markdown text, at most 65536 characters."
14364
+ },
14365
+ {
14366
+ "name": "in_reply_to",
14367
+ "type": "string",
14368
+ "required": false,
14369
+ "description": "Opaque identifier returned by this resource's create or list operation."
14370
+ }
14371
+ ]
14372
+ }
14373
+ },
14374
+ {
14375
+ "resource": "ticket.comments.reactions",
14376
+ "method": "list",
14377
+ "summary": "List reactions",
14378
+ "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.",
14379
+ "http": "GET",
14380
+ "path": "/ticket/v1/comments/{id}/reactions",
14381
+ "streaming": "no",
14382
+ "pagination": false,
14383
+ "pathParams": [
14384
+ {
14385
+ "name": "id",
14386
+ "sdkName": "id"
14387
+ }
14388
+ ],
14389
+ "query": [
14390
+ {
14391
+ "name": "repository",
14392
+ "type": "string",
14393
+ "required": false,
14394
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14395
+ },
14396
+ {
14397
+ "name": "page_size",
14398
+ "type": "integer",
14399
+ "required": false,
14400
+ "description": "Records per page; defaults to 30, maximum 100."
14401
+ },
14402
+ {
14403
+ "name": "page_token",
14404
+ "type": "string",
14405
+ "required": false,
14406
+ "description": "Cursor returned as next_page_token; omit for the first page."
14407
+ }
14408
+ ]
14409
+ },
14410
+ {
14411
+ "resource": "ticket.comments.reactions",
14412
+ "method": "create",
14413
+ "summary": "Create or add reactions",
14414
+ "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.",
14415
+ "http": "POST",
14416
+ "path": "/ticket/v1/comments/{id}/reactions",
14417
+ "streaming": "no",
14418
+ "pagination": false,
14419
+ "pathParams": [
14420
+ {
14421
+ "name": "id",
14422
+ "sdkName": "id"
14423
+ }
14424
+ ],
14425
+ "query": [
14426
+ {
14427
+ "name": "repository",
14428
+ "type": "string",
14429
+ "required": false,
14430
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14431
+ }
14432
+ ],
14433
+ "body": {
14434
+ "required": true,
14435
+ "fields": [
14436
+ {
14437
+ "name": "content",
14438
+ "type": "string",
14439
+ "enum": [
14440
+ "+1",
14441
+ "-1",
14442
+ "laugh",
14443
+ "confused",
14444
+ "heart",
14445
+ "hooray",
14446
+ "eyes",
14447
+ "rocket"
14448
+ ],
14449
+ "required": true,
14450
+ "description": "Reaction to add or remove: +1 approves, -1 disapproves, laugh, confused, heart, hooray, eyes, or rocket."
14451
+ }
14452
+ ]
14453
+ }
14454
+ },
14455
+ {
14456
+ "resource": "ticket.comments.reactions",
14457
+ "method": "delete",
14458
+ "summary": "Remove reactions",
14459
+ "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.",
14460
+ "http": "DELETE",
14461
+ "path": "/ticket/v1/comments/{id}/reactions/{content}",
14462
+ "streaming": "no",
14463
+ "pagination": false,
14464
+ "pathParams": [
14465
+ {
14466
+ "name": "id",
14467
+ "sdkName": "id"
14468
+ },
14469
+ {
14470
+ "name": "content",
14471
+ "sdkName": "content"
14472
+ }
14473
+ ],
14474
+ "query": [
14475
+ {
14476
+ "name": "repository",
14477
+ "type": "string",
14478
+ "required": false,
14479
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14480
+ }
14481
+ ]
14482
+ },
14483
+ {
14484
+ "resource": "ticket.labels",
14485
+ "method": "list",
14486
+ "summary": "List labels",
14487
+ "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.",
14488
+ "http": "GET",
14489
+ "path": "/ticket/v1/labels",
14490
+ "streaming": "no",
14491
+ "pagination": false,
14492
+ "pathParams": [],
14493
+ "query": [
14494
+ {
14495
+ "name": "repository",
14496
+ "type": "string",
14497
+ "required": false,
14498
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14499
+ },
14500
+ {
14501
+ "name": "page_size",
14502
+ "type": "integer",
14503
+ "required": false,
14504
+ "description": "Records per page; defaults to 30, maximum 100."
14505
+ },
14506
+ {
14507
+ "name": "page_token",
14508
+ "type": "string",
14509
+ "required": false,
14510
+ "description": "Cursor returned as next_page_token; omit for the first page."
14511
+ }
14512
+ ]
14513
+ },
14514
+ {
14515
+ "resource": "ticket.labels",
14516
+ "method": "create",
14517
+ "summary": "Create or add labels",
14518
+ "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.",
14519
+ "http": "POST",
14520
+ "path": "/ticket/v1/labels",
14521
+ "streaming": "no",
14522
+ "pagination": false,
14523
+ "pathParams": [],
14524
+ "query": [
14525
+ {
14526
+ "name": "repository",
14527
+ "type": "string",
14528
+ "required": false,
14529
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14530
+ }
14531
+ ],
14532
+ "body": {
14533
+ "required": true,
14534
+ "fields": [
14535
+ {
14536
+ "name": "name",
14537
+ "type": "string",
14538
+ "required": true,
14539
+ "description": "Case-insensitive label name within the repository."
14540
+ },
14541
+ {
14542
+ "name": "color",
14543
+ "type": "string",
14544
+ "required": true,
14545
+ "description": "Six hexadecimal digits without #."
14546
+ },
14547
+ {
14548
+ "name": "description",
14549
+ "type": "string",
14550
+ "required": false,
14551
+ "description": "Label's purpose."
14552
+ }
14553
+ ]
14554
+ }
14555
+ },
14556
+ {
14557
+ "resource": "ticket.labels",
14558
+ "method": "delete",
14559
+ "summary": "Remove labels",
14560
+ "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.",
14561
+ "http": "DELETE",
14562
+ "path": "/ticket/v1/labels/{name}",
14563
+ "streaming": "no",
14564
+ "pagination": false,
14565
+ "pathParams": [
14566
+ {
14567
+ "name": "name",
14568
+ "sdkName": "name"
14569
+ }
14570
+ ],
14571
+ "query": [
14572
+ {
14573
+ "name": "repository",
14574
+ "type": "string",
14575
+ "required": false,
14576
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14577
+ }
14578
+ ]
14579
+ },
14580
+ {
14581
+ "resource": "ticket.labels",
14582
+ "method": "update",
14583
+ "summary": "Update labels",
14584
+ "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.",
14585
+ "http": "PATCH",
14586
+ "path": "/ticket/v1/labels/{name}",
14587
+ "streaming": "no",
14588
+ "pagination": false,
14589
+ "pathParams": [
14590
+ {
14591
+ "name": "name",
14592
+ "sdkName": "name"
14593
+ }
14594
+ ],
14595
+ "query": [
14596
+ {
14597
+ "name": "repository",
14598
+ "type": "string",
14599
+ "required": false,
14600
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14601
+ }
14602
+ ],
14603
+ "body": {
14604
+ "required": true,
14605
+ "fields": [
14606
+ {
14607
+ "name": "color",
14608
+ "type": "string",
14609
+ "required": false,
14610
+ "description": "Six hexadecimal digits without #."
14611
+ },
14612
+ {
14613
+ "name": "description",
14614
+ "type": "string",
14615
+ "required": false,
14616
+ "description": "Label's purpose."
14617
+ },
14618
+ {
14619
+ "name": "new_name",
14620
+ "type": "string",
14621
+ "required": false,
14622
+ "description": "Case-insensitive label name within the repository."
14623
+ }
14624
+ ]
14625
+ }
14626
+ },
14627
+ {
14628
+ "resource": "ticket.milestones",
14629
+ "method": "list",
14630
+ "summary": "List milestones",
14631
+ "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.",
14632
+ "http": "GET",
14633
+ "path": "/ticket/v1/milestones",
14634
+ "streaming": "no",
14635
+ "pagination": false,
14636
+ "pathParams": [],
14637
+ "query": [
14638
+ {
14639
+ "name": "repository",
14640
+ "type": "string",
14641
+ "required": false,
14642
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14643
+ },
14644
+ {
14645
+ "name": "page_size",
14646
+ "type": "integer",
14647
+ "required": false,
14648
+ "description": "Records per page; defaults to 30, maximum 100."
14649
+ },
14650
+ {
14651
+ "name": "page_token",
14652
+ "type": "string",
14653
+ "required": false,
14654
+ "description": "Cursor returned as next_page_token; omit for the first page."
14655
+ }
14656
+ ]
14657
+ },
14658
+ {
14659
+ "resource": "ticket.milestones",
14660
+ "method": "create",
14661
+ "summary": "Create or add milestones",
14662
+ "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.",
14663
+ "http": "POST",
14664
+ "path": "/ticket/v1/milestones",
14665
+ "streaming": "no",
14666
+ "pagination": false,
14667
+ "pathParams": [],
14668
+ "query": [
14669
+ {
14670
+ "name": "repository",
14671
+ "type": "string",
14672
+ "required": false,
14673
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14674
+ }
14675
+ ],
14676
+ "body": {
14677
+ "required": true,
14678
+ "fields": [
14679
+ {
14680
+ "name": "title",
14681
+ "type": "string",
14682
+ "required": true,
14683
+ "description": "Short title, at most 256 Unicode characters."
14684
+ },
14685
+ {
14686
+ "name": "description",
14687
+ "type": "string",
14688
+ "required": false,
14689
+ "description": "Milestone description."
14690
+ },
14691
+ {
14692
+ "name": "due_on",
14693
+ "type": "string",
14694
+ "required": false,
14695
+ "description": "Due date, or null if unset."
14696
+ },
14697
+ {
14698
+ "name": "state",
14699
+ "type": "string",
14700
+ "enum": [
14701
+ "open",
14702
+ "closed"
14703
+ ],
14704
+ "required": false,
14705
+ "description": "open means actionable; closed means resolved or declined."
14706
+ }
14707
+ ]
14708
+ }
14709
+ },
14710
+ {
14711
+ "resource": "ticket.milestones",
14712
+ "method": "delete",
14713
+ "summary": "Remove milestones",
14714
+ "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.",
14715
+ "http": "DELETE",
14716
+ "path": "/ticket/v1/milestones/{number}",
14717
+ "streaming": "no",
14718
+ "pagination": false,
14719
+ "pathParams": [
14720
+ {
14721
+ "name": "number",
14722
+ "sdkName": "number"
14723
+ }
14724
+ ],
14725
+ "query": [
14726
+ {
14727
+ "name": "repository",
14728
+ "type": "string",
14729
+ "required": false,
14730
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14731
+ }
14732
+ ]
14733
+ },
14734
+ {
14735
+ "resource": "ticket.milestones",
14736
+ "method": "retrieve",
14737
+ "summary": "Read milestones",
14738
+ "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.",
14739
+ "http": "GET",
14740
+ "path": "/ticket/v1/milestones/{number}",
14741
+ "streaming": "no",
14742
+ "pagination": false,
14743
+ "pathParams": [
14744
+ {
14745
+ "name": "number",
14746
+ "sdkName": "number"
14747
+ }
14748
+ ],
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
+ },
14758
+ {
14759
+ "resource": "ticket.milestones",
14760
+ "method": "update",
14761
+ "summary": "Update milestones",
14762
+ "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.",
14763
+ "http": "PATCH",
14764
+ "path": "/ticket/v1/milestones/{number}",
14765
+ "streaming": "no",
14766
+ "pagination": false,
14767
+ "pathParams": [
14768
+ {
14769
+ "name": "number",
14770
+ "sdkName": "number"
14771
+ }
14772
+ ],
14773
+ "query": [
14774
+ {
14775
+ "name": "repository",
14776
+ "type": "string",
14777
+ "required": false,
14778
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14779
+ }
14780
+ ],
14781
+ "body": {
14782
+ "required": true,
14783
+ "fields": [
14784
+ {
14785
+ "name": "title",
14786
+ "type": "string",
14787
+ "required": false,
14788
+ "description": "Short title, at most 256 Unicode characters."
14789
+ },
14790
+ {
14791
+ "name": "description",
14792
+ "type": "string",
14793
+ "required": false,
14794
+ "description": "Milestone description."
14795
+ },
14796
+ {
14797
+ "name": "due_on",
14798
+ "type": "string",
14799
+ "required": false,
14800
+ "description": "Due date, or null if unset."
14801
+ },
14802
+ {
14803
+ "name": "state",
14804
+ "type": "string",
14805
+ "enum": [
14806
+ "open",
14807
+ "closed"
14808
+ ],
14809
+ "required": false,
14810
+ "description": "open means actionable; closed means resolved or declined."
14811
+ }
14812
+ ]
14813
+ }
14814
+ },
14815
+ {
14816
+ "resource": "ticket.repositories",
14817
+ "method": "list",
14818
+ "summary": "List repositories",
14819
+ "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.",
14820
+ "http": "GET",
14821
+ "path": "/ticket/v1/repositories",
14822
+ "streaming": "no",
14823
+ "pagination": false,
14824
+ "pathParams": [],
14825
+ "query": [
14826
+ {
14827
+ "name": "page_size",
14828
+ "type": "integer",
14829
+ "required": false,
14830
+ "description": "Records per page; defaults to 30, maximum 100."
14831
+ },
14832
+ {
14833
+ "name": "page_token",
14834
+ "type": "string",
14835
+ "required": false,
14836
+ "description": "Cursor returned as next_page_token; omit for the first page."
14837
+ }
14838
+ ]
14839
+ },
14840
+ {
14841
+ "resource": "ticket.tickets",
14842
+ "method": "list",
14843
+ "summary": "List tickets",
14844
+ "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.",
14845
+ "http": "GET",
14846
+ "path": "/ticket/v1/tickets",
14847
+ "streaming": "no",
14848
+ "pagination": false,
14849
+ "pathParams": [],
14850
+ "query": [
14851
+ {
14852
+ "name": "repository",
14853
+ "type": "string",
14854
+ "required": false,
14855
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14856
+ },
14857
+ {
14858
+ "name": "page_size",
14859
+ "type": "integer",
14860
+ "required": false,
14861
+ "description": "Records per page; defaults to 30, maximum 100."
14862
+ },
14863
+ {
14864
+ "name": "page_token",
14865
+ "type": "string",
14866
+ "required": false,
14867
+ "description": "Cursor returned as next_page_token; omit for the first page."
14868
+ },
14869
+ {
14870
+ "name": "filter",
14871
+ "type": "string",
14872
+ "required": false,
14873
+ "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."
14874
+ }
14875
+ ]
14876
+ },
14877
+ {
14878
+ "resource": "ticket.tickets",
14879
+ "method": "create",
14880
+ "summary": "Create or add tickets",
14881
+ "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.",
14882
+ "http": "POST",
14883
+ "path": "/ticket/v1/tickets",
14884
+ "streaming": "no",
14885
+ "pagination": false,
14886
+ "pathParams": [],
14887
+ "query": [
14888
+ {
14889
+ "name": "repository",
14890
+ "type": "string",
14891
+ "required": false,
14892
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14893
+ }
14894
+ ],
14895
+ "body": {
14896
+ "required": true,
14897
+ "fields": [
14898
+ {
14899
+ "name": "title",
14900
+ "type": "string",
14901
+ "required": true,
14902
+ "description": "Short title, at most 256 Unicode characters."
14903
+ },
14904
+ {
14905
+ "name": "body",
14906
+ "type": "string",
14907
+ "required": false,
14908
+ "description": "Markdown text, at most 65536 characters."
14909
+ },
14910
+ {
14911
+ "name": "type",
14912
+ "type": "string",
14913
+ "required": false,
14914
+ "description": "Built-in type name; null clears an existing type."
14915
+ },
14916
+ {
14917
+ "name": "labels",
14918
+ "type": "array",
14919
+ "itemType": "string",
14920
+ "required": false,
14921
+ "description": "Labels attached to this ticket; updates replace the complete list."
14922
+ },
14923
+ {
14924
+ "name": "assignees",
14925
+ "type": "array",
14926
+ "itemType": "string",
14927
+ "required": false,
14928
+ "description": "Complete assignee list, at most ten."
14929
+ },
14930
+ {
14931
+ "name": "milestone",
14932
+ "type": "integer",
14933
+ "required": false,
14934
+ "description": "Repository-local number returned by create or list; distinct from the object's id."
14935
+ },
14936
+ {
14937
+ "name": "parent",
14938
+ "type": "integer",
14939
+ "required": false,
14940
+ "description": "Repository-local number returned by create or list; distinct from the object's id."
14941
+ }
14942
+ ]
14943
+ }
14944
+ },
14945
+ {
14946
+ "resource": "ticket.tickets",
14947
+ "method": "retrieve",
14948
+ "summary": "Read tickets",
14949
+ "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.",
14950
+ "http": "GET",
14951
+ "path": "/ticket/v1/tickets/{number}",
14952
+ "streaming": "no",
14953
+ "pagination": false,
14954
+ "pathParams": [
14955
+ {
14956
+ "name": "number",
14957
+ "sdkName": "number"
14958
+ }
14959
+ ],
14960
+ "query": [
14961
+ {
14962
+ "name": "repository",
14963
+ "type": "string",
14964
+ "required": false,
14965
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14966
+ }
14967
+ ]
14968
+ },
14969
+ {
14970
+ "resource": "ticket.tickets",
14971
+ "method": "update",
14972
+ "summary": "Update tickets",
14973
+ "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.",
14974
+ "http": "PATCH",
14975
+ "path": "/ticket/v1/tickets/{number}",
14976
+ "streaming": "no",
14977
+ "pagination": false,
14978
+ "pathParams": [
14979
+ {
14980
+ "name": "number",
14981
+ "sdkName": "number"
14982
+ }
14983
+ ],
14984
+ "query": [
14985
+ {
14986
+ "name": "repository",
14987
+ "type": "string",
14988
+ "required": false,
14989
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
14990
+ }
14991
+ ],
14992
+ "body": {
14993
+ "required": true,
14994
+ "fields": [
14995
+ {
14996
+ "name": "title",
14997
+ "type": "string",
14998
+ "required": false,
14999
+ "description": "Short title, at most 256 Unicode characters."
15000
+ },
15001
+ {
15002
+ "name": "body",
15003
+ "type": "string",
15004
+ "required": false,
15005
+ "description": "Markdown text, at most 65536 characters."
15006
+ },
15007
+ {
15008
+ "name": "type",
15009
+ "type": "string",
15010
+ "required": false,
15011
+ "description": "Built-in type name; null clears an existing type."
15012
+ },
15013
+ {
15014
+ "name": "labels",
15015
+ "type": "array",
15016
+ "itemType": "string",
15017
+ "required": false,
15018
+ "description": "Labels attached to this ticket; updates replace the complete list."
15019
+ },
15020
+ {
15021
+ "name": "assignees",
15022
+ "type": "array",
15023
+ "itemType": "string",
15024
+ "required": false,
15025
+ "description": "Complete assignee list, at most ten."
15026
+ },
15027
+ {
15028
+ "name": "milestone",
15029
+ "type": "integer",
15030
+ "required": false,
15031
+ "description": "Repository-local number returned by create or list; distinct from the object's id."
15032
+ },
15033
+ {
15034
+ "name": "state",
15035
+ "type": "string",
15036
+ "enum": [
15037
+ "open",
15038
+ "closed"
15039
+ ],
15040
+ "required": false,
15041
+ "description": "open means actionable; closed means resolved or declined."
15042
+ },
15043
+ {
15044
+ "name": "state_reason",
15045
+ "type": "string",
15046
+ "enum": [
15047
+ "completed",
15048
+ "not_planned",
15049
+ "duplicate"
15050
+ ],
15051
+ "required": false,
15052
+ "description": "Reason for closing: completed resolves, not_planned declines, duplicate marks a duplicate."
15053
+ },
15054
+ {
15055
+ "name": "duplicate_of",
15056
+ "type": "integer",
15057
+ "required": false,
15058
+ "description": "Repository-local number returned by create or list; distinct from the object's id."
15059
+ }
15060
+ ]
15061
+ }
15062
+ },
15063
+ {
15064
+ "resource": "ticket.tickets.comments",
15065
+ "method": "list",
15066
+ "summary": "List comments",
15067
+ "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.",
15068
+ "http": "GET",
15069
+ "path": "/ticket/v1/tickets/{number}/comments",
15070
+ "streaming": "no",
15071
+ "pagination": false,
15072
+ "pathParams": [
15073
+ {
15074
+ "name": "number",
15075
+ "sdkName": "number"
15076
+ }
15077
+ ],
15078
+ "query": [
15079
+ {
15080
+ "name": "repository",
15081
+ "type": "string",
15082
+ "required": false,
15083
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15084
+ },
15085
+ {
15086
+ "name": "page_size",
15087
+ "type": "integer",
15088
+ "required": false,
15089
+ "description": "Records per page; defaults to 30, maximum 100."
15090
+ },
15091
+ {
15092
+ "name": "page_token",
15093
+ "type": "string",
15094
+ "required": false,
15095
+ "description": "Cursor returned as next_page_token; omit for the first page."
15096
+ }
15097
+ ]
15098
+ },
15099
+ {
15100
+ "resource": "ticket.tickets.comments",
15101
+ "method": "create",
15102
+ "summary": "Create or add comments",
15103
+ "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.",
15104
+ "http": "POST",
15105
+ "path": "/ticket/v1/tickets/{number}/comments",
15106
+ "streaming": "no",
15107
+ "pagination": false,
15108
+ "pathParams": [
15109
+ {
15110
+ "name": "number",
15111
+ "sdkName": "number"
15112
+ }
15113
+ ],
15114
+ "query": [
15115
+ {
15116
+ "name": "repository",
15117
+ "type": "string",
15118
+ "required": false,
15119
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15120
+ }
15121
+ ],
15122
+ "body": {
15123
+ "required": true,
15124
+ "fields": [
15125
+ {
15126
+ "name": "body",
15127
+ "type": "string",
15128
+ "required": true,
15129
+ "description": "Markdown text, at most 65536 characters."
15130
+ },
15131
+ {
15132
+ "name": "in_reply_to",
15133
+ "type": "string",
15134
+ "required": false,
15135
+ "description": "Opaque identifier returned by this resource's create or list operation."
15136
+ }
15137
+ ]
15138
+ }
15139
+ },
15140
+ {
15141
+ "resource": "ticket.tickets.dependencies",
15142
+ "method": "retrieveBlockedBy",
15143
+ "summary": "List blocked by",
15144
+ "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.",
15145
+ "http": "GET",
15146
+ "path": "/ticket/v1/tickets/{number}/dependencies/blocked_by",
15147
+ "streaming": "no",
15148
+ "pagination": false,
15149
+ "pathParams": [
15150
+ {
15151
+ "name": "number",
15152
+ "sdkName": "number"
15153
+ }
15154
+ ],
15155
+ "query": [
15156
+ {
15157
+ "name": "repository",
15158
+ "type": "string",
15159
+ "required": false,
15160
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15161
+ },
15162
+ {
15163
+ "name": "page_size",
15164
+ "type": "integer",
15165
+ "required": false,
15166
+ "description": "Records per page; defaults to 30, maximum 100."
15167
+ },
15168
+ {
15169
+ "name": "page_token",
15170
+ "type": "string",
15171
+ "required": false,
15172
+ "description": "Cursor returned as next_page_token; omit for the first page."
15173
+ }
15174
+ ]
15175
+ },
15176
+ {
15177
+ "resource": "ticket.tickets.dependencies.blockedBy",
15178
+ "method": "create",
15179
+ "summary": "Create or add blocked by",
15180
+ "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.",
15181
+ "http": "POST",
15182
+ "path": "/ticket/v1/tickets/{number}/dependencies/blocked_by",
15183
+ "streaming": "no",
15184
+ "pagination": false,
15185
+ "pathParams": [
15186
+ {
15187
+ "name": "number",
15188
+ "sdkName": "number"
15189
+ }
15190
+ ],
15191
+ "query": [
15192
+ {
15193
+ "name": "repository",
15194
+ "type": "string",
15195
+ "required": false,
15196
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15197
+ }
15198
+ ],
15199
+ "body": {
15200
+ "required": true,
15201
+ "fields": [
15202
+ {
15203
+ "name": "blocked_by",
15204
+ "type": "integer",
15205
+ "required": true,
15206
+ "description": "Repository-local number returned by create or list; distinct from the object's id."
15207
+ }
15208
+ ]
15209
+ }
15210
+ },
15211
+ {
15212
+ "resource": "ticket.tickets.dependencies.blockedBy",
15213
+ "method": "delete",
15214
+ "summary": "Remove blocked by",
15215
+ "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.",
15216
+ "http": "DELETE",
15217
+ "path": "/ticket/v1/tickets/{number}/dependencies/blocked_by/{n}",
15218
+ "streaming": "no",
15219
+ "pagination": false,
15220
+ "pathParams": [
15221
+ {
15222
+ "name": "number",
15223
+ "sdkName": "number"
15224
+ },
15225
+ {
15226
+ "name": "n",
15227
+ "sdkName": "n"
15228
+ }
15229
+ ],
15230
+ "query": [
15231
+ {
15232
+ "name": "repository",
15233
+ "type": "string",
15234
+ "required": false,
15235
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15236
+ }
15237
+ ]
15238
+ },
15239
+ {
15240
+ "resource": "ticket.tickets.dependencies",
15241
+ "method": "retrieveBlocking",
15242
+ "summary": "List blocking",
15243
+ "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.",
15244
+ "http": "GET",
15245
+ "path": "/ticket/v1/tickets/{number}/dependencies/blocking",
15246
+ "streaming": "no",
15247
+ "pagination": false,
15248
+ "pathParams": [
15249
+ {
15250
+ "name": "number",
15251
+ "sdkName": "number"
15252
+ }
15253
+ ],
15254
+ "query": [
15255
+ {
15256
+ "name": "repository",
15257
+ "type": "string",
15258
+ "required": false,
15259
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15260
+ },
15261
+ {
15262
+ "name": "page_size",
15263
+ "type": "integer",
15264
+ "required": false,
15265
+ "description": "Records per page; defaults to 30, maximum 100."
15266
+ },
15267
+ {
15268
+ "name": "page_token",
15269
+ "type": "string",
15270
+ "required": false,
15271
+ "description": "Cursor returned as next_page_token; omit for the first page."
15272
+ }
15273
+ ]
15274
+ },
15275
+ {
15276
+ "resource": "ticket.tickets.events",
15277
+ "method": "list",
15278
+ "summary": "List events",
15279
+ "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.",
15280
+ "http": "GET",
15281
+ "path": "/ticket/v1/tickets/{number}/events",
15282
+ "streaming": "no",
15283
+ "pagination": false,
15284
+ "pathParams": [
15285
+ {
15286
+ "name": "number",
15287
+ "sdkName": "number"
15288
+ }
15289
+ ],
15290
+ "query": [
15291
+ {
15292
+ "name": "repository",
15293
+ "type": "string",
15294
+ "required": false,
15295
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15296
+ },
15297
+ {
15298
+ "name": "page_size",
15299
+ "type": "integer",
15300
+ "required": false,
15301
+ "description": "Records per page; defaults to 30, maximum 100."
15302
+ },
15303
+ {
15304
+ "name": "page_token",
15305
+ "type": "string",
15306
+ "required": false,
15307
+ "description": "Cursor returned as next_page_token; omit for the first page."
15308
+ }
15309
+ ]
15310
+ },
15311
+ {
15312
+ "resource": "ticket.tickets",
15313
+ "method": "deleteLock",
15314
+ "summary": "Remove lock",
15315
+ "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.",
15316
+ "http": "DELETE",
15317
+ "path": "/ticket/v1/tickets/{number}/lock",
15318
+ "streaming": "no",
15319
+ "pagination": false,
15320
+ "pathParams": [
15321
+ {
15322
+ "name": "number",
15323
+ "sdkName": "number"
15324
+ }
15325
+ ],
15326
+ "query": [
15327
+ {
15328
+ "name": "repository",
15329
+ "type": "string",
15330
+ "required": false,
15331
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15332
+ }
15333
+ ]
15334
+ },
15335
+ {
15336
+ "resource": "ticket.tickets",
15337
+ "method": "updateLock",
15338
+ "summary": "Update lock",
15339
+ "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.",
15340
+ "http": "PUT",
15341
+ "path": "/ticket/v1/tickets/{number}/lock",
15342
+ "streaming": "no",
15343
+ "pagination": false,
15344
+ "pathParams": [
15345
+ {
15346
+ "name": "number",
15347
+ "sdkName": "number"
15348
+ }
15349
+ ],
15350
+ "query": [
15351
+ {
15352
+ "name": "repository",
15353
+ "type": "string",
15354
+ "required": false,
15355
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15356
+ }
15357
+ ],
15358
+ "body": {
15359
+ "required": false,
15360
+ "fields": [
15361
+ {
15362
+ "name": "lock_reason",
15363
+ "type": "string",
15364
+ "enum": [
15365
+ "off-topic",
15366
+ "too heated",
15367
+ "resolved",
15368
+ "spam"
15369
+ ],
15370
+ "required": false,
15371
+ "description": "Reason for locking: off-topic, too heated, resolved, or spam."
15372
+ }
15373
+ ]
15374
+ }
15375
+ },
15376
+ {
15377
+ "resource": "ticket.tickets.reactions",
15378
+ "method": "list",
15379
+ "summary": "List reactions",
15380
+ "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.",
15381
+ "http": "GET",
15382
+ "path": "/ticket/v1/tickets/{number}/reactions",
15383
+ "streaming": "no",
15384
+ "pagination": false,
15385
+ "pathParams": [
15386
+ {
15387
+ "name": "number",
15388
+ "sdkName": "number"
15389
+ }
15390
+ ],
15391
+ "query": [
15392
+ {
15393
+ "name": "repository",
15394
+ "type": "string",
15395
+ "required": false,
15396
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15397
+ },
15398
+ {
15399
+ "name": "page_size",
15400
+ "type": "integer",
15401
+ "required": false,
15402
+ "description": "Records per page; defaults to 30, maximum 100."
15403
+ },
15404
+ {
15405
+ "name": "page_token",
15406
+ "type": "string",
15407
+ "required": false,
15408
+ "description": "Cursor returned as next_page_token; omit for the first page."
15409
+ }
15410
+ ]
15411
+ },
15412
+ {
15413
+ "resource": "ticket.tickets.reactions",
15414
+ "method": "create",
15415
+ "summary": "Create or add reactions",
15416
+ "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.",
15417
+ "http": "POST",
15418
+ "path": "/ticket/v1/tickets/{number}/reactions",
15419
+ "streaming": "no",
15420
+ "pagination": false,
15421
+ "pathParams": [
15422
+ {
15423
+ "name": "number",
15424
+ "sdkName": "number"
15425
+ }
15426
+ ],
15427
+ "query": [
15428
+ {
15429
+ "name": "repository",
15430
+ "type": "string",
15431
+ "required": false,
15432
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15433
+ }
15434
+ ],
15435
+ "body": {
15436
+ "required": true,
15437
+ "fields": [
15438
+ {
15439
+ "name": "content",
15440
+ "type": "string",
15441
+ "enum": [
15442
+ "+1",
15443
+ "-1",
15444
+ "laugh",
15445
+ "confused",
15446
+ "heart",
15447
+ "hooray",
15448
+ "eyes",
15449
+ "rocket"
15450
+ ],
15451
+ "required": true,
15452
+ "description": "Reaction to add or remove: +1 approves, -1 disapproves, laugh, confused, heart, hooray, eyes, or rocket."
15453
+ }
15454
+ ]
15455
+ }
15456
+ },
15457
+ {
15458
+ "resource": "ticket.tickets.reactions",
15459
+ "method": "delete",
15460
+ "summary": "Remove reactions",
15461
+ "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.",
15462
+ "http": "DELETE",
15463
+ "path": "/ticket/v1/tickets/{number}/reactions/{content}",
15464
+ "streaming": "no",
15465
+ "pagination": false,
15466
+ "pathParams": [
15467
+ {
15468
+ "name": "number",
15469
+ "sdkName": "number"
15470
+ },
15471
+ {
15472
+ "name": "content",
15473
+ "sdkName": "content"
15474
+ }
15475
+ ],
15476
+ "query": [
15477
+ {
15478
+ "name": "repository",
15479
+ "type": "string",
15480
+ "required": false,
15481
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15482
+ }
15483
+ ]
15484
+ },
15485
+ {
15486
+ "resource": "ticket.tickets.relations",
15487
+ "method": "list",
15488
+ "summary": "List relations",
15489
+ "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.",
15490
+ "http": "GET",
15491
+ "path": "/ticket/v1/tickets/{number}/relations",
15492
+ "streaming": "no",
15493
+ "pagination": false,
15494
+ "pathParams": [
15495
+ {
15496
+ "name": "number",
15497
+ "sdkName": "number"
15498
+ }
15499
+ ],
15500
+ "query": [
15501
+ {
15502
+ "name": "repository",
15503
+ "type": "string",
15504
+ "required": false,
15505
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15506
+ },
15507
+ {
15508
+ "name": "page_size",
15509
+ "type": "integer",
15510
+ "required": false,
15511
+ "description": "Records per page; defaults to 30, maximum 100."
15512
+ },
15513
+ {
15514
+ "name": "page_token",
15515
+ "type": "string",
15516
+ "required": false,
15517
+ "description": "Cursor returned as next_page_token; omit for the first page."
15518
+ }
15519
+ ]
15520
+ },
15521
+ {
15522
+ "resource": "ticket.tickets.relations",
15523
+ "method": "create",
15524
+ "summary": "Create or add relations",
15525
+ "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.",
15526
+ "http": "POST",
15527
+ "path": "/ticket/v1/tickets/{number}/relations",
15528
+ "streaming": "no",
15529
+ "pagination": false,
15530
+ "pathParams": [
15531
+ {
15532
+ "name": "number",
15533
+ "sdkName": "number"
15534
+ }
15535
+ ],
15536
+ "query": [
15537
+ {
15538
+ "name": "repository",
15539
+ "type": "string",
15540
+ "required": false,
15541
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15542
+ }
15543
+ ],
15544
+ "body": {
15545
+ "required": true,
15546
+ "fields": [
15547
+ {
15548
+ "name": "relates_to",
15549
+ "type": "integer",
15550
+ "required": true,
15551
+ "description": "Repository-local number returned by create or list; distinct from the object's id."
15552
+ }
15553
+ ]
15554
+ }
15555
+ },
15556
+ {
15557
+ "resource": "ticket.tickets.relations",
15558
+ "method": "delete",
15559
+ "summary": "Remove relations",
15560
+ "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.",
15561
+ "http": "DELETE",
15562
+ "path": "/ticket/v1/tickets/{number}/relations/{n}",
15563
+ "streaming": "no",
15564
+ "pagination": false,
15565
+ "pathParams": [
15566
+ {
15567
+ "name": "number",
15568
+ "sdkName": "number"
15569
+ },
15570
+ {
15571
+ "name": "n",
15572
+ "sdkName": "n"
15573
+ }
15574
+ ],
15575
+ "query": [
15576
+ {
15577
+ "name": "repository",
15578
+ "type": "string",
15579
+ "required": false,
15580
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15581
+ }
15582
+ ]
15583
+ },
15584
+ {
15585
+ "resource": "ticket.tickets.subTickets",
15586
+ "method": "list",
15587
+ "summary": "List sub tickets",
15588
+ "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.",
15589
+ "http": "GET",
15590
+ "path": "/ticket/v1/tickets/{number}/sub_tickets",
15591
+ "streaming": "no",
15592
+ "pagination": false,
15593
+ "pathParams": [
15594
+ {
15595
+ "name": "number",
15596
+ "sdkName": "number"
15597
+ }
15598
+ ],
15599
+ "query": [
15600
+ {
15601
+ "name": "repository",
15602
+ "type": "string",
15603
+ "required": false,
15604
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15605
+ },
15606
+ {
15607
+ "name": "page_size",
15608
+ "type": "integer",
15609
+ "required": false,
15610
+ "description": "Records per page; defaults to 30, maximum 100."
15611
+ },
15612
+ {
15613
+ "name": "page_token",
15614
+ "type": "string",
15615
+ "required": false,
15616
+ "description": "Cursor returned as next_page_token; omit for the first page."
15617
+ }
15618
+ ]
15619
+ },
15620
+ {
15621
+ "resource": "ticket.tickets.subTickets",
15622
+ "method": "create",
15623
+ "summary": "Create or add sub tickets",
15624
+ "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.",
15625
+ "http": "POST",
15626
+ "path": "/ticket/v1/tickets/{number}/sub_tickets",
15627
+ "streaming": "no",
15628
+ "pagination": false,
15629
+ "pathParams": [
15630
+ {
15631
+ "name": "number",
15632
+ "sdkName": "number"
15633
+ }
15634
+ ],
15635
+ "query": [
15636
+ {
15637
+ "name": "repository",
15638
+ "type": "string",
15639
+ "required": false,
15640
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15641
+ }
15642
+ ],
15643
+ "body": {
15644
+ "required": true,
15645
+ "fields": [
15646
+ {
15647
+ "name": "child",
15648
+ "type": "integer",
15649
+ "required": true,
15650
+ "description": "Repository-local number returned by create or list; distinct from the object's id."
15651
+ },
15652
+ {
15653
+ "name": "replace_parent",
15654
+ "type": "boolean",
15655
+ "required": false,
15656
+ "description": "Allow replacing an existing parent."
15657
+ }
15658
+ ]
15659
+ }
15660
+ },
15661
+ {
15662
+ "resource": "ticket.tickets.subTickets",
15663
+ "method": "delete",
15664
+ "summary": "Remove sub tickets",
15665
+ "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.",
15666
+ "http": "DELETE",
15667
+ "path": "/ticket/v1/tickets/{number}/sub_tickets/{child}",
15668
+ "streaming": "no",
15669
+ "pagination": false,
15670
+ "pathParams": [
15671
+ {
15672
+ "name": "number",
15673
+ "sdkName": "number"
15674
+ },
15675
+ {
15676
+ "name": "child",
15677
+ "sdkName": "child"
15678
+ }
15679
+ ],
15680
+ "query": [
15681
+ {
15682
+ "name": "repository",
15683
+ "type": "string",
15684
+ "required": false,
15685
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15686
+ }
15687
+ ]
15688
+ },
15689
+ {
15690
+ "resource": "ticket.types",
15691
+ "method": "list",
15692
+ "summary": "Read types",
15693
+ "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.",
15694
+ "http": "GET",
15695
+ "path": "/ticket/v1/types",
15696
+ "streaming": "no",
15697
+ "pagination": false,
15698
+ "pathParams": [],
15699
+ "query": [
15700
+ {
15701
+ "name": "repository",
15702
+ "type": "string",
15703
+ "required": false,
15704
+ "description": "Repository id from GET /ticket/v1/repositories; omit for the default tickets container."
15705
+ }
15706
+ ]
15707
+ },
13125
15708
  {
13126
15709
  "resource": "vault.authorizations",
13127
15710
  "method": "create",