@1claw/openapi-spec 0.61.25 → 0.61.27

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.
Files changed (3) hide show
  1. package/openapi.json +224 -2
  2. package/openapi.yaml +170 -8
  3. package/package.json +1 -1
package/openapi.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "openapi": "3.1.0",
3
3
  "info": {
4
4
  "title": "1Claw API",
5
- "version": "0.61.25",
5
+ "version": "0.61.27",
6
6
  "description": "Secure secret management for AI agents. Provides vaults, secrets,\npolicy-based access control, agent identity, Intents API,\nsharing, billing, and audit logging. Automations (workflow_spec,\nwebhook tokens, event triggers, Assist), cloud runtimes with\ninteractive shell sessions, agent memory, and discovery.\n\n## Domains\n\n`api.1claw.co` is canonical: it is the OIDC issuer, the `aud` the API\nmints, and the first entry in `servers` — a generated client takes its\nbase URL from there, and the previous ordering pointed every SDK at the\ndomain the issuer had already left. `api.1claw.xyz` still answers and is\nstill accepted on token validation, because tokens minted before the\nmove carry it; it is never minted now.\n\nOne deliberate exception: the Shroud attestation identity token is\nrequested from GCP with `audience: https://api.1claw.xyz`, so\n`/v1/shroud/attestation` reports that as its `expected_audience`. That\nis accurate rather than stale — the audience is a verification contract\nwith anyone already checking the token, and moving it is a breaking\nchange for them, not a rename.\n\nAll endpoints require JWT Bearer authentication unless marked with\n`security: []`.\n",
7
7
  "contact": {
8
8
  "email": "ops@1claw.co"
@@ -3861,6 +3861,136 @@
3861
3861
  }
3862
3862
  }
3863
3863
  },
3864
+ "/v1/agents/{agent_id}/children": {
3865
+ "parameters": [
3866
+ {
3867
+ "name": "agent_id",
3868
+ "in": "path",
3869
+ "required": true,
3870
+ "schema": {
3871
+ "type": "string",
3872
+ "format": "uuid"
3873
+ }
3874
+ }
3875
+ ],
3876
+ "get": {
3877
+ "tags": [
3878
+ "Agents"
3879
+ ],
3880
+ "summary": "List an agent's child agents",
3881
+ "operationId": "listChildAgents",
3882
+ "security": [
3883
+ {
3884
+ "BearerAuth": []
3885
+ }
3886
+ ],
3887
+ "responses": {
3888
+ "200": {
3889
+ "description": "Children",
3890
+ "content": {
3891
+ "application/json": {
3892
+ "schema": {
3893
+ "$ref": "#/components/schemas/AgentListResponse"
3894
+ }
3895
+ }
3896
+ }
3897
+ },
3898
+ "404": {
3899
+ "$ref": "#/components/responses/NotFound"
3900
+ }
3901
+ }
3902
+ },
3903
+ "post": {
3904
+ "tags": [
3905
+ "Agents"
3906
+ ],
3907
+ "summary": "Create a child agent",
3908
+ "description": "A cheap sub-agent under a parent. The child has its own API key, memory\nnamespaces and `action_approval_policy`; is created with a subset of the\nparent's `vault_ids` and `scopes` (a superset is refused, not trimmed);\ninherits the parent's vault access policies (policy lookups include the\nparent's rows) and guardrails; does not count against the plan's agent cap\n(capped at 50 per parent); and cannot have children of its own. Human-only.\nAudited as `agent.child_created`.\n",
3909
+ "operationId": "createChildAgent",
3910
+ "security": [
3911
+ {
3912
+ "BearerAuth": []
3913
+ }
3914
+ ],
3915
+ "requestBody": {
3916
+ "required": true,
3917
+ "content": {
3918
+ "application/json": {
3919
+ "schema": {
3920
+ "type": "object",
3921
+ "required": [
3922
+ "name"
3923
+ ],
3924
+ "properties": {
3925
+ "name": {
3926
+ "type": "string",
3927
+ "maxLength": 100
3928
+ },
3929
+ "description": {
3930
+ "type": "string"
3931
+ },
3932
+ "vault_ids": {
3933
+ "type": "array",
3934
+ "items": {
3935
+ "type": "string",
3936
+ "format": "uuid"
3937
+ },
3938
+ "description": "Subset of the parent's vault_ids. Default the parent's."
3939
+ },
3940
+ "scopes": {
3941
+ "type": "array",
3942
+ "items": {
3943
+ "type": "string"
3944
+ },
3945
+ "description": "Subset of the parent's scopes. Default the parent's."
3946
+ },
3947
+ "memory_namespace_allowlist": {
3948
+ "type": "array",
3949
+ "items": {
3950
+ "type": "string"
3951
+ },
3952
+ "description": "The child's own namespaces. Default `[\"child:{child_id}\"]`."
3953
+ },
3954
+ "action_approval_policy": {
3955
+ "type": "object",
3956
+ "description": "The child's own policy. Default the parent's."
3957
+ },
3958
+ "expires_at": {
3959
+ "type": "string",
3960
+ "format": "date-time"
3961
+ },
3962
+ "approval_id": {
3963
+ "type": "string",
3964
+ "format": "uuid"
3965
+ }
3966
+ }
3967
+ }
3968
+ }
3969
+ }
3970
+ },
3971
+ "responses": {
3972
+ "201": {
3973
+ "description": "Created; `api_key` shown once",
3974
+ "content": {
3975
+ "application/json": {
3976
+ "schema": {
3977
+ "$ref": "#/components/schemas/AgentCreatedResponse"
3978
+ }
3979
+ }
3980
+ }
3981
+ },
3982
+ "400": {
3983
+ "$ref": "#/components/responses/BadRequest"
3984
+ },
3985
+ "403": {
3986
+ "$ref": "#/components/responses/Forbidden"
3987
+ },
3988
+ "404": {
3989
+ "$ref": "#/components/responses/NotFound"
3990
+ }
3991
+ }
3992
+ }
3993
+ },
3864
3994
  "/v1/agents/{agent_id}/rotate-key": {
3865
3995
  "post": {
3866
3996
  "tags": [
@@ -19001,6 +19131,73 @@
19001
19131
  }
19002
19132
  }
19003
19133
  },
