@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.
- package/openapi.json +823 -147
- package/openapi.yaml +381 -2
- 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.
|
|
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:
|