@1claw/openapi-spec 0.61.20 → 0.61.22

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 +823 -147
  2. package/openapi.yaml +381 -2
  3. package/package.json +1 -1
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.20"
5
+ version: "0.61.22"
6
6
  description: |
7
7
  Secure secret management for AI agents. Provides vaults, secrets,
8
8
  policy-based access control, agent identity, Intents API,
@@ -5623,6 +5623,14 @@ paths:
5623
5623
  chain:
5624
5624
  type: string
5625
5625
  enum: [solana]
5626
+ replace_existing:
5627
+ type: boolean
5628
+ default: false
5629
+ description: |
5630
+ Re-key ceremony: replace the active server-custody wallet on
5631
+ this chain. On `complete` its balance is swept to the new
5632
+ address by the old key's last signature and the old wallet is
5633
+ deactivated (audit `treasury_wallet.rekeyed`).
5626
5634
  responses:
5627
5635
  "201":
5628
5636
  description: Session opened; the vault's round-1 package
@@ -5942,6 +5950,284 @@ paths:
5942
5950
  "404":
5943
5951
  $ref: "#/components/responses/NotFound"
5944
5952
 
5953
+ /v1/runtimes/{runtime_id}/tss/holder:
5954
+ parameters:
5955
+ - name: runtime_id
5956
+ in: path
5957
+ required: true
5958
+ schema: { type: string, format: uuid }
5959
+ post:
5960
+ tags: [Key Custody]
5961
+ summary: Register the runtime's sidecar as a share holder
5962
+ description: |
5963
+ Called by the runtime's agent (the Shroud sidecar, at boot) with the P-256
5964
+ public key it generated. The owner can then provision a threshold-key
5965
+ share to this runtime, letting the agent co-sign below-cap sends
5966
+ unattended. Re-registering replaces the key; deleting the runtime revokes
5967
+ every share held by it.
5968
+ operationId: registerTssHolder
5969
+ security:
5970
+ - BearerAuth: []
5971
+ requestBody:
5972
+ required: true
5973
+ content:
5974
+ application/json:
5975
+ schema:
5976
+ type: object
5977
+ required: [public_key]
5978
+ properties:
5979
+ public_key: { type: string, description: Base64 SEC1 uncompressed P-256 point (65 bytes). }
5980
+ responses:
5981
+ "201":
5982
+ description: Registered
5983
+ content:
5984
+ application/json:
5985
+ schema:
5986
+ $ref: "#/components/schemas/TssHolder"
5987
+ "400":
5988
+ $ref: "#/components/responses/BadRequest"
5989
+ "401":
5990
+ $ref: "#/components/responses/Unauthorized"
5991
+ "403":
5992
+ $ref: "#/components/responses/Forbidden"
5993
+ "404":
5994
+ $ref: "#/components/responses/NotFound"
5995
+ get:
5996
+ tags: [Key Custody]
5997
+ summary: The runtime's registered share holder
5998
+ operationId: getTssHolder
5999
+ security:
6000
+ - BearerAuth: []
6001
+ responses:
6002
+ "200":
6003
+ description: Holder
6004
+ content:
6005
+ application/json:
6006
+ schema:
6007
+ $ref: "#/components/schemas/TssHolder"
6008
+ "401":
6009
+ $ref: "#/components/responses/Unauthorized"
6010
+ "404":
6011
+ $ref: "#/components/responses/NotFound"
6012
+
6013
+ /v1/keys/{key_id}/client-share/holder:
6014
+ parameters:
6015
+ - name: key_id
6016
+ in: path
6017
+ required: true
6018
+ schema: { type: string, format: uuid }
6019
+ put:
6020
+ tags: [Key Custody]
6021
+ summary: Provision a threshold-key share to a runtime holder
6022
+ description: |
6023
+ The owner's browser unlocks its share with the passkey PRF and re-wraps
6024
+ it to the holder's P-256 key (ECIES: ephemeral point ‖ iv ‖ AES-GCM). The
6025
+ vault stores the ciphertext unopened. The wallet must be delegated to the
6026
+ holder's agent. Audited as `client_share.provisioned_to_runtime`.
6027
+ operationId: provisionTssHolderShare
6028
+ security:
6029
+ - BearerAuth: []
6030
+ requestBody:
6031
+ required: true
6032
+ content:
6033
+ application/json:
6034
+ schema:
6035
+ type: object
6036
+ required: [holder_id, wrapped_share, salt]
6037
+ properties:
6038
+ holder_id: { type: string, format: uuid }
6039
+ wrapped_share: { type: string }
6040
+ salt: { type: string }
6041
+ responses:
6042
+ "201":
6043
+ description: Stored
6044
+ "400":
6045
+ $ref: "#/components/responses/BadRequest"
6046
+ "401":
6047
+ $ref: "#/components/responses/Unauthorized"
6048
+ "403":
6049
+ $ref: "#/components/responses/Forbidden"
6050
+ "404":
6051
+ $ref: "#/components/responses/NotFound"
6052
+ get:
6053
+ tags: [Key Custody]
6054
+ summary: The sidecar fetches the wrap made for it
6055
+ description: Agent-only; returns the wrap whose holder was registered by the calling agent.
6056
+ operationId: getTssHolderShare
6057
+ security:
6058
+ - BearerAuth: []
6059
+ responses:
6060
+ "200":
6061
+ description: Wrapped share (opaque)
6062
+ content:
6063
+ application/json:
6064
+ schema:
6065
+ type: object
6066
+ properties:
6067
+ key_id: { type: string, format: uuid }
6068
+ holder_id: { type: string, format: uuid }
6069
+ wrap_kind: { type: string, enum: [sidecar] }
6070
+ wrapped_share: { type: string }
6071
+ salt: { type: string }
6072
+ "401":
6073
+ $ref: "#/components/responses/Unauthorized"
6074
+ "403":
6075
+ $ref: "#/components/responses/Forbidden"
6076
+ "404":
6077
+ $ref: "#/components/responses/NotFound"
6078
+
6079
+ /v1/agents/{agent_id}/tss/prepare:
6080
+ parameters:
6081
+ - name: agent_id
6082
+ in: path
6083
+ required: true
6084
+ schema: { type: string, format: uuid }
6085
+ post:
6086
+ tags: [Key Custody]
6087
+ summary: Agent declares a send from a delegated client_tss wallet
6088
+ description: |
6089
+ Runs the agent's guardrails (chains, allowlists, caps, daily limits,
6090
+ approval policy) and the sanctions screen on the declared call, builds
6091
+ the unsigned message and records it as a prepared intent. Only a
6092
+ prepared message can enter `/tss/sign/begin`. Requires a treasury
6093
+ delegation and a share provisioned to the agent's runtime.
6094
+ operationId: agentTssPrepare
6095
+ security:
6096
+ - BearerAuth: []
6097
+ requestBody:
6098
+ required: true
6099
+ content:
6100
+ application/json:
6101
+ schema:
6102
+ type: object
6103
+ required: [key_id, to, value]
6104
+ properties:
6105
+ key_id: { type: string, format: uuid }
6106
+ to: { type: string }
6107
+ value: { type: string, description: Major units. }
6108
+ memo: { type: string }
6109
+ responses:
6110
+ "200":
6111
+ description: Unsigned message
6112
+ "400":
6113
+ $ref: "#/components/responses/BadRequest"
6114
+ "401":
6115
+ $ref: "#/components/responses/Unauthorized"
6116
+ "403":
6117
+ $ref: "#/components/responses/Forbidden"
6118
+ "404":
6119
+ $ref: "#/components/responses/NotFound"
6120
+
6121
+ /v1/agents/{agent_id}/tss/sign/begin:
6122
+ parameters:
6123
+ - name: agent_id
6124
+ in: path
6125
+ required: true
6126
+ schema: { type: string, format: uuid }
6127
+ post:
6128
+ tags: [Key Custody]
6129
+ summary: Agent threshold signing, round 1
6130
+ description: The message must be a live prepared intent for this agent and key; its transfers are screened again.
6131
+ operationId: agentTssSignBegin
6132
+ security:
6133
+ - BearerAuth: []
6134
+ requestBody:
6135
+ required: true
6136
+ content:
6137
+ application/json:
6138
+ schema:
6139
+ type: object
6140
+ required: [key_id, message]
6141
+ properties:
6142
+ key_id: { type: string, format: uuid }
6143
+ message: { type: string }
6144
+ responses:
6145
+ "201":
6146
+ description: Session opened
6147
+ "401":
6148
+ $ref: "#/components/responses/Unauthorized"
6149
+ "403":
6150
+ $ref: "#/components/responses/Forbidden"
6151
+ "404":
6152
+ $ref: "#/components/responses/NotFound"
6153
+
6154
+ /v1/agents/{agent_id}/tss/sign/complete:
6155
+ parameters:
6156
+ - name: agent_id
6157
+ in: path
6158
+ required: true
6159
+ schema: { type: string, format: uuid }
6160
+ post:
6161
+ tags: [Key Custody]
6162
+ summary: Agent threshold signing, round 2
6163
+ operationId: agentTssSignComplete
6164
+ security:
6165
+ - BearerAuth: []
6166
+ requestBody:
6167
+ required: true
6168
+ content:
6169
+ application/json:
6170
+ schema:
6171
+ type: object
6172
+ required: [session_id, client_commitments, client_signature_share]
6173
+ properties:
6174
+ session_id: { type: string, format: uuid }
6175
+ client_commitments: { type: string }
6176
+ client_signature_share: { type: string }
6177
+ responses:
6178
+ "200":
6179
+ description: Signature
6180
+ "400":
6181
+ $ref: "#/components/responses/BadRequest"
6182
+ "401":
6183
+ $ref: "#/components/responses/Unauthorized"
6184
+ "404":
6185
+ $ref: "#/components/responses/NotFound"
6186
+ "409":
6187
+ $ref: "#/components/responses/Conflict"
6188
+
6189
+ /v1/agents/{agent_id}/tss/broadcast:
6190
+ parameters:
6191
+ - name: agent_id
6192
+ in: path
6193
+ required: true
6194
+ schema: { type: string, format: uuid }
6195
+ post:
6196
+ tags: [Key Custody]
6197
+ summary: Broadcast an agent's threshold-signed send
6198
+ description: |
6199
+ Verifies the signature under the wallet key, checks the message is the
6200
+ prepared one, re-runs the agent's guardrails, records the transaction
6201
+ (daily limits count it) and submits. Audited as `treasury_wallet.send`
6202
+ with `via: runtime_share_holder`.
6203
+ operationId: agentTssBroadcast
6204
+ security:
6205
+ - BearerAuth: []
6206
+ requestBody:
6207
+ required: true
6208
+ content:
6209
+ application/json:
6210
+ schema:
6211
+ type: object
6212
+ required: [key_id, message, signature]
6213
+ properties:
6214
+ key_id: { type: string, format: uuid }
6215
+ message: { type: string }
6216
+ signature: { type: string }
6217
+ responses:
6218
+ "200":
6219
+ description: Broadcast
6220
+ content:
6221
+ application/json:
6222
+ schema:
6223
+ $ref: "#/components/schemas/TreasuryWalletSendResponse"
6224
+ "400":
6225
+ $ref: "#/components/responses/BadRequest"
6226
+ "401":
6227
+ $ref: "#/components/responses/Unauthorized"
6228
+ "403":
6229
+ $ref: "#/components/responses/Forbidden"
6230
+
5945
6231
  /v1/treasury/passkey-safes:
5946
6232
  post:
5947
6233
  tags: [Key Custody]
@@ -15870,6 +16156,34 @@ paths:
15870
16156
  description: Forbidden, or the plan does not include this
15871
16157
  '404':
15872
16158
  description: Not found
16159
+ /v1/agents/enroll/{pairing_id}/status:
16160
+ parameters:
16161
+ - name: pairing_id
16162
+ in: path
16163
+ required: true
16164
+ schema: { type: string, format: uuid }
16165
+ - name: poll
16166
+ in: query
16167
+ required: true
16168
+ schema: { type: string }
16169
+ description: The `poll_token` from the enrol response.
16170
+ get:
16171
+ tags: [Agents]
16172
+ summary: "Public: pairing status — the agent learns the decision and collects its key once"
16173
+ operationId: getEnrollmentStatus
16174
+ security: []
16175
+ responses:
16176
+ "200":
16177
+ description: Status
16178
+ content:
16179
+ application/json:
16180
+ schema:
16181
+ $ref: "#/components/schemas/EnrollmentStatusResponse"
16182
+ "400":
16183
+ $ref: "#/components/responses/BadRequest"
16184
+ "404":
16185
+ $ref: "#/components/responses/NotFound"
16186
+
15873
16187
  /v1/agents/enroll/pending:
15874
16188
  get:
15875
16189
  tags: [Agents]
@@ -15879,6 +16193,17 @@ paths:
15879
16193
  responses:
15880
16194
  '200':
15881
16195
  description: Success
16196
+ content:
16197
+ application/json:
16198
+ schema:
16199
+ type: object
16200
+ properties:
16201
+ agent_name: { type: string }
16202
+ expires_at: { type: string, format: date-time }
16203
+ fingerprint:
16204
+ type: string
16205
+ description: Pairing only — the agent key's `SHA256:` fingerprint to verify visually.
16206
+ description: { type: string }
15882
16207
  '404':
15883
16208
  description: Not found
15884
16209
  /v1/agents/{agent_id}/channels/{channel_id}/refresh-webhook:
@@ -19705,6 +20030,15 @@ components:
19705
20030
  description:
19706
20031
  type: string
19707
20032
  description: Optional agent description
20033
+ public_key:
20034
+ type: string
20035
+ description: |
20036
+ Pairing ceremony. The agent's own Ed25519 public key (`ssh-ed25519 AAAA…`
20037
+ or base64 of the raw 32 bytes). Its `SHA256:` fingerprint is shown to the
20038
+ human on the approval page for visual verification, and the agent
20039
+ collects its API key itself by polling
20040
+ `GET /v1/agents/enroll/{pairing_id}/status?poll=<poll_token>` — no key
20041
+ in an email, nothing to copy. `1claw agent enroll --pair` does all of this.
19708
20042
 