19134
+ "/v1/automations/{automationId}/runs/{runId}/resume": {
19135
+ "post": {
19136
+ "tags": [
19137
+ "Automations"
19138
+ ],
19139
+ "summary": "Resume a run parked on an approval",
19140
+ "operationId": "resumeAutomationRun",
19141
+ "description": "An `approval_request` step parks the run in `awaiting_approval` and stops the\nclock. Deciding that approval — via the API, the one-tap email link or the\nphone — resumes the run automatically: `approved` continues from the next\nstep, `rejected` fails the run with the reason. This route is the hand-off\nfor a decision made elsewhere: it marks the approval approved on the caller's\nbehalf and continues the run. Human-only. Idempotent — a run that is not\nparked is returned unchanged. Later steps see the approval step's output as\n`{status, approval_id}` and the optional `payload` as `{{resume.*}}`. A\nparked run that nobody decides within 72 hours becomes `timed_out`.\nEmits `automation.run.resumed`.\n",
19142
+ "parameters": [
19143
+ {
19144
+ "name": "automationId",
19145
+ "in": "path",
19146
+ "required": true,
19147
+ "schema": {
19148
+ "type": "string",
19149
+ "format": "uuid"
19150
+ }
19151
+ },
19152
+ {
19153
+ "name": "runId",
19154
+ "in": "path",
19155
+ "required": true,
19156
+ "schema": {
19157
+ "type": "string",
19158
+ "format": "uuid"
19159
+ }
19160
+ }
19161
+ ],
19162
+ "requestBody": {
19163
+ "required": false,
19164
+ "content": {
19165
+ "application/json": {
19166
+ "schema": {
19167
+ "type": "object",
19168
+ "properties": {
19169
+ "payload": {
19170
+ "type": "object",
19171
+ "description": "Exposed to later steps as `{{resume.*}}`."
19172
+ }
19173
+ }
19174
+ }
19175
+ }
19176
+ }
19177
+ },
19178
+ "responses": {
19179
+ "200": {
19180
+ "description": "The run, now running (or unchanged if it was not parked)",
19181
+ "content": {
19182
+ "application/json": {
19183
+ "schema": {
19184
+ "$ref": "#/components/schemas/AutomationRunResponse"
19185
+ }
19186
+ }
19187
+ }
19188
+ },
19189
+ "401": {
19190
+ "$ref": "#/components/responses/Unauthorized"
19191
+ },
19192
+ "403": {
19193
+ "$ref": "#/components/responses/Forbidden"
19194
+ },
19195
+ "404": {
19196
+ "$ref": "#/components/responses/NotFound"
19197
+ }
19198
+ }
19199
+ }
19200
+ },
19004
19201
  "/v1/automations/presets": {
19005
19202
  "get": {
19006
19203
  "tags": [
@@ -20838,7 +21035,7 @@
20838
21035
  "Organization"
20839
21036
  ],
20840
21037
  "summary": "Apply a chart",
20841
- "description": "Create what the chart describes. Human users only.\n\n**Apply calls the same handlers the HTTP routes call.** Creating a vault\nruns five gates before anything is written — the delegation scope, a name\ncheck, control-plane consensus, a creation rate limit and the tier quota\n— and creating an agent runs its own. A reconciler that wrote through the\nrepositories would skip all of them and would look, in review, exactly\nlike one that did not.\n\nSo if your org has consensus configured on `vault.create`, applying a\nchart queues an approval exactly as a dashboard click would. That resource\ncomes back as `awaiting_approval` rather than failing the whole chart.\n\nPer-resource results: `created`, `unchanged`, `skipped`, `refused`,\n`awaiting_approval`, `failed`. `needs_attention` is true when the chart is\nnot fully applied — something is waiting on a person, whether an approval,\nan OAuth sign-in, or a resource that drifted and was left alone.\n\nSave `applied_state` to `.1claw/apply-state.json`. It records what apply\nset, which is what lets the next run tell drift from a first apply.\n\nv1 creates and reports; it does not delete, prune, or patch in place. An\napply that silently deletes is an apply nobody runs twice.\n",
21038
+ "description": "Create what the chart describes. Human users only.\n\n**Apply calls the same handlers the HTTP routes call.** Creating a vault\nruns five gates before anything is written — the delegation scope, a name\ncheck, control-plane consensus, a creation rate limit and the tier quota\n— and creating an agent runs its own. A reconciler that wrote through the\nrepositories would skip all of them and would look, in review, exactly\nlike one that did not.\n\nSo if your org has consensus configured on `vault.create`, applying a\nchart queues an approval exactly as a dashboard click would. That resource\ncomes back as `awaiting_approval` rather than failing the whole chart.\n\nResource kinds, in the order apply walks them: `vault`, `agent`,\n`policy` (one per path pattern, named `vault:agent:path`), `connector`\n(`agent/binding_name`; `authorization_url` on the result when a person\nstill has to sign in) and `binding` (`agent/name`, from\n`spec.agents[].bindings` — declared in full with `binding_type`, `config`,\n`guardrails.allowed_hosts` and an optional `credential: {vault_ref, path}`\npointing into a chart vault). A dependent resource whose vault or agent\nwas queued for approval this run is `skipped` with \"waiting on …\" and is\ncreated by the next apply.\n\nPer-resource results: `created`, `patched`, `unchanged`, `skipped`,\n`refused`, `awaiting_approval`, `failed`. `needs_attention` is true when\nthe chart is not fully applied — something is waiting on a person, whether\nan approval, an OAuth sign-in, or a resource that drifted and was left\nalone.\n\nSave `applied_state` to `.1claw/apply-state.json`. It records what apply\nset, which is what lets the next run tell drift from a first apply.\n\nApply creates, and patches an agent's `description`/`system_prompt` in\nplace through the same `update_agent` gate a dashboard edit takes. Policy\npermissions, binding config and guardrails, connector presets and vault\nfields are create-only: a difference is `refused` with the endpoint that\nowns the change. It does not delete or prune. An apply that silently\ndeletes is an apply nobody runs twice.\n",
20842
21039
  "operationId": "applyChart",
20843
21040
  "requestBody": {
20844
21041
  "required": true,
@@ -20889,6 +21086,7 @@
20889
21086
  "type": "string",
20890
21087
  "enum": [
20891
21088
  "created",
21089
+ "patched",
20892
21090
  "unchanged",
20893
21091
  "skipped",
20894
21092
  "refused",
@@ -20902,6 +21100,10 @@
20902
21100
  },
20903
21101
  "detail": {
20904
21102
  "type": "string"
21103
+ },
21104
+ "authorization_url": {
21105
+ "type": "string",
21106
+ "description": "Connectors only — where a person signs in to finish the install."
20905
21107
  }
20906
21108
  }
20907
21109
  }
@@ -32594,6 +32796,19 @@
32594
32796
  "created_at"
32595
32797
  ],
