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

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.
@@ -4,7 +4,7 @@ export const operations = [
4
4
  "resource": "agent.agents",
5
5
  "method": "list",
6
6
  "summary": "List agents",
7
- "description": "List the agents of the workspace behind your API key, newest first, in pages of at most 100 (default 20). Use it to find an agent id before creating a session; to read one agent use agents.retrieve, to see its history use agents.versions.list. Archived agents are hidden unless include_archived is true. Filter kind=general or kind=personal for durable-computer agents or kind=service for per-session environments. Pass next_page from the response as page to read the next page; a null next_page means the end.",
7
+ "description": "List the agents of the workspace behind your API key, newest first, in pages of at most 100 (default 20). Use it to find an agent id before creating a session; to read one agent use agents.retrieve, to see its history use agents.versions.list. Archived agents are hidden unless include_archived is true. Filter kind=general or kind=personal for durable-computer agents, kind=service for per-session environments, or kind=assume for external MCP clients. Pass next_page from the response as page to read the next page; a null next_page means the end.",
8
8
  "http": "GET",
9
9
  "path": "/agent/v1/agents",
10
10
  "streaming": "no",
@@ -51,7 +51,8 @@ export const operations = [
51
51
  "enum": [
52
52
  "general",
53
53
  "personal",
54
- "service"
54
+ "service",
55
+ "assume"
55
56
  ],
56
57
  "required": false,
57
58
  "description": "Filter agents by their immutable kind, including agents created before kind was recorded."
@@ -62,7 +63,7 @@ export const operations = [
62
63
  "resource": "agent.agents",
63
64
  "method": "create",
64
65
  "summary": "Create agent",
65
- "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. skills attaches uploaded custom skills as [{type: \"custom\", skill_id, version?}] (skill_id from skills.create or skills.list; at most 20, no repeated skill_id). Omit version, or send \"latest\", to use the skill's newest version when a session starts. type anthropic returns 400. 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. model and every models.allowed entry must be a catalog model that can run an agent: an unknown id returns 400 \"model <id> is not in the model catalog\" and an embedding, image or speech model returns 400 \"model <id> cannot run an agent\". name is a label, not a unique key: 1 to 256 characters after trimming, no NUL or line breaks. avatar is trimmed, must not contain spaces or point at a loopback, private or internal host, and its scheme is stored in lowercase. script and workflow binding ids are stored in lowercase, the form automation matches; bindings together with environment_id null return 400 because bindings need a machine. Example: {\"name\":\"helper\",\"model\":{\"id\":\"deepseek-flash\"},\"tools\":[{\"type\":\"agent_toolset_20260401\"}]}.",
66
+ "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. skills attaches uploaded custom skills as [{type: \"custom\", skill_id, version?}] (skill_id from skills.create or skills.list; at most 20, no repeated skill_id). Omit version, or send \"latest\", to use the skill's newest version when a session starts. type anthropic returns 400. 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. model and every models.allowed entry must be a catalog model that can run an agent: an unknown id returns 400 \"model <id> is not in the model catalog\" and an embedding, image or speech model returns 400 \"model <id> cannot run an agent\". name is a label, not a unique key: 1 to 256 characters after trimming, no NUL or line breaks. avatar is trimmed, must not contain spaces or point at a loopback, private or internal host, and its scheme is stored in lowercase. script and workflow binding ids are stored in lowercase, the form automation matches; bindings together with environment_id null return 400 because bindings need a machine. Example: {\"name\":\"helper\",\"model\":{\"id\":\"deepseek-flash\"},\"tools\":[{\"type\":\"agent_toolset_20260401\"}]}. For kind assume, provide name without model, models, subagent_model, subagents or multiagent; omit computer_id to register a new computer named after the agent without starting an instance, or provide an existing computer_id; vault_ids are accepted, bindings and environment_id are refused. Drive assume agents over MCP at /agent/v1/agents/{id}/mcp.",
66
67
  "http": "POST",
67
68
  "path": "/agent/v1/agents",
68
69
  "streaming": "no",
@@ -75,8 +76,8 @@ export const operations = [
75
76
  {
76
77
  "name": "model",
77
78
  "type": "object",
78
- "required": true,
79
- "description": "A model id from the Praxis model catalog (`praxis.model.models.list`), or a `model_config` object for additional configuration control. Unlike Anthropic, Claude model ids other than those in the catalog are rejected."
79
+ "required": false,
80
+ "description": "A model id from the Praxis model catalog (`praxis.model.models.list`), or a `model_config` object for additional configuration control. Unlike Anthropic, Claude model ids other than those in the catalog are rejected. Forbidden and omitted on assume agents."
80
81
  },
81
82
  {
82
83
  "name": "name",
@@ -142,10 +143,11 @@ export const operations = [
142
143
  "enum": [
143
144
  "general",
144
145
  "personal",
145
- "service"
146
+ "service",
147
+ "assume"
146
148
  ],
147
149
  "required": false,
148
- "description": "Immutable agent kind. general and personal require computer_id; service cannot bind a computer. Omit on create to infer from computer_id (general with a computer, service without). On update, the same kind is ignored; changing kind or crossing its computer binding returns 400 invalid_request_error."
150
+ "description": "Immutable agent kind. general and personal require computer_id; service cannot bind a computer. Omit on create to infer from computer_id (general with a computer, service without). On update, the same kind is ignored; changing kind or crossing its computer binding returns 400 invalid_request_error. Assume agents use a durable computer driven over MCP without a conversation model; model, models, subagent_model, subagents and multiagent are forbidden and omitted."
149
151
  },
150
152
  {
151
153
  "name": "computer_id",
@@ -237,7 +239,7 @@ export const operations = [
237
239
  {
238
240
  "name": "agent_id",
239
241
  "sdkName": "agent_id",
240
- "description": "Agent id, as returned by agents.create or agents.list (for a session filter, the agent the session was created with). Not the agent name."
242
+ "description": "Agent id, as returned by agents.create or agents.list (for a session filter, the agent the session was created with). Not the agent name. Also accepts an 8-character identity number (0–9, A–Z); malformed, absent and foreign references return 404, and response ids always use agent_…."
241
243
  }
242
244
  ],
243
245
  "query": [
@@ -253,7 +255,7 @@ export const operations = [
253
255
  "resource": "agent.agents",
254
256
  "method": "update",
255
257
  "summary": "Update agent",
256
- "description": "Save configuration changes as a new immutable version. Send latest_version from a default retrieve or update response as the request version for optimistic concurrency; a stale value returns 409. apply defaults to true and makes the new version effective; apply false saves without changing active_version. The response contains the effective configuration, with version equal to active_version and latest_version naming the newest saved version. An unchanged configuration, including a note-only update, is a no-op returning 200 and the current effective version without creating or activating a version. version_note records up to 280 characters only when a configuration change creates a new version; null is equivalent to omission. Use agents.versions.apply to activate an existing saved 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. tools: [] removes every tool, while tools: null returns 400 (tools cannot be null; send [] to remove every tool). On update, omit skills to keep them, send an array to replace them, or send [] or null to clear them. skills attaches uploaded custom skills as [{type: \"custom\", skill_id, version?}] (skill_id from skills.create or skills.list; at most 20, no repeated skill_id). Omit version, or send \"latest\", to use the skill's newest version when a session starts. type anthropic returns 400.",
258
+ "description": "Save configuration changes as a new immutable version. Send latest_version from a default retrieve or update response as the request version for optimistic concurrency; a stale value returns 409. apply defaults to true and makes the new version effective; apply false saves without changing active_version. The response contains the effective configuration, with version equal to active_version and latest_version naming the newest saved version. An unchanged configuration, including a note-only update, is a no-op returning 200 and the current effective version without creating or activating a version. version_note records up to 280 characters only when a configuration change creates a new version; null is equivalent to omission. Use agents.versions.apply to activate an existing saved 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. tools: [] removes every tool, while tools: null returns 400 (tools cannot be null; send [] to remove every tool). On update, omit skills to keep them, send an array to replace them, or send [] or null to clear them. skills attaches uploaded custom skills as [{type: \"custom\", skill_id, version?}] (skill_id from skills.create or skills.list; at most 20, no repeated skill_id). Omit version, or send \"latest\", to use the skill's newest version when a session starts. type anthropic returns 400. Assume agents reject model, models, subagent_model, subagents and multiagent on every update; other fields follow the general agent rules, with vault_ids also accepted.",
257
259
  "http": "POST",
258
260
  "path": "/agent/v1/agents/{agent_id}",
259
261
  "streaming": "no",
@@ -262,7 +264,7 @@ export const operations = [
262
264
  {
263
265
  "name": "agent_id",
264
266
  "sdkName": "agent_id",
265
- "description": "Agent id, as returned by agents.create or agents.list (for a session filter, the agent the session was created with). Not the agent name."
267
+ "description": "Agent id, as returned by agents.create or agents.list (for a session filter, the agent the session was created with). Not the agent name. Also accepts an 8-character identity number (0–9, A–Z); malformed, absent and foreign references return 404, and response ids always use agent_…."
266
268
  }
267
269
  ],
268
270
  "query": [],
@@ -292,7 +294,7 @@ export const operations = [
292
294
  "name": "model",
293
295
  "type": "object",
294
296
  "required": false,
295
- "description": "A model id from the Praxis model catalog (`praxis.model.models.list`), or a `model_config` object for additional configuration control. Unlike Anthropic, Claude model ids other than those in the catalog are rejected."
297
+ "description": "A model id from the Praxis model catalog (`praxis.model.models.list`), or a `model_config` object for additional configuration control. Unlike Anthropic, Claude model ids other than those in the catalog are rejected. Forbidden and omitted on assume agents."
296
298
  },
297
299
  {
298
300
  "name": "multiagent",
@@ -357,10 +359,11 @@ export const operations = [
357
359
  "enum": [
358
360
  "general",
359
361
  "personal",
360
- "service"
362
+ "service",
363
+ "assume"
361
364
  ],
362
365
  "required": false,
363
- "description": "Immutable agent kind. general and personal require computer_id; service cannot bind a computer. Omit on create to infer from computer_id (general with a computer, service without). On update, the same kind is ignored; changing kind or crossing its computer binding returns 400 invalid_request_error."
366
+ "description": "Immutable agent kind. general and personal require computer_id; service cannot bind a computer. Omit on create to infer from computer_id (general with a computer, service without). On update, the same kind is ignored; changing kind or crossing its computer binding returns 400 invalid_request_error. Assume agents use a durable computer driven over MCP without a conversation model; model, models, subagent_model, subagents and multiagent are forbidden and omitted."
364
367
  },
365
368
  {
366
369
  "name": "computer_id",
@@ -452,7 +455,7 @@ export const operations = [
452
455
  {
453
456
  "name": "agent_id",
454
457
  "sdkName": "agent_id",
455
- "description": "Service agent id from agent creation or listing; with a customer access token, the agent the token was issued for."
458
+ "description": "Service agent id from agent creation or listing; with a customer access token, the agent the token was issued for. Also accepts an 8-character identity number (0–9, A–Z); malformed, absent and foreign references return 404, and response ids always use agent_…."
456
459
  }
457
460
  ],
458
461
  "query": []
@@ -470,7 +473,7 @@ export const operations = [
470
473
  {
471
474
  "name": "agent_id",
472
475
  "sdkName": "agent_id",
473
- "description": "Agent id, as returned by agents.create or agents.list (for a session filter, the agent the session was created with). Not the agent name."
476
+ "description": "Agent id, as returned by agents.create or agents.list (for a session filter, the agent the session was created with). Not the agent name. Also accepts an 8-character identity number (0–9, A–Z); malformed, absent and foreign references return 404, and response ids always use agent_…."
474
477
  }
475
478
  ],
476
479
  "query": []
@@ -488,7 +491,7 @@ export const operations = [
488
491
  {
489
492
  "name": "agent_id",
490
493
  "sdkName": "agent_id",
491
- "description": "Active service agent id from agent creation or listing."
494
+ "description": "Active service agent id from agent creation or listing. Also accepts an 8-character identity number (0–9, A–Z); malformed, absent and foreign references return 404, and response ids always use agent_…."
492
495
  }
493
496
  ],
494
497
  "query": [
@@ -541,7 +544,7 @@ export const operations = [
541
544
  {
542
545
  "name": "agent_id",
543
546
  "sdkName": "agent_id",
544
- "description": "Service agent id (agent_…) or its short identity number, from agent creation or listing."
547
+ "description": "Service agent id (agent_…) or its short identity number, from agent creation or listing. Also accepts an 8-character identity number (0–9, A–Z); malformed, absent and foreign references return 404, and response ids always use agent_…."
545
548
  }
546
549
  ],
547
550
  "query": [],
@@ -563,7 +566,7 @@ export const operations = [
563
566
  {
564
567
  "name": "agent_id",
565
568
  "sdkName": "agent_id",
566
- "description": "Service agent id (agent_…) or its short identity number, from agent creation or listing."
569
+ "description": "Service agent id (agent_…) or its short identity number, from agent creation or listing. Also accepts an 8-character identity number (0–9, A–Z); malformed, absent and foreign references return 404, and response ids always use agent_…."
567
570
  }
568
571
  ],
569
572
  "query": []
@@ -581,7 +584,7 @@ export const operations = [
581
584
  {
582
585
  "name": "agent_id",
583
586
  "sdkName": "agent_id",
584
- "description": "Service agent id (agent_…) or its short identity number, from agent creation or listing."
587
+ "description": "Service agent id (agent_…) or its short identity number, from agent creation or listing. Also accepts an 8-character identity number (0–9, A–Z); malformed, absent and foreign references return 404, and response ids always use agent_…."
585
588
  }
586
589
  ],
587
590
  "query": []
@@ -599,7 +602,7 @@ export const operations = [
599
602
  {
600
603
  "name": "agent_id",
601
604
  "sdkName": "agent_id",
602
- "description": "Service agent id (agent_…) or its short identity number, from agent creation or listing."
605
+ "description": "Service agent id (agent_…) or its short identity number, from agent creation or listing. Also accepts an 8-character identity number (0–9, A–Z); malformed, absent and foreign references return 404, and response ids always use agent_…."
603
606
  }
604
607
  ],
605
608
  "query": [],
@@ -689,7 +692,7 @@ export const operations = [
689
692
  {
690
693
  "name": "agent_id",
691
694
  "sdkName": "agent_id",
692
- "description": "Active service agent id from agent creation or listing."
695
+ "description": "Active service agent id from agent creation or listing. Also accepts an 8-character identity number (0–9, A–Z); malformed, absent and foreign references return 404, and response ids always use agent_…."
693
696
  },
694
697
  {
695
698
  "name": "customer_id",
@@ -719,7 +722,7 @@ export const operations = [
719
722
  {
720
723
  "name": "agent_id",
721
724
  "sdkName": "agent_id",
722
- "description": "Active service agent id from agent creation or listing."
725
+ "description": "Active service agent id from agent creation or listing. Also accepts an 8-character identity number (0–9, A–Z); malformed, absent and foreign references return 404, and response ids always use agent_…."
723
726
  },
724
727
  {
725
728
  "name": "customer_id",
@@ -742,7 +745,7 @@ export const operations = [
742
745
  {
743
746
  "name": "agent_id",
744
747
  "sdkName": "agent_id",
745
- "description": "Active service agent id from agent creation or listing."
748
+ "description": "Active service agent id from agent creation or listing. Also accepts an 8-character identity number (0–9, A–Z); malformed, absent and foreign references return 404, and response ids always use agent_…."
746
749
  },
747
750
  {
748
751
  "name": "customer_id",
@@ -765,7 +768,7 @@ export const operations = [
765
768
  {
766
769
  "name": "agent_id",
767
770
  "sdkName": "agent_id",
768
- "description": "Active service agent id from agent creation or listing."
771
+ "description": "Active service agent id from agent creation or listing. Also accepts an 8-character identity number (0–9, A–Z); malformed, absent and foreign references return 404, and response ids always use agent_…."
769
772
  },
770
773
  {
771
774
  "name": "customer_id",
@@ -788,7 +791,7 @@ export const operations = [
788
791
  {
789
792
  "name": "agent_id",
790
793
  "sdkName": "agent_id",
791
- "description": "Active service agent id from agent creation or listing."
794
+ "description": "Active service agent id from agent creation or listing. Also accepts an 8-character identity number (0–9, A–Z); malformed, absent and foreign references return 404, and response ids always use agent_…."
792
795
  },
793
796
  {
794
797
  "name": "customer_id",
@@ -811,7 +814,7 @@ export const operations = [
811
814
  {
812
815
  "name": "agent_id",
813
816
  "sdkName": "agent_id",
814
- "description": "Active service agent id from agent creation or listing."
817
+ "description": "Active service agent id from agent creation or listing. Also accepts an 8-character identity number (0–9, A–Z); malformed, absent and foreign references return 404, and response ids always use agent_…."
815
818
  },
816
819
  {
817
820
  "name": "customer_id",
@@ -834,7 +837,7 @@ export const operations = [
834
837
  {
835
838
  "name": "agent_id",
836
839
  "sdkName": "agent_id",
837
- "description": "Agent id from creation or listing."
840
+ "description": "Agent id from creation or listing. Also accepts an 8-character identity number (0–9, A–Z); malformed, absent and foreign references return 404, and response ids always use agent_…."
838
841
  }
839
842
  ],
840
843
  "query": []
@@ -852,7 +855,7 @@ export const operations = [
852
855
  {
853
856
  "name": "agent_id",
854
857
  "sdkName": "agent_id",
855
- "description": "Agent id, as returned by agents.create or agents.list (for a session filter, the agent the session was created with). Not the agent name."
858
+ "description": "Agent id, as returned by agents.create or agents.list (for a session filter, the agent the session was created with). Not the agent name. Also accepts an 8-character identity number (0–9, A–Z); malformed, absent and foreign references return 404, and response ids always use agent_…."
856
859
  }
857
860
  ],
858
861
  "query": [
@@ -883,7 +886,7 @@ export const operations = [
883
886
  {
884
887
  "name": "agent_id",
885
888
  "sdkName": "agent_id",
886
- "description": "Agent identifier from agents.create or agents.list."
889
+ "description": "Agent identifier from agents.create or agents.list. Also accepts an 8-character identity number (0–9, A–Z); malformed, absent and foreign references return 404, and response ids always use agent_…."
887
890
  },
888
891
  {
889
892
  "name": "version",
@@ -1901,7 +1904,7 @@ export const operations = [
1901
1904
  "resource": "agent.sessions",
1902
1905
  "method": "create",
1903
1906
  "summary": "Create session",
1904
- "description": "Create a session: one conversation with an agent. Pass agent as an agent id or {type:\"agent\", id, version?}; an id alone, or an object without version, pins the agent's active_version (the version chosen with agents.versions.apply, not necessarily the newest saved one). Unlike Anthropic Managed Agents, omit environment_id to use the default environment saved in the agent version (light for a new agent), unless computer_id (explicit, or the agent's default) selects a Computer; pass an environment id for a sandbox recipe. For service agents, 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. Unlike Anthropic Managed Agents, the only inline agent override is system ({type:\"agent_with_overrides\", id, system}); to change the model, tools, MCP servers or skills, save a version instead. Supports vault_ids, up to 50, owned by the current organization and not archived; credential injection is deferred to a later version. budget is {type:\"limit\", max_list_cost:{amount, currency:\"USD\"}} where amount is a positive decimal string of US dollars with at most 2 decimal places (\"20.00\" is USD 20.00); omitted budget defaults to \"20.00\" and null removes the limit. 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.",
1907
+ "description": "Create a session: one conversation with an agent. Pass agent as an agent id or {type:\"agent\", id, version?}; an id alone, or an object without version, pins the agent's active_version (the version chosen with agents.versions.apply, not necessarily the newest saved one). Unlike Anthropic Managed Agents, omit environment_id to use the default environment saved in the agent version (light for a new agent), unless computer_id (explicit, or the agent's default) selects a Computer; pass an environment id for a sandbox recipe. For service agents, 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. Unlike Anthropic Managed Agents, the only inline agent override is system ({type:\"agent_with_overrides\", id, system}); to change the model, tools, MCP servers or skills, save a version instead. Supports vault_ids, up to 50, owned by the current organization and not archived; credential injection is deferred to a later version. budget is {type:\"limit\", max_list_cost:{amount, currency:\"USD\"}} where amount is a positive decimal string of US dollars with at most 2 decimal places (\"20.00\" is USD 20.00); omitted budget defaults to \"20.00\" and null removes the limit. 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. Assume agents return 400 INVALID_PARAMS; drive them over MCP at /agent/v1/agents/{id}/mcp instead.",
1905
1908
  "http": "POST",
1906
1909
  "path": "/agent/v1/sessions",
1907
1910
  "streaming": "no",
@@ -3504,7 +3507,7 @@ export const operations = [
3504
3507
  "resource": "application.workers.grants",
3505
3508
  "method": "create",
3506
3509
  "summary": "Create grant",
3507
- "description": "Let this Worker's platform token access one of your databases, folders or knowledge bases.",
3510
+ "description": "Record access to an organization-owned database or knowledge base, all organization files (files, id *), or models (models, id *, read only). Each resource and optional alias must be unique within this Worker. Foreign and missing resources both return RESOURCE_NOT_FOUND (404); an unavailable resource service returns PROVIDER_CAPACITY (503, retryable).",
3508
3511
  "http": "POST",
3509
3512
  "path": "/application/v1/workers/{worker_id}/grants",
3510
3513
  "streaming": "no",
@@ -3524,7 +3527,13 @@ export const operations = [
3524
3527
  "name": "resource",
3525
3528
  "type": "object",
3526
3529
  "required": true,
3527
- "description": "Resource to grant."
3530
+ "description": "Resource to grant. Each (type, id) may be granted once per Worker; duplicates return GRANT_CONFLICT (409)."
3531
+ },
3532
+ {
3533
+ "name": "alias",
3534
+ "type": "string",
3535
+ "required": false,
3536
+ "description": "Optional name, unique within this Worker. Available for reuse after the grant is deleted."
3528
3537
  },
3529
3538
  {
3530
3539
  "name": "access",
@@ -3534,7 +3543,7 @@ export const operations = [
3534
3543
  "read_write"
3535
3544
  ],
3536
3545
  "required": true,
3537
- "description": "Access level."
3546
+ "description": "Access level; models accepts read only."
3538
3547
  }
3539
3548
  ]
3540
3549
  }
@@ -6300,7 +6309,7 @@ export const operations = [
6300
6309
  "resource": "automation.workflows",
6301
6310
  "method": "create",
6302
6311
  "summary": "Create a workflow",
6303
- "description": "Workflow syntax reference: https://deepraxis.com/docs/developers/automation/reference/workflow-syntax. Save a YAML workflow as an editable draft; this does not validate, publish or run it, so check it with validate (kind=workflow) first. Minimal draft: document with dsl (\"1.0.3\"), namespace, name and version, plus a do list of steps, for example document: {dsl: \"1.0.3\", namespace: demo, name: add, version: \"1.0.0\"} and do: [{first: {call: demo/add-one, with: {n: \"${ .n }\"}}}]. call: <ns/name> calls an Action directly (bare name for built-ins such as ocr) and with is the Action input; the input contract is at current_revision.input_schema in the get-action response. run: starts a saved script or child workflow. The run input is . in the first step, and expressions are jq written as a whole ${ ... } string. Limits: Action 30 s (run-sandbox 10 min), workflow 24 h by default and 30 days at most, payload 1 MiB. Test the draft by sending its source and language=yaml to praxis.automation.runs.create. Guide: /docs/developers/automation/guides/write-workflow. Error details are in the errors[] of the response (pointer, detail, hint). Choose your own namespace without registering it first; praxis is reserved for built-in Actions. Scripts and workflows share names within the tenant; a duplicate returns NAME_TAKEN. run.workflow accepts ns/name@range or {namespace, name, version, input}; run.script uses the same reference shape as a platform extension. Object namespace, name and version are required; version accepts an exact version, dist-tag or range, locked at publication. Object input defaults to {} and supports expressions; string references retain task-level with. run.await defaults to true and returns the child output. With false, the child uses detach and the task immediately returns {run_id}; parent cancellation does not cascade. Inline script.code returns DEFINITION_INVALID with a detail asking you to save a script and reference it first. raise.error retains its type URI, status, title and detail in the run error.",
6312
+ "description": "Workflow syntax reference: https://deepraxis.com/docs/developers/automation/reference/workflow-syntax. Save a YAML workflow as an editable draft; this does not validate, publish or run it, so check it with validate (kind=workflow) first. Minimal draft: document with dsl (\"1.0.3\"), namespace, name and version, plus a do list of steps, for example document: {dsl: \"1.0.3\", namespace: demo, name: add, version: \"1.0.0\"} and do: [{first: {call: demo/add-one, with: {n: \"${ .n }\"}}}]. call: <ns/name> calls an Action directly (bare name for built-ins such as ocr) and with is the Action input; the input contract is at current_revision.input_schema in the get-action response. run: starts a saved script or child workflow. The run input is . in the first step, and expressions are jq written as a whole ${ ... } string. Limits: Action 30 s (run-sandbox 10 min), workflow 24 h by default and 30 days at most, payload 1 MiB. Test the draft by sending its source and language=yaml to praxis.automation.runs.create. To pause for a person, call praxis/approval (it opens a human task; the step output is the decision); agents answer with praxis.automation.humanTasks.respond on behalf of their user. Guide: /docs/developers/automation/guides/approvals Guide: /docs/developers/automation/guides/write-workflow. Error details are in the errors[] of the response (pointer, detail, hint). Choose your own namespace without registering it first; praxis is reserved for built-in Actions. Scripts and workflows share names within the tenant; a duplicate returns NAME_TAKEN. run.workflow accepts ns/name@range or {namespace, name, version, input}; run.script uses the same reference shape as a platform extension. Object namespace, name and version are required; version accepts an exact version, dist-tag or range, locked at publication. Object input defaults to {} and supports expressions; string references retain task-level with. run.await defaults to true and returns the child output. With false, the child uses detach and the task immediately returns {run_id}; parent cancellation does not cascade. Inline script.code returns DEFINITION_INVALID with a detail asking you to save a script and reference it first. raise.error retains its type URI, status, title and detail in the run error.",
6304
6313
  "http": "POST",
6305
6314
  "path": "/automation/v1/workflows",
6306
6315
  "streaming": "no",
@@ -7284,125 +7293,174 @@ export const operations = [
7284
7293
  }
7285
7294
  },
7286
7295
  {
7287
- "resource": "database.databases",
7296
+ "resource": "canvas.canvases",
7288
7297
  "method": "list",
7289
- "summary": "List databases",
7290
- "description": "Find databases owned by your tenant and obtain their ids for schema or row operations. Excludes deleting by default. status=active or status=deleting selects that state; invalid values return 400 INVALID_PARAMS.",
7298
+ "summary": "List canvases",
7299
+ "description": "Discover canvases in the API key's organization and obtain ids for retrieval or editing. Results are ordered by updated_at from newest to oldest. limit is 1–100 and defaults to 50; omit cursor for the first page, then copy next_cursor into the next request until it is null. Deleted canvases are unavailable.",
7291
7300
  "http": "GET",
7292
- "path": "/database/v1/databases",
7301
+ "path": "/canvas/v1/canvases",
7293
7302
  "streaming": "no",
7294
7303
  "pagination": true,
7295
7304
  "pathParams": [],
7296
7305
  "query": [
7297
- {
7298
- "name": "cursor",
7299
- "type": "string",
7300
- "required": false,
7301
- "description": "Opaque next_cursor from the previous page."
7302
- },
7303
7306
  {
7304
7307
  "name": "limit",
7305
7308
  "type": "integer",
7306
7309
  "required": false,
7307
- "description": "Page size."
7308
- },
7309
- {
7310
- "name": "labels",
7311
- "type": "object",
7312
- "required": false,
7313
- "description": "Exact label match, encoded as labels[purpose]=docs."
7310
+ "description": "Maximum canvases to return per page, from 1 to 100; defaults to 50 when omitted."
7314
7311
  },
7315
7312
  {
7316
- "name": "status",
7313
+ "name": "cursor",
7317
7314
  "type": "string",
7318
- "enum": [
7319
- "active",
7320
- "deleting"
7321
- ],
7322
7315
  "required": false,
7323
- "description": "Filter by lifecycle state. active (the default when omitted) lists usable databases; deleting lists databases that were deleted and are still inside the seven-day restore window. Any other value returns 400 INVALID_PARAMS."
7316
+ "description": "Opaque next_cursor from the preceding list response; omit for the first page and stop when next_cursor is null."
7324
7317
  }
7325
7318
  ]
7326
7319
  },
7327
7320
  {
7328
- "resource": "database.databases",
7321
+ "resource": "canvas.canvases",
7329
7322
  "method": "create",
7330
- "summary": "Create database",
7331
- "description": "Creates an empty database for the caller and returns it with status active (HTTP 201); add tables next with praxis.database.databases.tables.create. name is required and is 1–64 visible characters after trimming. labels are optional string tags (at most 64; each key starts with a lowercase letter and uses up to 63 characters of a-z 0-9 _ -; each value is up to 63 characters of a-z 0-9 _ -) that databaseListDatabases can filter on. If initialization fails the call returns 503 CAPACITY and the half-created database is left with status failed; retry by calling create again, which makes a new database. Unlike Supabase, this creates a SQLite-backed database without a PostgreSQL connection or SQL execution endpoint. Use a Praxis credential; access is scoped to its tenant, not to Supabase Auth users or RLS policies.",
7323
+ "summary": "Create canvas",
7324
+ "description": "Create a blank design canvas in the API key's organization before drawing with praxis.canvas.canvases.execute. Send an optional name of at most 200 characters; omitting name uses Untitled. Each successful call creates a new canvas and returns its id and viewer_url with HTTP 201; save the id for subsequent reads, edits and deletion.",
7332
7325
  "http": "POST",
7333
- "path": "/database/v1/databases",
7326
+ "path": "/canvas/v1/canvases",
7334
7327
  "streaming": "no",
7335
7328
  "pagination": false,
7336
7329
  "pathParams": [],
7337
7330
  "query": [],
7338
7331
  "body": {
7339
- "required": true,
7332
+ "required": false,
7340
7333
  "fields": [
7341
7334
  {
7342
7335
  "name": "name",
7343
7336
  "type": "string",
7344
- "required": true,
7345
- "description": "Display name for the database: 1–64 visible characters after trimming; control characters are rejected. It is not an identifier, so later calls still use the returned id."
7346
- },
7347
- {
7348
- "name": "labels",
7349
- "type": "object",
7350
7337
  "required": false,
7351
- "description": "Optional string tags to attach, at most 64. Each key starts with a lowercase letter and may use up to 63 characters of a-z 0-9 _ -; each value is up to 63 characters of a-z 0-9 _ -. List calls filter on exact key and value pairs."
7338
+ "description": "Display name for the new canvas, at most 200 characters; omission uses Untitled."
7352
7339
  }
7353
7340
  ]
7354
7341
  }
7355
7342
  },
7356
7343
  {
7357
- "resource": "database.databases",
7344
+ "resource": "canvas.canvases",
7358
7345
  "method": "delete",
7359
- "summary": "Delete database",
7360
- "description": "Soft-delete a database when it should stop accepting schema and row operations. Idempotently enters deleting with a seven-day purge_at. GET remains available; child operations return 409 until restored.",
7346
+ "summary": "Delete canvas",
7347
+ "description": "Permanently delete a canvas and its design content when it is no longer needed. Obtain canvas_id from create or list and confirm the target before calling; deletion cannot be undone. HTTP 200 confirms deletion with deleted=true. Subsequent access returns CANVAS_NOT_FOUND, as it does for a missing canvas or one outside the API key's organization.",
7361
7348
  "http": "DELETE",
7362
- "path": "/database/v1/databases/{database_id}",
7349
+ "path": "/canvas/v1/canvases/{canvas_id}",
7363
7350
  "streaming": "no",
7364
7351
  "pagination": false,
7365
7352
  "pathParams": [
7366
7353
  {
7367
- "name": "database_id",
7368
- "sdkName": "database_id",
7369
- "description": "Identifier of the database to act on: the id (db_…) returned by databaseCreateDatabase or databaseListDatabases. A display name is not accepted."
7354
+ "name": "canvas_id",
7355
+ "sdkName": "canvas_id",
7356
+ "description": "Canvas id returned by create or list, in the form cvs_ followed by 16 lowercase letters or digits; a display name is not accepted."
7370
7357
  }
7371
7358
  ],
7372
7359
  "query": []
7373
7360
  },
7374
7361
  {
7375
- "resource": "database.databases",
7362
+ "resource": "canvas.canvases",
7376
7363
  "method": "retrieve",
7377
- "summary": "Get database",
7378
- "description": "Returns one database by id, including a database in the deleting state (purge_at then shows when it will be permanently removed). Call it before table or row operations to confirm status is active: schema and row calls on a deleting database return 409 DATABASE_INVALID_STATE. size_bytes is refreshed from live storage at most once every five seconds. A purged or unknown id returns 404 DATABASE_NOT_FOUND.",
7364
+ "summary": "Retrieve canvas",
7365
+ "description": "Inspect the current canvas before editing, like Pencil get_app_state. The response adds top-level node summaries in canvas order and reusable component ids to the canvas metadata. Use these ids in nodes.list, images.list or an execute script; use the returned version as expected_version to detect concurrent edits. Read full node content with nodes.list rather than guessing fields from these summaries.",
7379
7366
  "http": "GET",
7380
- "path": "/database/v1/databases/{database_id}",
7367
+ "path": "/canvas/v1/canvases/{canvas_id}",
7381
7368
  "streaming": "no",
7382
7369
  "pagination": false,
7383
7370
  "pathParams": [
7384
7371
  {
7385
- "name": "database_id",
7386
- "sdkName": "database_id",
7387
- "description": "Identifier of the database to act on: the id (db_…) returned by databaseCreateDatabase or databaseListDatabases. A display name is not accepted."
7372
+ "name": "canvas_id",
7373
+ "sdkName": "canvas_id",
7374
+ "description": "Canvas id returned by create or list, in the form cvs_ followed by 16 lowercase letters or digits; a display name is not accepted."
7388
7375
  }
7389
7376
  ],
7390
7377
  "query": []
7391
7378
  },
7392
7379
  {
7393
- "resource": "database.databases",
7394
- "method": "update",
7395
- "summary": "Update database",
7396
- "description": "Renames an active database and/or replaces its labels; send only the keys you want to change. labels is replaced as a whole, not merged, so include every label you want to keep. A body without name or labels, or with values equal to the current ones, changes nothing and leaves updated_at as is. A database in the deleting state returns 409 DATABASE_INVALID_STATE; restore it first with databaseRestoreDatabase.",
7397
- "http": "PATCH",
7398
- "path": "/database/v1/databases/{database_id}",
7380
+ "resource": "canvas.canvases.images",
7381
+ "method": "list",
7382
+ "summary": "Render canvas nodes",
7383
+ "description": "Render 1–4 nodes to inspect the visual result of a design edit. Use ids from retrieve, execute.created or execute.screenshots; scale defaults to 1 and accepts 0.25–4, and png is the only supported format. Unlike Figma, images contains inline data:image/png;base64,... URLs, not hosted image URLs; a null entry means no image is available for that id. Use nodes.list for editable node content instead of pixels.",
7384
+ "http": "GET",
7385
+ "path": "/canvas/v1/canvases/{canvas_id}/images",
7399
7386
  "streaming": "no",
7400
7387
  "pagination": false,
7401
7388
  "pathParams": [
7402
7389
  {
7403
- "name": "database_id",
7404
- "sdkName": "database_id",
7405
- "description": "Identifier of the database to act on: the id (db_…) returned by databaseCreateDatabase or databaseListDatabases. A display name is not accepted."
7390
+ "name": "canvas_id",
7391
+ "sdkName": "canvas_id",
7392
+ "description": "Canvas id returned by create or list, in the form cvs_ followed by 16 lowercase letters or digits; a display name is not accepted."
7393
+ }
7394
+ ],
7395
+ "query": [
7396
+ {
7397
+ "name": "ids",
7398
+ "type": "string",
7399
+ "required": true,
7400
+ "description": "Comma-separated list of 1–4 node ids to render, from retrieve, execute.created or execute.screenshots."
7401
+ },
7402
+ {
7403
+ "name": "scale",
7404
+ "type": "number",
7405
+ "required": false,
7406
+ "description": "Output pixel scale relative to canvas dimensions, from 0.25 to 4 inclusive; defaults to 1 when omitted."
7407
+ },
7408
+ {
7409
+ "name": "format",
7410
+ "type": "string",
7411
+ "enum": [
7412
+ "png"
7413
+ ],
7414
+ "required": false,
7415
+ "description": "Image encoding; png produces a PNG data URL and is the only supported value. Omit to use png."
7416
+ }
7417
+ ]
7418
+ },
7419
+ {
7420
+ "resource": "canvas.canvases.nodes",
7421
+ "method": "list",
7422
+ "summary": "Read canvas nodes",
7423
+ "description": "Read node documents for inspection before changing individual nodes. Supply 1–100 comma-separated node ids from retrieve or execute, or instance paths such as a/b. depth is an integer at least 0; omit it for complete subtrees. Each requested id maps to a document wrapper or null if absent. Unlike Figma, document contains a Pencil .pen 2.21 node, not a Figma node. For top-level summaries use canvases.retrieve; for pixels use images.list.",
7424
+ "http": "GET",
7425
+ "path": "/canvas/v1/canvases/{canvas_id}/nodes",
7426
+ "streaming": "no",
7427
+ "pagination": false,
7428
+ "pathParams": [
7429
+ {
7430
+ "name": "canvas_id",
7431
+ "sdkName": "canvas_id",
7432
+ "description": "Canvas id returned by create or list, in the form cvs_ followed by 16 lowercase letters or digits; a display name is not accepted."
7433
+ }
7434
+ ],
7435
+ "query": [
7436
+ {
7437
+ "name": "ids",
7438
+ "type": "string",
7439
+ "required": true,
7440
+ "description": "Comma-separated list of 1–100 node ids from retrieve or execute, or instance paths such as a/b; missing ids map to null."
7441
+ },
7442
+ {
7443
+ "name": "depth",
7444
+ "type": "integer",
7445
+ "required": false,
7446
+ "description": "Maximum child depth below each requested node, as an integer at least 0; 0 returns the node without descendants, and omission returns the complete subtree."
7447
+ }
7448
+ ]
7449
+ },
7450
+ {
7451
+ "resource": "canvas.canvases",
7452
+ "method": "execute",
7453
+ "summary": "Execute canvas script",
7454
+ "description": "Draw or edit a canvas atomically with a synchronous Pencil execute script. First create a canvas with praxis.canvas.canvases.create and use its id as canvas_id; inspect an existing canvas with retrieve before modifying it. Send exactly one of script (new source) or edit_id (a failed script to patch using edits). Unlike Figma REST, :execute writes design content; nodes use Pencil .pen schema 2.21 (frame/group/rectangle/ellipse/polygon/path/text/icon/ref/note), not Figma node fields.\n\nThe root variable is document. Synchronous functions are Insert / Copy / Update / Replace / Move / Delete / SetVariables / Get / GetVariables / FindEmptySpace / Print / TakeScreenshot; globals persist for the next call. A first frame needs only this body.script:\n\n```js\nconst f = Insert(document, { type: \"frame\", name: \"Hero\", width: 1200, layout: \"vertical\", padding: 48, fill: \"#FFFFFF\" }); Insert(f, { type: \"text\", content: \"Hello\", fontSize: 32, fill: \"#111111\" }); Print(f)\n```\n\nUse viewer_url to watch the result in Console. TakeScreenshot records node ids in screenshots; call images.list with those ids to fetch PNG data URLs. See the [Canvas execute reference](https://deepraxis.com/en/docs/api/native/canvas/execute) for request fields and results, and the [Canvas node reference](https://deepraxis.com/en/docs/developers/canvas/nodes) for node content.\n\nA successful write increments version by one. Optionally set expected_version to the version from retrieve or nodes.list; on 409 REVISION_CONFLICT read again, merge your intent and retry with the current version. Every script failure rolls back all writes. On 400 SCRIPT_ERROR, SCRIPT_LIMIT or OPS_REJECTED, use error.details.edit_id plus edits to repair and rerun the stored source without resending the entire script; details may include line, column and rejection. On 400 EDIT_EXPIRED the saved script is older than ten minutes: submit a corrected new script. On 429 CANVAS_BUSY, more than four calls are queued for this canvas: wait for pending calls before retrying.\n",
7455
+ "http": "POST",
7456
+ "path": "/canvas/v1/canvases/{canvas_id}:execute",
7457
+ "streaming": "no",
7458
+ "pagination": false,
7459
+ "pathParams": [
7460
+ {
7461
+ "name": "canvas_id",
7462
+ "sdkName": "canvas_id",
7463
+ "description": "Canvas id returned by create or list, in the form cvs_ followed by 16 lowercase letters or digits; a display name is not accepted."
7406
7464
  }
7407
7465
  ],
7408
7466
  "query": [],
@@ -7410,121 +7468,974 @@ export const operations = [
7410
7468
  "required": true,
7411
7469
  "fields": [
7412
7470
  {
7413
- "name": "name",
7471
+ "name": "script",
7414
7472
  "type": "string",
7415
7473
  "required": false,
7416
- "description": "New display name, 1–64 visible characters after trimming. Omit it to keep the current name."
7474
+ "description": "New synchronous Pencil execute source using document as the root; provide this or edit_id, never both. See the operation's first-frame example."
7417
7475
  },
7418
7476
  {
7419
- "name": "labels",
7420
- "type": "object",
7477
+ "name": "edit_id",
7478
+ "type": "string",
7421
7479
  "required": false,
7422
- "description": "Complete replacement label set, not a merge: labels not listed here are removed. Same limits as at creation (at most 64; keys a-z 0-9 _ - starting with a letter; values up to 63 characters of a-z 0-9 _ -). Omit it to keep the current labels."
7480
+ "description": "Saved failed-script identifier from error.details.edit_id; use with edits instead of script within ten minutes of the failure."
7481
+ },
7482
+ {
7483
+ "name": "edits",
7484
+ "type": "array",
7485
+ "itemType": "object",
7486
+ "required": false,
7487
+ "description": "Text replacements applied to the source identified by edit_id before rerunning; use error line, column or rejection to choose the correction."
7488
+ },
7489
+ {
7490
+ "name": "expected_version",
7491
+ "type": "string",
7492
+ "required": false,
7493
+ "description": "Revision from retrieve, nodes.list or the previous execute response; omit for an unguarded write. A mismatch returns 409 REVISION_CONFLICT with details.version."
7423
7494
  }
7424
7495
  ]
7425
7496
  }
7426
7497
  },
7427
7498
  {
7428
- "resource": "database.databases.events",
7429
- "method": "list",
7430
- "summary": "List events",
7431
- "description": "Read lifecycle and schema events, including while the database is deleting. next_cursor is an opaque string cursor (do not do arithmetic on it): pass it as after_seq for asc or before_seq for desc. Supplying both cursors returns 400 INVALID_PARAMS. Unlike Supabase Realtime, this is paged lifecycle and schema history, not a subscription or a row-change feed; row inserts, updates and deletes do not appear here.",
7499
+ "resource": "cut.exports",
7500
+ "method": "retrieve",
7501
+ "summary": "Retrieve video export",
7502
+ "description": "Poll an export id returned by projects.exports.create or list to observe render progress. queued, fetching, rendering, stitching and saving are in progress; done provides asset in the target library, failed provides error, and canceled means the job stopped. Only done confirms a usable output asset.",
7432
7503
  "http": "GET",
7433
- "path": "/database/v1/databases/{database_id}/events",
7504
+ "path": "/cut/v1/exports/{export_id}",
7434
7505
  "streaming": "no",
7435
7506
  "pagination": false,
7436
7507
  "pathParams": [
7437
7508
  {
7438
- "name": "database_id",
7439
- "sdkName": "database_id",
7440
- "description": "Identifier of the database to act on: the id (db_…) returned by databaseCreateDatabase or databaseListDatabases. A display name is not accepted."
7509
+ "name": "export_id",
7510
+ "sdkName": "export_id",
7511
+ "description": "Export identifier returned by its create or list operation; use the id, not a display name."
7512
+ }
7513
+ ],
7514
+ "query": []
7515
+ },
7516
+ {
7517
+ "resource": "cut.exports",
7518
+ "method": "cancel",
7519
+ "summary": "Cancel video export",
7520
+ "description": "Request cancellation of an export obtained from projects.exports.create or list when its output is no longer needed. Read the returned job status and retrieve it to confirm the terminal outcome; do not interpret a cancellation request as successful rendering.",
7521
+ "http": "POST",
7522
+ "path": "/cut/v1/exports/{export_id}:cancel",
7523
+ "streaming": "no",
7524
+ "pagination": false,
7525
+ "pathParams": [
7526
+ {
7527
+ "name": "export_id",
7528
+ "sdkName": "export_id",
7529
+ "description": "Export identifier returned by its create or list operation; use the id, not a display name."
7441
7530
  }
7442
7531
  ],
7532
+ "query": []
7533
+ },
7534
+ {
7535
+ "resource": "cut.projects",
7536
+ "method": "list",
7537
+ "summary": "List projects",
7538
+ "description": "Discover projects owned by the API key organization and obtain project_id values. Results default to active projects ordered by updateTime descending; use filter state = \"deleted\" to find retained deleted projects for undelete. Continue with next_page_token as page_token until the token is absent.",
7539
+ "http": "GET",
7540
+ "path": "/cut/v1/projects",
7541
+ "streaming": "no",
7542
+ "pagination": false,
7543
+ "pathParams": [],
7443
7544
  "query": [
7444
7545
  {
7445
- "name": "after_seq",
7546
+ "name": "page_size",
7446
7547
  "type": "integer",
7447
7548
  "required": false,
7448
- "description": "With order=asc, return only events with seq greater than this value. Cannot be combined with before_seq."
7549
+ "description": "Maximum resources in one page, from 1 to 100; defaults to 50."
7449
7550
  },
7450
7551
  {
7451
- "name": "limit",
7452
- "type": "integer",
7552
+ "name": "page_token",
7553
+ "type": "string",
7453
7554
  "required": false,
7454
- "description": "Page size."
7555
+ "description": "Opaque next_page_token from the preceding page; omit on the first request."
7455
7556
  },
7456
7557
  {
7457
- "name": "order",
7558
+ "name": "filter",
7458
7559
  "type": "string",
7459
- "enum": [
7460
- "asc",
7461
- "desc"
7462
- ],
7463
7560
  "required": false,
7464
- "description": "Sequence order: asc or desc (newest first). Defaults to asc, or to desc when before_seq is supplied."
7561
+ "description": "Optional resource filter; projects supports state = \"active\" or state = \"deleted\"."
7465
7562
  },
7466
7563
  {
7467
- "name": "before_seq",
7468
- "type": "integer",
7564
+ "name": "order_by",
7565
+ "type": "string",
7469
7566
  "required": false,
7470
- "description": "Return only events with seq less than this value, newest first; implies order=desc when order is omitted. Cannot be combined with after_seq or order=asc."
7567
+ "description": "Optional ordering expression; projects supports updateTime desc."
7471
7568
  }
7472
7569
  ]
7473
7570
  },
7474
7571
  {
7475
- "resource": "database.databases.purge",
7572
+ "resource": "cut.projects",
7476
7573
  "method": "create",
7477
- "summary": "Permanently purge database",
7478
- "description": "Immediately and irreversibly purges a deleting database. Active databases return 409; absent or already purged databases return 404.",
7574
+ "summary": "Create project",
7575
+ "description": "Create a blank editing project in the API key organization before writing a script. First obtain accessible library ids from praxis.media; bindings must include exactly one read_write library with default_upload true. Each call creates a new project and returns HTTP 201; save its id for execute, state and timeline calls. All editing positions use seconds.",
7479
7576
  "http": "POST",
7480
- "path": "/database/v1/databases/{database_id}/purge",
7577
+ "path": "/cut/v1/projects",
7578
+ "streaming": "no",
7579
+ "pagination": false,
7580
+ "pathParams": [],
7581
+ "query": [],
7582
+ "body": {
7583
+ "required": true,
7584
+ "fields": [
7585
+ {
7586
+ "name": "name",
7587
+ "type": "string",
7588
+ "required": true,
7589
+ "description": "Human-readable project name; required and must contain non-whitespace text."
7590
+ },
7591
+ {
7592
+ "name": "labels",
7593
+ "type": "object",
7594
+ "required": false,
7595
+ "description": "User-defined string labels for organizing projects; label keys retain their original spelling."
7596
+ },
7597
+ {
7598
+ "name": "settings",
7599
+ "type": "object",
7600
+ "required": true,
7601
+ "description": "Dimensions and frame rate for a new editing project."
7602
+ },
7603
+ {
7604
+ "name": "bindings",
7605
+ "type": "array",
7606
+ "itemType": "object",
7607
+ "required": true,
7608
+ "description": "Accessible library bindings; exactly one read_write entry must have default_upload true."
7609
+ }
7610
+ ]
7611
+ }
7612
+ },
7613
+ {
7614
+ "resource": "cut.projects",
7615
+ "method": "delete",
7616
+ "summary": "Delete project",
7617
+ "description": "Soft-delete a project selected from projects.list. The project is retained for seven days until purge_time and can be restored with undelete before that deadline. Deleted projects cannot be edited; list with filter state = \"deleted\" to locate retained projects.",
7618
+ "http": "DELETE",
7619
+ "path": "/cut/v1/projects/{project_id}",
7481
7620
  "streaming": "no",
7482
7621
  "pagination": false,
7483
7622
  "pathParams": [
7484
7623
  {
7485
- "name": "database_id",
7486
- "sdkName": "database_id",
7487
- "description": "Identifier of the database to act on: the id (db_…) returned by databaseCreateDatabase or databaseListDatabases. A display name is not accepted."
7624
+ "name": "project_id",
7625
+ "sdkName": "project_id",
7626
+ "description": "Project identifier returned by its create or list operation; use the id, not a display name."
7488
7627
  }
7489
7628
  ],
7490
7629
  "query": []
7491
7630
  },
7492
7631
  {
7493
- "resource": "database.databases.rest",
7494
- "method": "delete",
7495
- "summary": "Delete rows",
7496
- "description": "Deletes the rows matched by the filter query parameters (the same filters as databaseSelect); with no filter every row of the table matches. Deletion is immediate and cannot be undone. A row that a link field of another table still references makes the whole call fail with 409 REFERENCE_RESTRICT and nothing is deleted. The default response is 204 with no body; send Prefer: return=representation to get HTTP 200 with the deleted rows.",
7497
- "http": "DELETE",
7498
- "path": "/database/v1/databases/{database_id}/rest/{table}",
7632
+ "resource": "cut.projects",
7633
+ "method": "retrieve",
7634
+ "summary": "Retrieve project",
7635
+ "description": "Inspect project metadata, settings and library bindings before editing. Copy id from projects.create or list; expand=timeline,exports,versions includes selected related resources. The expanded timeline uses seconds and the returned revision can guard a later execute call with expected_revision.",
7636
+ "http": "GET",
7637
+ "path": "/cut/v1/projects/{project_id}",
7499
7638
  "streaming": "no",
7500
7639
  "pagination": false,
7501
7640
  "pathParams": [
7502
7641
  {
7503
- "name": "database_id",
7504
- "sdkName": "database_id",
7505
- "description": "Identifier of the database to act on: the id (db_…) returned by databaseCreateDatabase or databaseListDatabases. A display name is not accepted."
7506
- },
7507
- {
7508
- "name": "table",
7509
- "sdkName": "table",
7510
- "description": "table ID or name."
7642
+ "name": "project_id",
7643
+ "sdkName": "project_id",
7644
+ "description": "Project identifier returned by its create or list operation; use the id, not a display name."
7511
7645
  }
7512
7646
  ],
7513
7647
  "query": [
7514
7648
  {
7515
- "name": "select",
7516
- "type": "string",
7517
- "required": false,
7518
- "description": "Comma-separated columns; supports *, aliases, JSON paths and link-based embedding. Casts, aggregates, spread and join modifiers are unsupported."
7519
- },
7520
- {
7521
- "name": "{column}",
7649
+ "name": "expand",
7522
7650
  "type": "string",
7523
7651
  "required": false,
7524
- "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."
7525
- },
7652
+ "description": "Comma-separated expansions: timeline includes clips, exports includes render jobs, versions includes saved snapshots."
7653
+ }
7654
+ ]
7655
+ },
7656
+ {
7657
+ "resource": "cut.projects",
7658
+ "method": "update",
7659
+ "summary": "Update project metadata",
7660
+ "description": "Change the project display name or replace its labels by naming those fields in update_mask. Use execute for clip or track edits. Each successful update commits a new revision; labels are replaced as a whole when selected, so read and merge existing labels before overwriting them.",
7661
+ "http": "PATCH",
7662
+ "path": "/cut/v1/projects/{project_id}",
7663
+ "streaming": "no",
7664
+ "pagination": false,
7665
+ "pathParams": [
7526
7666
  {
7527
- "name": "and",
7667
+ "name": "project_id",
7668
+ "sdkName": "project_id",
7669
+ "description": "Project identifier returned by its create or list operation; use the id, not a display name."
7670
+ }
7671
+ ],
7672
+ "query": [],
7673
+ "body": {
7674
+ "required": true,
7675
+ "fields": [
7676
+ {
7677
+ "name": "name",
7678
+ "type": "string",
7679
+ "required": false,
7680
+ "description": "Replacement display name when update_mask includes name."
7681
+ },
7682
+ {
7683
+ "name": "labels",
7684
+ "type": "object",
7685
+ "required": false,
7686
+ "description": "User-defined string labels for organizing projects; label keys retain their original spelling."
7687
+ },
7688
+ {
7689
+ "name": "update_mask",
7690
+ "type": "array",
7691
+ "itemType": "string",
7692
+ "enum": [
7693
+ "name",
7694
+ "labels"
7695
+ ],
7696
+ "required": true,
7697
+ "description": "Metadata fields to replace; name changes the display name and labels replaces all labels."
7698
+ }
7699
+ ]
7700
+ }
7701
+ },
7702
+ {
7703
+ "resource": "cut.projects.analysis",
7704
+ "method": "create",
7705
+ "summary": "Analyze project media",
7706
+ "description": "Request silence, filler-word or scene analysis for selected bound assets before editing. Omit media to select project sources; ranges returned in segments use source seconds. A pending result is not completion: use retry_after_sec before checking again, and inspect failed or unsupported asset results before deciding which edits are possible.",
7707
+ "http": "POST",
7708
+ "path": "/cut/v1/projects/{project_id}/analysis",
7709
+ "streaming": "no",
7710
+ "pagination": false,
7711
+ "pathParams": [
7712
+ {
7713
+ "name": "project_id",
7714
+ "sdkName": "project_id",
7715
+ "description": "Project identifier returned by its create or list operation; use the id, not a display name."
7716
+ }
7717
+ ],
7718
+ "query": [],
7719
+ "body": {
7720
+ "required": true,
7721
+ "fields": [
7722
+ {
7723
+ "name": "media",
7724
+ "type": "array",
7725
+ "itemType": "object",
7726
+ "required": false,
7727
+ "description": "Bound-library assets to analyze; omission selects project media."
7728
+ },
7729
+ {
7730
+ "name": "kinds",
7731
+ "type": "array",
7732
+ "itemType": "string",
7733
+ "enum": [
7734
+ "silence",
7735
+ "filler",
7736
+ "scenes"
7737
+ ],
7738
+ "required": true,
7739
+ "description": "Analysis types to request for the selected source assets."
7740
+ }
7741
+ ]
7742
+ }
7743
+ },
7744
+ {
7745
+ "resource": "cut.projects.bindings",
7746
+ "method": "list",
7747
+ "summary": "List library bindings",
7748
+ "description": "Discover the named media libraries available to this project before selecting source assets or an import/export destination. read bindings supply source assets; read_write bindings also accept uploads. Exactly one writable binding supplies the default upload destination.",
7749
+ "http": "GET",
7750
+ "path": "/cut/v1/projects/{project_id}/bindings",
7751
+ "streaming": "no",
7752
+ "pagination": false,
7753
+ "pathParams": [
7754
+ {
7755
+ "name": "project_id",
7756
+ "sdkName": "project_id",
7757
+ "description": "Project identifier returned by its create or list operation; use the id, not a display name."
7758
+ }
7759
+ ],
7760
+ "query": []
7761
+ },
7762
+ {
7763
+ "resource": "cut.projects.bindings",
7764
+ "method": "create",
7765
+ "summary": "Bind media library",
7766
+ "description": "Attach an accessible media library to an existing project under a unique name. Obtain library_id from praxis.media and choose read for source-only access or read_write for imports and exports. The project must retain exactly one read_write binding with default_upload true after the change.",
7767
+ "http": "POST",
7768
+ "path": "/cut/v1/projects/{project_id}/bindings",
7769
+ "streaming": "no",
7770
+ "pagination": false,
7771
+ "pathParams": [
7772
+ {
7773
+ "name": "project_id",
7774
+ "sdkName": "project_id",
7775
+ "description": "Project identifier returned by its create or list operation; use the id, not a display name."
7776
+ }
7777
+ ],
7778
+ "query": [],
7779
+ "body": {
7780
+ "required": true,
7781
+ "fields": [
7782
+ {
7783
+ "name": "binding",
7784
+ "type": "object",
7785
+ "required": true,
7786
+ "description": "A named project link to a media library. Exactly one read_write binding must be default_upload."
7787
+ }
7788
+ ]
7789
+ }
7790
+ },
7791
+ {
7792
+ "resource": "cut.projects.bindings",
7793
+ "method": "delete",
7794
+ "summary": "Remove library binding",
7795
+ "description": "Detach a library alias obtained from bindings.list after removing all timeline clips that reference its library. BINDING_IN_USE returns 409 while references remain; inspect timeline and edit those clips first. Removal must preserve the one writable default upload binding.",
7796
+ "http": "DELETE",
7797
+ "path": "/cut/v1/projects/{project_id}/bindings/{name}",
7798
+ "streaming": "no",
7799
+ "pagination": false,
7800
+ "pathParams": [
7801
+ {
7802
+ "name": "project_id",
7803
+ "sdkName": "project_id",
7804
+ "description": "Project identifier returned by its create or list operation; use the id, not a display name."
7805
+ },
7806
+ {
7807
+ "name": "name",
7808
+ "sdkName": "name",
7809
+ "description": "Project-local binding alias from bindings.list; detach only after removing all clips that reference its library."
7810
+ }
7811
+ ],
7812
+ "query": []
7813
+ },
7814
+ {
7815
+ "resource": "cut.projects.exports",
7816
+ "method": "list",
7817
+ "summary": "List project exports",
7818
+ "description": "Find export jobs associated with this project before polling or canceling a render. Copy an export id into praxis.cut.exports.retrieve or cancel. Continue with next_page_token as page_token when present; queued or in-progress jobs have not produced a final media asset.",
7819
+ "http": "GET",
7820
+ "path": "/cut/v1/projects/{project_id}/exports",
7821
+ "streaming": "no",
7822
+ "pagination": false,
7823
+ "pathParams": [
7824
+ {
7825
+ "name": "project_id",
7826
+ "sdkName": "project_id",
7827
+ "description": "Project identifier returned by its create or list operation; use the id, not a display name."
7828
+ }
7829
+ ],
7830
+ "query": [
7831
+ {
7832
+ "name": "page_size",
7833
+ "type": "integer",
7834
+ "required": false,
7835
+ "description": "Maximum resources in one page, from 1 to 100; defaults to 50."
7836
+ },
7837
+ {
7838
+ "name": "page_token",
7839
+ "type": "string",
7840
+ "required": false,
7841
+ "description": "Opaque next_page_token from the preceding page; omit on the first request."
7842
+ },
7843
+ {
7844
+ "name": "filter",
7845
+ "type": "string",
7846
+ "required": false,
7847
+ "description": "Optional resource filter; projects supports state = \"active\" or state = \"deleted\"."
7848
+ },
7849
+ {
7850
+ "name": "order_by",
7851
+ "type": "string",
7852
+ "required": false,
7853
+ "description": "Optional ordering expression; projects supports updateTime desc."
7854
+ }
7855
+ ]
7856
+ },
7857
+ {
7858
+ "resource": "cut.projects.exports",
7859
+ "method": "create",
7860
+ "summary": "Create video export",
7861
+ "description": "Start an asynchronous video export from the project into a writable bound media library. Choose binding from bindings.list or omit it for default_upload, and optionally select revision and output settings. HTTP 202 only accepts the job; poll praxis.cut.exports.retrieve using the returned id until status is done, failed or canceled. On done, asset identifies the video written back to praxis.media. Each call starts a job, so retrieve a known job before retrying a submission.",
7862
+ "http": "POST",
7863
+ "path": "/cut/v1/projects/{project_id}/exports",
7864
+ "streaming": "no",
7865
+ "pagination": false,
7866
+ "pathParams": [
7867
+ {
7868
+ "name": "project_id",
7869
+ "sdkName": "project_id",
7870
+ "description": "Project identifier returned by its create or list operation; use the id, not a display name."
7871
+ }
7872
+ ],
7873
+ "query": [],
7874
+ "body": {
7875
+ "required": true,
7876
+ "fields": [
7877
+ {
7878
+ "name": "output",
7879
+ "type": "object",
7880
+ "required": false,
7881
+ "description": "Rendering options for an exported video."
7882
+ },
7883
+ {
7884
+ "name": "binding",
7885
+ "type": "string",
7886
+ "required": false,
7887
+ "description": "Writable binding name used as the export destination; omission uses default_upload."
7888
+ },
7889
+ {
7890
+ "name": "revision",
7891
+ "type": "integer",
7892
+ "required": false,
7893
+ "description": "Committed project revision from retrieve, state, timeline or execute; increases after each successful write."
7894
+ }
7895
+ ]
7896
+ }
7897
+ },
7898
+ {
7899
+ "resource": "cut.projects.frames",
7900
+ "method": "list",
7901
+ "summary": "Render preview frames",
7902
+ "description": "Review the visual result at one or more project times without creating an export. Pass comma-separated seconds in at, such as 12,15.5; scale changes preview size and revision selects a committed project revision. Fetch the returned image URLs before expires_at; render again when they expire.",
7903
+ "http": "GET",
7904
+ "path": "/cut/v1/projects/{project_id}/frames",
7905
+ "streaming": "no",
7906
+ "pagination": false,
7907
+ "pathParams": [
7908
+ {
7909
+ "name": "project_id",
7910
+ "sdkName": "project_id",
7911
+ "description": "Project identifier returned by its create or list operation; use the id, not a display name."
7912
+ }
7913
+ ],
7914
+ "query": [
7915
+ {
7916
+ "name": "at",
7917
+ "type": "string",
7918
+ "required": true,
7919
+ "description": "Required comma-separated non-negative project times in seconds, for example 12,15.5."
7920
+ },
7921
+ {
7922
+ "name": "scale",
7923
+ "type": "number",
7924
+ "required": false,
7925
+ "description": "Positive image size multiplier; 0.5 renders at half the project dimensions."
7926
+ },
7927
+ {
7928
+ "name": "revision",
7929
+ "type": "integer",
7930
+ "required": false,
7931
+ "description": "Optional committed project revision from state or execute; omission selects the current revision."
7932
+ }
7933
+ ]
7934
+ },
7935
+ {
7936
+ "resource": "cut.projects.media",
7937
+ "method": "import",
7938
+ "summary": "Import project media",
7939
+ "description": "Import a URL, data URI or existing file into a writable project media library. Select binding from bindings.list or omit it to use default_upload. Save library_id and asset_id from the result and use them as libraryId and assetId inside execute script media references; overwrites follow the source asset latest version.",
7940
+ "http": "POST",
7941
+ "path": "/cut/v1/projects/{project_id}/media:import",
7942
+ "streaming": "no",
7943
+ "pagination": false,
7944
+ "pathParams": [
7945
+ {
7946
+ "name": "project_id",
7947
+ "sdkName": "project_id",
7948
+ "description": "Project identifier returned by its create or list operation; use the id, not a display name."
7949
+ }
7950
+ ],
7951
+ "query": [],
7952
+ "body": {
7953
+ "required": true,
7954
+ "fields": [
7955
+ {
7956
+ "name": "binding",
7957
+ "type": "string",
7958
+ "required": false,
7959
+ "description": "Writable binding name from project bindings; omission uses default_upload."
7960
+ },
7961
+ {
7962
+ "name": "source",
7963
+ "type": "object",
7964
+ "required": true,
7965
+ "description": "Exactly one input source for the imported asset."
7966
+ },
7967
+ {
7968
+ "name": "display_name",
7969
+ "type": "string",
7970
+ "required": false,
7971
+ "description": "Optional human-readable display name for the new media asset."
7972
+ }
7973
+ ]
7974
+ }
7975
+ },
7976
+ {
7977
+ "resource": "cut.projects",
7978
+ "method": "retrieveState",
7979
+ "summary": "Read editing state",
7980
+ "description": "Read lightweight project context before composing an execute script. Returns current revision, rendering settings, track counts, library bindings and offline media count without individual clips. For complete clip documents or a selected time range, read timeline instead.",
7981
+ "http": "GET",
7982
+ "path": "/cut/v1/projects/{project_id}/state",
7983
+ "streaming": "no",
7984
+ "pagination": false,
7985
+ "pathParams": [
7986
+ {
7987
+ "name": "project_id",
7988
+ "sdkName": "project_id",
7989
+ "description": "Project identifier returned by its create or list operation; use the id, not a display name."
7990
+ }
7991
+ ],
7992
+ "query": []
7993
+ },
7994
+ {
7995
+ "resource": "cut.projects",
7996
+ "method": "retrieveTimeline",
7997
+ "summary": "Read project timeline",
7998
+ "description": "Inspect clips and markers in a selected project range before editing. view=full returns structured tracks with all timeline positions in seconds; view=compact returns compact text for script context. from and to are seconds and tracks limits the selection to comma-separated track ids from state. Concurrent changes while preparing a full timeline return 409; retrieve the latest state and try the read again.",
7999
+ "http": "GET",
8000
+ "path": "/cut/v1/projects/{project_id}/timeline",
8001
+ "streaming": "no",
8002
+ "pagination": false,
8003
+ "pathParams": [
8004
+ {
8005
+ "name": "project_id",
8006
+ "sdkName": "project_id",
8007
+ "description": "Project identifier returned by its create or list operation; use the id, not a display name."
8008
+ }
8009
+ ],
8010
+ "query": [
8011
+ {
8012
+ "name": "view",
8013
+ "type": "string",
8014
+ "enum": [
8015
+ "full",
8016
+ "compact"
8017
+ ],
8018
+ "required": false,
8019
+ "description": "full returns structured clips; compact returns compact textual editing context."
8020
+ },
8021
+ {
8022
+ "name": "from",
8023
+ "type": "number",
8024
+ "required": false,
8025
+ "description": "Optional start of the selected project range in seconds; omit for the beginning."
8026
+ },
8027
+ {
8028
+ "name": "to",
8029
+ "type": "number",
8030
+ "required": false,
8031
+ "description": "Optional end of the selected project range in seconds; omit for the end."
8032
+ },
8033
+ {
8034
+ "name": "tracks",
8035
+ "type": "string",
8036
+ "required": false,
8037
+ "description": "Comma-separated track ids from state to include; omit to include every track."
8038
+ }
8039
+ ]
8040
+ },
8041
+ {
8042
+ "resource": "cut.projects.versions",
8043
+ "method": "list",
8044
+ "summary": "List saved versions",
8045
+ "description": "Find saved timeline snapshots for this project and obtain version_id values for restore. A saved version records its original revision; restoring it creates a new current revision rather than rewinding the revision counter. Continue with next_page_token as page_token until absent.",
8046
+ "http": "GET",
8047
+ "path": "/cut/v1/projects/{project_id}/versions",
8048
+ "streaming": "no",
8049
+ "pagination": false,
8050
+ "pathParams": [
8051
+ {
8052
+ "name": "project_id",
8053
+ "sdkName": "project_id",
8054
+ "description": "Project identifier returned by its create or list operation; use the id, not a display name."
8055
+ }
8056
+ ],
8057
+ "query": [
8058
+ {
8059
+ "name": "page_size",
8060
+ "type": "integer",
8061
+ "required": false,
8062
+ "description": "Maximum resources in one page, from 1 to 100; defaults to 50."
8063
+ },
8064
+ {
8065
+ "name": "page_token",
8066
+ "type": "string",
8067
+ "required": false,
8068
+ "description": "Opaque next_page_token from the preceding page; omit on the first request."
8069
+ },
8070
+ {
8071
+ "name": "filter",
8072
+ "type": "string",
8073
+ "required": false,
8074
+ "description": "Optional resource filter; projects supports state = \"active\" or state = \"deleted\"."
8075
+ },
8076
+ {
8077
+ "name": "order_by",
8078
+ "type": "string",
8079
+ "required": false,
8080
+ "description": "Optional ordering expression; projects supports updateTime desc."
8081
+ }
8082
+ ]
8083
+ },
8084
+ {
8085
+ "resource": "cut.projects.versions",
8086
+ "method": "create",
8087
+ "summary": "Save project version",
8088
+ "description": "Save the current project timeline as a named recovery point before a substantial edit. Supply an optional label or send an empty object; keep the returned version id for versions.restore. Saving a version does not publish a rendered asset; use projects.exports.create for video output.",
8089
+ "http": "POST",
8090
+ "path": "/cut/v1/projects/{project_id}/versions",
8091
+ "streaming": "no",
8092
+ "pagination": false,
8093
+ "pathParams": [
8094
+ {
8095
+ "name": "project_id",
8096
+ "sdkName": "project_id",
8097
+ "description": "Project identifier returned by its create or list operation; use the id, not a display name."
8098
+ }
8099
+ ],
8100
+ "query": [],
8101
+ "body": {
8102
+ "required": true,
8103
+ "fields": [
8104
+ {
8105
+ "name": "label",
8106
+ "type": "string",
8107
+ "required": false,
8108
+ "description": "Human-readable snapshot label, such as Before captions."
8109
+ }
8110
+ ]
8111
+ }
8112
+ },
8113
+ {
8114
+ "resource": "cut.projects",
8115
+ "method": "execute",
8116
+ "summary": "Execute editing script",
8117
+ "description": "Edit the current timeline atomically using synchronous JavaScript source. Read state or timeline first, then pass its revision as expected_revision to detect concurrent changes. Use AddTrack, Insert, Update, Delete, Split, Trim, Move, RippleDeleteRange, UpdateTrack, DeleteTrack, SetSettings, AddCaptionsFromTranscript and SetMarker for writes; GetTimeline, GetItem, FindItems, GetMedia, GetTranscript and GetAnalysis read editing context; Print emits text and Preview requests frame previews. All script times are seconds; script object fields use camelCase, for example `media: {libraryId, assetId}`. Unlike Shotstack, execute applies script edits to a persistent project in one transaction. Provide script or a saved edit_id with literal edits, never both; failures roll back writes. A revision conflict while preparing the response may follow a committed edit: retrieve state before retrying. Minimal script after creating a project:\n\n```js\nconst t = AddTrack(\"video\");\nInsert(t, {type: \"color\", color: \"#123456\", start: 0, length: 3});\nPrint(t);\n```",
8118
+ "http": "POST",
8119
+ "path": "/cut/v1/projects/{project_id}:execute",
8120
+ "streaming": "no",
8121
+ "pagination": false,
8122
+ "pathParams": [
8123
+ {
8124
+ "name": "project_id",
8125
+ "sdkName": "project_id",
8126
+ "description": "Project identifier returned by its create or list operation; use the id, not a display name."
8127
+ }
8128
+ ],
8129
+ "query": [],
8130
+ "body": {
8131
+ "required": true,
8132
+ "fields": [
8133
+ {
8134
+ "name": "script",
8135
+ "type": "string",
8136
+ "required": false,
8137
+ "description": "Synchronous editing source using Cut execute functions; submit this or edit_id, never both. Script source is opaque: function names and object fields inside JavaScript use their documented camelCase spelling."
8138
+ },
8139
+ {
8140
+ "name": "edit_id",
8141
+ "type": "string",
8142
+ "required": false,
8143
+ "description": "Saved failed script identifier from error.details.edit_id; valid for ten minutes."
8144
+ },
8145
+ {
8146
+ "name": "edits",
8147
+ "type": "array",
8148
+ "itemType": "object",
8149
+ "required": false,
8150
+ "description": "Literal replacements applied to the saved source before rerunning."
8151
+ },
8152
+ {
8153
+ "name": "expected_revision",
8154
+ "type": "integer",
8155
+ "required": false,
8156
+ "description": "Committed project revision from retrieve, state, timeline or execute; increases after each successful write."
8157
+ }
8158
+ ]
8159
+ }
8160
+ },
8161
+ {
8162
+ "resource": "cut.projects",
8163
+ "method": "undelete",
8164
+ "summary": "Restore deleted project",
8165
+ "description": "Return a retained deleted project to active state before its purge_time. Obtain project_id from projects.list filtered to deleted projects. This restores the project, not an older timeline revision; use versions.restore when reverting editing content.",
8166
+ "http": "POST",
8167
+ "path": "/cut/v1/projects/{project_id}:undelete",
8168
+ "streaming": "no",
8169
+ "pagination": false,
8170
+ "pathParams": [
8171
+ {
8172
+ "name": "project_id",
8173
+ "sdkName": "project_id",
8174
+ "description": "Project identifier returned by its create or list operation; use the id, not a display name."
8175
+ }
8176
+ ],
8177
+ "query": []
8178
+ },
8179
+ {
8180
+ "resource": "cut.versions",
8181
+ "method": "restore",
8182
+ "summary": "Restore saved version",
8183
+ "description": "Replace current editing content with a saved project snapshot selected from projects.versions.list. The restore commits a new transaction and revision while preserving the saved version for future use. Inspect the returned summary and timeline before further editing; a response revision conflict can follow a committed restore, so retrieve current state before retrying.",
8184
+ "http": "POST",
8185
+ "path": "/cut/v1/versions/{version_id}:restore",
8186
+ "streaming": "no",
8187
+ "pagination": false,
8188
+ "pathParams": [
8189
+ {
8190
+ "name": "version_id",
8191
+ "sdkName": "version_id",
8192
+ "description": "Version identifier returned by its create or list operation; use the id, not a display name."
8193
+ }
8194
+ ],
8195
+ "query": []
8196
+ },
8197
+ {
8198
+ "resource": "database.databases",
8199
+ "method": "list",
8200
+ "summary": "List databases",
8201
+ "description": "Find databases owned by your tenant and obtain their ids for schema or row operations. Excludes deleting by default. status=active or status=deleting selects that state; invalid values return 400 INVALID_PARAMS.",
8202
+ "http": "GET",
8203
+ "path": "/database/v1/databases",
8204
+ "streaming": "no",
8205
+ "pagination": true,
8206
+ "pathParams": [],
8207
+ "query": [
8208
+ {
8209
+ "name": "cursor",
8210
+ "type": "string",
8211
+ "required": false,
8212
+ "description": "Opaque next_cursor from the previous page."
8213
+ },
8214
+ {
8215
+ "name": "limit",
8216
+ "type": "integer",
8217
+ "required": false,
8218
+ "description": "Page size."
8219
+ },
8220
+ {
8221
+ "name": "labels",
8222
+ "type": "object",
8223
+ "required": false,
8224
+ "description": "Exact label match, encoded as labels[purpose]=docs."
8225
+ },
8226
+ {
8227
+ "name": "status",
8228
+ "type": "string",
8229
+ "enum": [
8230
+ "active",
8231
+ "deleting"
8232
+ ],
8233
+ "required": false,
8234
+ "description": "Filter by lifecycle state. active (the default when omitted) lists usable databases; deleting lists databases that were deleted and are still inside the seven-day restore window. Any other value returns 400 INVALID_PARAMS."
8235
+ }
8236
+ ]
8237
+ },
8238
+ {
8239
+ "resource": "database.databases",
8240
+ "method": "create",
8241
+ "summary": "Create database",
8242
+ "description": "Creates an empty database for the caller and returns it with status active (HTTP 201); add tables next with praxis.database.databases.tables.create. name is required and is 1–64 visible characters after trimming. labels are optional string tags (at most 64; each key starts with a lowercase letter and uses up to 63 characters of a-z 0-9 _ -; each value is up to 63 characters of a-z 0-9 _ -) that databaseListDatabases can filter on. If initialization fails the call returns 503 CAPACITY and the half-created database is left with status failed; retry by calling create again, which makes a new database. Unlike Supabase, this creates a SQLite-backed database without a PostgreSQL connection or SQL execution endpoint. Use a Praxis credential; access is scoped to its tenant, not to Supabase Auth users or RLS policies.",
8243
+ "http": "POST",
8244
+ "path": "/database/v1/databases",
8245
+ "streaming": "no",
8246
+ "pagination": false,
8247
+ "pathParams": [],
8248
+ "query": [],
8249
+ "body": {
8250
+ "required": true,
8251
+ "fields": [
8252
+ {
8253
+ "name": "name",
8254
+ "type": "string",
8255
+ "required": true,
8256
+ "description": "Display name for the database: 1–64 visible characters after trimming; control characters are rejected. It is not an identifier, so later calls still use the returned id."
8257
+ },
8258
+ {
8259
+ "name": "labels",
8260
+ "type": "object",
8261
+ "required": false,
8262
+ "description": "Optional string tags to attach, at most 64. Each key starts with a lowercase letter and may use up to 63 characters of a-z 0-9 _ -; each value is up to 63 characters of a-z 0-9 _ -. List calls filter on exact key and value pairs."
8263
+ }
8264
+ ]
8265
+ }
8266
+ },
8267
+ {
8268
+ "resource": "database.databases",
8269
+ "method": "delete",
8270
+ "summary": "Delete database",
8271
+ "description": "Soft-delete a database when it should stop accepting schema and row operations. Idempotently enters deleting with a seven-day purge_at. GET remains available; child operations return 409 until restored.",
8272
+ "http": "DELETE",
8273
+ "path": "/database/v1/databases/{database_id}",
8274
+ "streaming": "no",
8275
+ "pagination": false,
8276
+ "pathParams": [
8277
+ {
8278
+ "name": "database_id",
8279
+ "sdkName": "database_id",
8280
+ "description": "Identifier of the database to act on: the id (db_…) returned by databaseCreateDatabase or databaseListDatabases. A display name is not accepted."
8281
+ }
8282
+ ],
8283
+ "query": []
8284
+ },
8285
+ {
8286
+ "resource": "database.databases",
8287
+ "method": "retrieve",
8288
+ "summary": "Get database",
8289
+ "description": "Returns one database by id, including a database in the deleting state (purge_at then shows when it will be permanently removed). Call it before table or row operations to confirm status is active: schema and row calls on a deleting database return 409 DATABASE_INVALID_STATE. size_bytes is refreshed from live storage at most once every five seconds. A purged or unknown id returns 404 DATABASE_NOT_FOUND.",
8290
+ "http": "GET",
8291
+ "path": "/database/v1/databases/{database_id}",
8292
+ "streaming": "no",
8293
+ "pagination": false,
8294
+ "pathParams": [
8295
+ {
8296
+ "name": "database_id",
8297
+ "sdkName": "database_id",
8298
+ "description": "Identifier of the database to act on: the id (db_…) returned by databaseCreateDatabase or databaseListDatabases. A display name is not accepted."
8299
+ }
8300
+ ],
8301
+ "query": []
8302
+ },
8303
+ {
8304
+ "resource": "database.databases",
8305
+ "method": "update",
8306
+ "summary": "Update database",
8307
+ "description": "Renames an active database and/or replaces its labels; send only the keys you want to change. labels is replaced as a whole, not merged, so include every label you want to keep. A body without name or labels, or with values equal to the current ones, changes nothing and leaves updated_at as is. A database in the deleting state returns 409 DATABASE_INVALID_STATE; restore it first with databaseRestoreDatabase.",
8308
+ "http": "PATCH",
8309
+ "path": "/database/v1/databases/{database_id}",
8310
+ "streaming": "no",
8311
+ "pagination": false,
8312
+ "pathParams": [
8313
+ {
8314
+ "name": "database_id",
8315
+ "sdkName": "database_id",
8316
+ "description": "Identifier of the database to act on: the id (db_…) returned by databaseCreateDatabase or databaseListDatabases. A display name is not accepted."
8317
+ }
8318
+ ],
8319
+ "query": [],
8320
+ "body": {
8321
+ "required": true,
8322
+ "fields": [
8323
+ {
8324
+ "name": "name",
8325
+ "type": "string",
8326
+ "required": false,
8327
+ "description": "New display name, 1–64 visible characters after trimming. Omit it to keep the current name."
8328
+ },
8329
+ {
8330
+ "name": "labels",
8331
+ "type": "object",
8332
+ "required": false,
8333
+ "description": "Complete replacement label set, not a merge: labels not listed here are removed. Same limits as at creation (at most 64; keys a-z 0-9 _ - starting with a letter; values up to 63 characters of a-z 0-9 _ -). Omit it to keep the current labels."
8334
+ }
8335
+ ]
8336
+ }
8337
+ },
8338
+ {
8339
+ "resource": "database.databases.events",
8340
+ "method": "list",
8341
+ "summary": "List events",
8342
+ "description": "Read lifecycle and schema events, including while the database is deleting. next_cursor is an opaque string cursor (do not do arithmetic on it): pass it as after_seq for asc or before_seq for desc. Supplying both cursors returns 400 INVALID_PARAMS. Unlike Supabase Realtime, this is paged lifecycle and schema history, not a subscription or a row-change feed; row inserts, updates and deletes do not appear here.",
8343
+ "http": "GET",
8344
+ "path": "/database/v1/databases/{database_id}/events",
8345
+ "streaming": "no",
8346
+ "pagination": false,
8347
+ "pathParams": [
8348
+ {
8349
+ "name": "database_id",
8350
+ "sdkName": "database_id",
8351
+ "description": "Identifier of the database to act on: the id (db_…) returned by databaseCreateDatabase or databaseListDatabases. A display name is not accepted."
8352
+ }
8353
+ ],
8354
+ "query": [
8355
+ {
8356
+ "name": "after_seq",
8357
+ "type": "integer",
8358
+ "required": false,
8359
+ "description": "With order=asc, return only events with seq greater than this value. Cannot be combined with before_seq."
8360
+ },
8361
+ {
8362
+ "name": "limit",
8363
+ "type": "integer",
8364
+ "required": false,
8365
+ "description": "Page size."
8366
+ },
8367
+ {
8368
+ "name": "order",
8369
+ "type": "string",
8370
+ "enum": [
8371
+ "asc",
8372
+ "desc"
8373
+ ],
8374
+ "required": false,
8375
+ "description": "Sequence order: asc or desc (newest first). Defaults to asc, or to desc when before_seq is supplied."
8376
+ },
8377
+ {
8378
+ "name": "before_seq",
8379
+ "type": "integer",
8380
+ "required": false,
8381
+ "description": "Return only events with seq less than this value, newest first; implies order=desc when order is omitted. Cannot be combined with after_seq or order=asc."
8382
+ }
8383
+ ]
8384
+ },
8385
+ {
8386
+ "resource": "database.databases.purge",
8387
+ "method": "create",
8388
+ "summary": "Permanently purge database",
8389
+ "description": "Immediately and irreversibly purges a deleting database. Active databases return 409; absent or already purged databases return 404.",
8390
+ "http": "POST",
8391
+ "path": "/database/v1/databases/{database_id}/purge",
8392
+ "streaming": "no",
8393
+ "pagination": false,
8394
+ "pathParams": [
8395
+ {
8396
+ "name": "database_id",
8397
+ "sdkName": "database_id",
8398
+ "description": "Identifier of the database to act on: the id (db_…) returned by databaseCreateDatabase or databaseListDatabases. A display name is not accepted."
8399
+ }
8400
+ ],
8401
+ "query": []
8402
+ },
8403
+ {
8404
+ "resource": "database.databases.rest",
8405
+ "method": "delete",
8406
+ "summary": "Delete rows",
8407
+ "description": "Deletes the rows matched by the filter query parameters (the same filters as databaseSelect); with no filter every row of the table matches. Deletion is immediate and cannot be undone. A row that a link field of another table still references makes the whole call fail with 409 REFERENCE_RESTRICT and nothing is deleted. The default response is 204 with no body; send Prefer: return=representation to get HTTP 200 with the deleted rows.",
8408
+ "http": "DELETE",
8409
+ "path": "/database/v1/databases/{database_id}/rest/{table}",
8410
+ "streaming": "no",
8411
+ "pagination": false,
8412
+ "pathParams": [
8413
+ {
8414
+ "name": "database_id",
8415
+ "sdkName": "database_id",
8416
+ "description": "Identifier of the database to act on: the id (db_…) returned by databaseCreateDatabase or databaseListDatabases. A display name is not accepted."
8417
+ },
8418
+ {
8419
+ "name": "table",
8420
+ "sdkName": "table",
8421
+ "description": "table ID or name."
8422
+ }
8423
+ ],
8424
+ "query": [
8425
+ {
8426
+ "name": "select",
8427
+ "type": "string",
8428
+ "required": false,
8429
+ "description": "Comma-separated columns; supports *, aliases, JSON paths and link-based embedding. Casts, aggregates, spread and join modifiers are unsupported."
8430
+ },
8431
+ {
8432
+ "name": "{column}",
8433
+ "type": "string",
8434
+ "required": false,
8435
+ "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."
8436
+ },
8437
+ {
8438
+ "name": "and",
7528
8439
  "type": "string",
7529
8440
  "required": false,
7530
8441
  "description": "Parenthesized conditions, e.g. (done.eq.false,title.neq.draft)."
@@ -11806,7 +12717,8 @@ export const operations = [
11806
12717
  "openai.images.edits",
11807
12718
  "openai.images.generations",
11808
12719
  "openai.responses",
11809
- "openai.videos"
12720
+ "openai.videos",
12721
+ "typesafe.systemone"
11810
12722
  ],
11811
12723
  "required": false,
11812
12724
  "description": "Match any comma-separated declared protocol ID; omitted or empty includes all models. Combined with type and output_modalities using AND. Invalid IDs return 400 with all legal values."
@@ -12381,6 +13293,47 @@ export const operations = [
12381
13293
  ],
12382
13294
  "query": []
12383
13295
  },
13296
+ {
13297
+ "resource": "model.systemone",
13298
+ "method": "create",
13299
+ "summary": "Ask structured decision questions",
13300
+ "description": "Ask typed questions about a state and get calibrated probabilities instead of generated text. Same request and response as TypeSafe System One. Use model ids from model.models.list declaring typesafe.systemone. Send one or more noul, choice or score questions; answers use the same question ids. Input tokens are charged at the catalog input price; output tokens are free. usage.cost and X-Praxis-Cost-Usd expose the same customer charge in USD. box questions and assets are unsupported and return 400: images are not supported. Unknown top-level fields pass unchanged to the native upstream.",
13301
+ "http": "POST",
13302
+ "path": "/model/v1/systemone",
13303
+ "streaming": "no",
13304
+ "pagination": false,
13305
+ "pathParams": [],
13306
+ "query": [],
13307
+ "body": {
13308
+ "required": true,
13309
+ "fields": [
13310
+ {
13311
+ "name": "model",
13312
+ "type": "string",
13313
+ "required": true,
13314
+ "description": "Published model id from model.models.list with supported_apis containing typesafe.systemone; returned unchanged in the response."
13315
+ },
13316
+ {
13317
+ "name": "state",
13318
+ "type": "object",
13319
+ "required": true,
13320
+ "description": "Shared content evaluated by every question, supplied as text, a JSON object or an array."
13321
+ },
13322
+ {
13323
+ "name": "questions",
13324
+ "type": "object",
13325
+ "required": true,
13326
+ "description": "Non-empty map of caller-chosen question ids to typed questions; answers preserve these ids. noul evaluates yes/no, choice selects a named option, score rates ordered levels. box is unsupported."
13327
+ },
13328
+ {
13329
+ "name": "assets",
13330
+ "type": "object",
13331
+ "required": false,
13332
+ "description": "Unsupported image assets. Supplying this field, including null or an empty collection, returns 400: images are not supported."
13333
+ }
13334
+ ]
13335
+ }
13336
+ },
12384
13337
  {
12385
13338
  "resource": "model.videos",
12386
13339
  "method": "list",