19709
20043
  EnrollAgentResponse:
19710
20044
  type: object
@@ -19722,6 +20056,36 @@ components:
19722
20056
  description: |
19723
20057
  Present when a pending enrollment was created and the client should show
19724
20058
  this link (email flow includes it as a fallback; name-only flow requires it).
20059
+ pairing_id:
20060
+ type: string
20061
+ format: uuid
20062
+ description: Pairing only.
20063
+ fingerprint:
20064
+ type: string
20065
+ description: Pairing only. `SHA256:<base64>` of the key, as `ssh-keygen -lf` prints it. Show it to the human.
20066
+ poll_token:
20067
+ type: string
20068
+ description: Pairing only. Presented as `?poll=` on the status endpoint. Shown once.
20069
+ expires_at:
20070
+ type: string
20071
+ format: date-time
20072
+
20073
+ EnrollmentStatusResponse:
20074
+ type: object
20075
+ properties:
20076
+ pairing_id: { type: string, format: uuid }
20077
+ status:
20078
+ type: string
20079
+ enum: [pending, approved, denied, expired]
20080
+ agent_name: { type: string }
20081
+ fingerprint: { type: string, nullable: true }
20082
+ agent_id: { type: string, format: uuid }
20083
+ api_key:
20084
+ type: string
20085
+ description: Present exactly once, on the first poll after approval; the pairing is then closed.
20086
+ vault_ids:
20087
+ type: array
20088
+ items: { type: string }
19725
20089
 
19726
20090
  # --- Agents ---
19727
20091
 
@@ -25636,6 +26000,7 @@ components:
25636
26000
  wrap_kind:
25637
26001
  type: string
25638
26002
  enum: [passkey_prf, recovery_code]
26003
+ description: Sidecar wraps are stored through `PUT /v1/keys/{key_id}/client-share/holder`.
25639
26004
  credential_id:
25640
26005
  type: string
25641
26006
  format: uuid
@@ -25662,11 +26027,15 @@ components:
25662
26027
  enum: [agent_signing_key, treasury_wallet]
25663
26028
  wrap_kind:
25664
26029
  type: string
25665
- enum: [passkey_prf, recovery_code]
26030
+ enum: [passkey_prf, recovery_code, sidecar]
25666
26031
  credential_id:
25667
26032
  type: string
25668
26033
  format: uuid
25669
26034
  nullable: true
26035
+ holder_id:
26036
+ type: string
26037
+ format: uuid
26038
+ nullable: true
25670
26039
  wrapped_share:
25671
26040
  type: string
25672
26041
  description: Base64, exactly as stored.
@@ -25680,6 +26049,16 @@ components:
25680
26049
  type: string
25681
26050
  format: date-time
25682
26051
 
26052
+ TssHolder:
26053
+ type: object
26054
+ properties:
26055
+ holder_id: { type: string, format: uuid }
26056
+ runtime_id: { type: string, format: uuid }
26057
+ agent_id: { type: string, format: uuid }
26058
+ public_key: { type: string }
26059
+ registered_at: { type: string, format: date-time }
26060
+ last_seen_at: { type: string, format: date-time }
26061
+
25683
26062
  PasskeySafe:
25684
26063
  type: object
25685
26064
  properties:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1claw/openapi-spec",
3
- "version": "0.61.20",
3
+ "version": "0.61.22",
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": {