32596
32798
  "properties": {
32799
+ "agent_type": {
32800
+ "type": "string",
32801
+ "enum": [
32802
+ "standard",
32803
+ "child"
32804
+ ],
32805
+ "description": "A `child` is a sub-agent under `parent_agent_id` that inherits its parent's policies and does not count against the plan's agent cap."
32806
+ },
32807
+ "parent_agent_id": {
32808
+ "type": "string",
32809
+ "format": "uuid",
32810
+ "description": "Present on child agents."
32811
+ },
32597
32812
  "memory_enabled": {
32598
32813
  "type": "boolean",
32599
32814
  "description": "Whether durable key-value and semantic memory is enabled. Omitted when false: the server skips serializing this field unless it is true, so an absent key means disabled."
@@ -43512,6 +43727,13 @@
43512
43727
  "items": {
43513
43728
  "$ref": "#/components/schemas/OAuthAppCredentialResponse"
43514
43729
  }
43730
+ },
43731
+ "platform_defaults": {
43732
+ "type": "array",
43733
+ "items": {
43734
+ "type": "string"
43735
+ },
43736
+ "description": "Provider slugs 1Claw has its own OAuth app for. Where the organization has\nregistered no credentials for one of these, connections use 1Claw's app;\nan organization credential for the same provider always wins.\n"
43515
43737
  }
43516
43738
  }
43517
43739
  },
package/openapi.yaml CHANGED
@@ -2,7 +2,7 @@ openapi: 3.1.0
2
2
 
3
3
  info:
4
4
  title: 1Claw API
5
- version: "0.61.25"
5
+ version: "0.61.27"
6
6
  description: |
7
7
  Secure secret management for AI agents. Provides vaults, secrets,
8
8
  policy-based access control, agent identity, Intents API,
@@ -2568,6 +2568,82 @@ paths:
2568
2568
  "404":
2569
2569
  $ref: "#/components/responses/NotFound"
2570
2570
 
2571
+ /v1/agents/{agent_id}/children:
2572
+ parameters:
2573
+ - name: agent_id
2574
+ in: path
2575
+ required: true
2576
+ schema: { type: string, format: uuid }
2577
+ get:
2578
+ tags: [Agents]
2579
+ summary: List an agent's child agents
2580
+ operationId: listChildAgents
2581
+ security:
2582
+ - BearerAuth: []
2583
+ responses:
2584
+ "200":
2585
+ description: Children
2586
+ content:
2587
+ application/json:
2588
+ schema:
2589
+ $ref: "#/components/schemas/AgentListResponse"
2590
+ "404":
2591
+ $ref: "#/components/responses/NotFound"
2592
+ post:
2593
+ tags: [Agents]
2594
+ summary: Create a child agent
2595
+ description: |
2596
+ A cheap sub-agent under a parent. The child has its own API key, memory
2597
+ namespaces and `action_approval_policy`; is created with a subset of the
2598
+ parent's `vault_ids` and `scopes` (a superset is refused, not trimmed);
2599
+ inherits the parent's vault access policies (policy lookups include the
2600
+ parent's rows) and guardrails; does not count against the plan's agent cap
2601
+ (capped at 50 per parent); and cannot have children of its own. Human-only.
2602
+ Audited as `agent.child_created`.
2603
+ operationId: createChildAgent
2604
+ security:
2605
+ - BearerAuth: []
2606
+ requestBody:
2607
+ required: true
2608
+ content:
2609
+ application/json:
2610
+ schema:
2611
+ type: object
2612
+ required: [name]
2613
+ properties:
2614
+ name: { type: string, maxLength: 100 }
2615
+ description: { type: string }
2616
+ vault_ids:
2617
+ type: array
2618
+ items: { type: string, format: uuid }
2619
+ description: Subset of the parent's vault_ids. Default the parent's.
2620
+ scopes:
2621
+ type: array
2622
+ items: { type: string }
2623
+ description: Subset of the parent's scopes. Default the parent's.
2624
+ memory_namespace_allowlist:
2625
+ type: array
2626
+ items: { type: string }
2627
+ description: The child's own namespaces. Default `["child:{child_id}"]`.
2628
+ action_approval_policy:
2629
+ type: object
2630
+ description: The child's own policy. Default the parent's.
2631
+ expires_at: { type: string, format: date-time }
2632
+ approval_id: { type: string, format: uuid }
2633
+ responses:
2634
+ "201":
2635
+ description: Created; `api_key` shown once
2636
+ content:
2637
+ application/json:
2638
+ schema:
2639
+ $ref: "#/components/schemas/AgentCreatedResponse"
2640
+ "400":
2641
+ $ref: "#/components/responses/BadRequest"
2642
+ "403":
2643
+ $ref: "#/components/responses/Forbidden"
2644
+ "404":
2645
+ $ref: "#/components/responses/NotFound"
2646
+
2571
2647
  /v1/agents/{agent_id}/rotate-key:
2572
2648
  post:
2573
2649
  tags: [Agents]
@@ -12079,6 +12155,59 @@ paths:
12079
12155
  "404":
12080
12156
  $ref: "#/components/responses/NotFound"
12081
12157
 
12158
+ /v1/automations/{automationId}/runs/{runId}/resume:
12159
+ post:
12160
+ tags: [Automations]
12161
+ summary: Resume a run parked on an approval
12162
+ operationId: resumeAutomationRun
12163
+ description: |
12164
+ An `approval_request` step parks the run in `awaiting_approval` and stops the
12165
+ clock. Deciding that approval — via the API, the one-tap email link or the
12166
+ phone — resumes the run automatically: `approved` continues from the next
12167
+ step, `rejected` fails the run with the reason. This route is the hand-off
12168
+ for a decision made elsewhere: it marks the approval approved on the caller's
12169
+ behalf and continues the run. Human-only. Idempotent — a run that is not
12170
+ parked is returned unchanged. Later steps see the approval step's output as
12171
+ `{status, approval_id}` and the optional `payload` as `{{resume.*}}`. A
12172
+ parked run that nobody decides within 72 hours becomes `timed_out`.
12173
+ Emits `automation.run.resumed`.
12174
+ parameters:
12175
+ - name: automationId
12176
+ in: path
12177
+ required: true
12178
+ schema:
12179
+ type: string
12180
+ format: uuid
12181
+ - name: runId
12182
+ in: path
12183
+ required: true
12184
+ schema:
12185
+ type: string
12186
+ format: uuid
12187
+ requestBody:
12188
+ required: false
12189
+ content:
12190
+ application/json:
12191
+ schema:
12192
+ type: object
12193
+ properties:
12194
+ payload:
12195
+ type: object
12196
+ description: Exposed to later steps as `{{resume.*}}`.
12197
+ responses:
12198
+ "200":
12199
+ description: The run, now running (or unchanged if it was not parked)
12200
+ content:
12201
+ application/json:
12202
+ schema:
12203
+ $ref: "#/components/schemas/AutomationRunResponse"
12204
+ "401":
12205
+ $ref: "#/components/responses/Unauthorized"
12206
+ "403":
12207
+ $ref: "#/components/responses/Forbidden"
12208
+ "404":
12209
+ $ref: "#/components/responses/NotFound"
12210
+
12082
12211
  /v1/automations/presets:
12083
12212
  get:
12084
12213
  tags: [Automations]
@@ -13303,16 +13432,31 @@ paths:
13303
13432
  chart queues an approval exactly as a dashboard click would. That resource
13304
13433
  comes back as `awaiting_approval` rather than failing the whole chart.
13305
13434
 
13306
- Per-resource results: `created`, `unchanged`, `skipped`, `refused`,
13307
- `awaiting_approval`, `failed`. `needs_attention` is true when the chart is
13308
- not fully applied — something is waiting on a person, whether an approval,
13309
- an OAuth sign-in, or a resource that drifted and was left alone.
13435
+ Resource kinds, in the order apply walks them: `vault`, `agent`,
13436
+ `policy` (one per path pattern, named `vault:agent:path`), `connector`
13437
+ (`agent/binding_name`; `authorization_url` on the result when a person
13438
+ still has to sign in) and `binding` (`agent/name`, from
13439
+ `spec.agents[].bindings` — declared in full with `binding_type`, `config`,
13440
+ `guardrails.allowed_hosts` and an optional `credential: {vault_ref, path}`
13441
+ pointing into a chart vault). A dependent resource whose vault or agent
13442
+ was queued for approval this run is `skipped` with "waiting on …" and is
13443
+ created by the next apply.
13444
+
13445
+ Per-resource results: `created`, `patched`, `unchanged`, `skipped`,
13446
+ `refused`, `awaiting_approval`, `failed`. `needs_attention` is true when
13447
+ the chart is not fully applied — something is waiting on a person, whether
13448
+ an approval, an OAuth sign-in, or a resource that drifted and was left
13449
+ alone.
13310
13450
 
13311
13451
  Save `applied_state` to `.1claw/apply-state.json`. It records what apply
13312
13452
  set, which is what lets the next run tell drift from a first apply.
13313
13453
 
13314
- v1 creates and reports; it does not delete, prune, or patch in place. An
13315
- apply that silently deletes is an apply nobody runs twice.
13454
+ Apply creates, and patches an agent's `description`/`system_prompt` in
13455
+ place through the same `update_agent` gate a dashboard edit takes. Policy
13456
+ permissions, binding config and guardrails, connector presets and vault
13457
+ fields are create-only: a difference is `refused` with the endpoint that
13458
+ owns the change. It does not delete or prune. An apply that silently
13459
+ deletes is an apply nobody runs twice.
13316
13460
  operationId: applyChart
13317
13461
  requestBody:
13318
13462
  required: true
@@ -13346,9 +13490,12 @@ paths:
13346
13490
  name: { type: string }
13347
13491
  result:
13348
13492
  type: string
13349
- enum: [created, unchanged, skipped, refused, awaiting_approval, failed]
13493
+ enum: [created, patched, unchanged, skipped, refused, awaiting_approval, failed]
13350
13494
  id: { type: string, format: uuid }
13351
13495
  detail: { type: string }
13496
+ authorization_url:
13497
+ type: string
13498
+ description: Connectors only — where a person signs in to finish the install.
13352
13499
  warnings:
13353
13500
  type: array
13354
13501
  items: { type: string }
@@ -20916,6 +21063,14 @@ components:
20916
21063
  created_at,
20917
21064
  ]
20918
21065
  properties:
21066
+ agent_type:
21067
+ type: string
21068
+ enum: [standard, child]
21069
+ description: A `child` is a sub-agent under `parent_agent_id` that inherits its parent's policies and does not count against the plan's agent cap.
21070
+ parent_agent_id:
21071
+ type: string
21072
+ format: uuid
21073
+ description: Present on child agents.
20919
21074
  memory_enabled:
20920
21075
  type: boolean
20921
21076
  description: >-
@@ -28213,6 +28368,13 @@ components:
28213
28368
  type: array
28214
28369
  items:
28215
28370
  $ref: "#/components/schemas/OAuthAppCredentialResponse"
28371
+ platform_defaults:
28372
+ type: array
28373
+ items: { type: string }
28374
+ description: |
28375
+ Provider slugs 1Claw has its own OAuth app for. Where the organization has
28376
+ registered no credentials for one of these, connections use 1Claw's app;
28377
+ an organization credential for the same provider always wins.
28216
28378
 
28217
28379
  # -------------------------------------------------------------------
28218
28380
  # Key Import
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1claw/openapi-spec",
3
- "version": "0.61.25",
3
+ "version": "0.61.27",
4
4
  "description": "OpenAPI 3.1.0 specification for the 1Claw Vault API \u2014 generate clients in any language",
5
5
  "license": "MIT",
6
6
  "repository": {