@1claw/openapi-spec 0.61.23 → 0.61.25
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 +558 -47
- package/openapi.yaml +306 -21
- 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.
|
|
5
|
+
"version": "0.61.25",
|
|
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"
|
|
@@ -9779,7 +9779,7 @@
|
|
|
9779
9779
|
"Key Custody"
|
|
9780
9780
|
],
|
|
9781
9781
|
"summary": "Create a Safe owned by your passkey",
|
|
9782
|
-
"description": "An EVM Safe (v1.4.1) whose only owner is Safe's WebAuthn shared signer,\nconfigured with this passkey's P-256 public key. No private key exists\nanywhere: signing a transaction is a WebAuthn assertion whose challenge\nis the SafeTx hash. The address is counterfactual (CREATE2) until the\nfirst `execute` deploys it. Chains: base, optimism, arbitrum, polygon\n(RIP-7212 precompile + fallback verifier), ethereum, sepolia, base-sepolia.\n",
|
|
9782
|
+
"description": "An EVM Safe (v1.4.1) whose only owner is Safe's WebAuthn shared signer,\nconfigured with this passkey's P-256 public key. No private key exists\nanywhere: signing a transaction is a WebAuthn assertion whose challenge\nis the SafeTx hash. The address is counterfactual (CREATE2) until the\nfirst `execute` deploys it. Chains: base, optimism, arbitrum, polygon\n(RIP-7212 precompile + fallback verifier), ethereum, sepolia, base-sepolia.\nThe passkey must have been registered on the domain making this\nrequest (its rpId): a credential from `1claw.xyz` cannot sign on\n`1claw.co`, so such a passkey is refused here (400) rather than\nproducing a Safe no browser here can sign for.\n",
|
|
9783
9783
|
"operationId": "createPasskeySafe",
|
|
9784
9784
|
"security": [
|
|
9785
9785
|
{
|
|
@@ -9964,46 +9964,7 @@
|
|
|
9964
9964
|
"content": {
|
|
9965
9965
|
"application/json": {
|
|
9966
9966
|
"schema": {
|
|
9967
|
-
"
|
|
9968
|
-
"properties": {
|
|
9969
|
-
"safe_id": {
|
|
9970
|
-
"type": "string",
|
|
9971
|
-
"format": "uuid"
|
|
9972
|
-
},
|
|
9973
|
-
"safe_address": {
|
|
9974
|
-
"type": "string"
|
|
9975
|
-
},
|
|
9976
|
-
"chain": {
|
|
9977
|
-
"type": "string"
|
|
9978
|
-
},
|
|
9979
|
-
"chain_id": {
|
|
9980
|
-
"type": "integer"
|
|
9981
|
-
},
|
|
9982
|
-
"to": {
|
|
9983
|
-
"type": "string"
|
|
9984
|
-
},
|
|
9985
|
-
"value_wei": {
|
|
9986
|
-
"type": "string"
|
|
9987
|
-
},
|
|
9988
|
-
"data": {
|
|
9989
|
-
"type": "string"
|
|
9990
|
-
},
|
|
9991
|
-
"nonce": {
|
|
9992
|
-
"type": "integer"
|
|
9993
|
-
},
|
|
9994
|
-
"deploy_required": {
|
|
9995
|
-
"type": "boolean"
|
|
9996
|
-
},
|
|
9997
|
-
"safe_tx_hash": {
|
|
9998
|
-
"type": "string"
|
|
9999
|
-
},
|
|
10000
|
-
"credential_id": {
|
|
10001
|
-
"type": "string"
|
|
10002
|
-
},
|
|
10003
|
-
"rp_id": {
|
|
10004
|
-
"type": "string"
|
|
10005
|
-
}
|
|
10006
|
-
}
|
|
9967
|
+
"$ref": "#/components/schemas/PasskeySafePrepare"
|
|
10007
9968
|
}
|
|
10008
9969
|
}
|
|
10009
9970
|
}
|
|
@@ -10074,6 +10035,16 @@
|
|
|
10074
10035
|
"nonce": {
|
|
10075
10036
|
"type": "integer"
|
|
10076
10037
|
},
|
|
10038
|
+
"operation": {
|
|
10039
|
+
"type": "integer",
|
|
10040
|
+
"default": 0,
|
|
10041
|
+
"description": "0 = call. 1 = delegatecall, accepted only with a `grant_id` whose\nprepared setup calldata this is, and only to the pinned\nMultiSendCallOnly — the API cannot delegatecall arbitrary code.\n"
|
|
10042
|
+
},
|
|
10043
|
+
"grant_id": {
|
|
10044
|
+
"type": "string",
|
|
10045
|
+
"format": "uuid",
|
|
10046
|
+
"description": "Pass back from a grant or revoke prepare; activates / revokes the grant on success."
|
|
10047
|
+
},
|
|
10077
10048
|
"authenticator_data": {
|
|
10078
10049
|
"type": "string",
|
|
10079
10050
|
"description": "Base64url."
|
|
@@ -10145,6 +10116,313 @@
|
|
|
10145
10116
|
}
|
|
10146
10117
|
}
|
|
10147
10118
|
},
|
|
10119
|
+
"/v1/treasury/passkey-safes/{id}/grants": {
|
|
10120
|
+
"parameters": [
|
|
10121
|
+
{
|
|
10122
|
+
"name": "id",
|
|
10123
|
+
"in": "path",
|
|
10124
|
+
"required": true,
|
|
10125
|
+
"schema": {
|
|
10126
|
+
"type": "string",
|
|
10127
|
+
"format": "uuid"
|
|
10128
|
+
}
|
|
10129
|
+
}
|
|
10130
|
+
],
|
|
10131
|
+
"get": {
|
|
10132
|
+
"tags": [
|
|
10133
|
+
"Key Custody"
|
|
10134
|
+
],
|
|
10135
|
+
"summary": "List agent spending grants on a passkey Safe",
|
|
10136
|
+
"operationId": "listPasskeySafeGrants",
|
|
10137
|
+
"security": [
|
|
10138
|
+
{
|
|
10139
|
+
"BearerAuth": []
|
|
10140
|
+
}
|
|
10141
|
+
],
|
|
10142
|
+
"responses": {
|
|
10143
|
+
"200": {
|
|
10144
|
+
"description": "Grants",
|
|
10145
|
+
"content": {
|
|
10146
|
+
"application/json": {
|
|
10147
|
+
"schema": {
|
|
10148
|
+
"type": "object",
|
|
10149
|
+
"properties": {
|
|
10150
|
+
"grants": {
|
|
10151
|
+
"type": "array",
|
|
10152
|
+
"items": {
|
|
10153
|
+
"$ref": "#/components/schemas/PasskeySafeGrant"
|
|
10154
|
+
}
|
|
10155
|
+
}
|
|
10156
|
+
}
|
|
10157
|
+
}
|
|
10158
|
+
}
|
|
10159
|
+
}
|
|
10160
|
+
},
|
|
10161
|
+
"401": {
|
|
10162
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
10163
|
+
},
|
|
10164
|
+
"404": {
|
|
10165
|
+
"$ref": "#/components/responses/NotFound"
|
|
10166
|
+
}
|
|
10167
|
+
}
|
|
10168
|
+
},
|
|
10169
|
+
"post": {
|
|
10170
|
+
"tags": [
|
|
10171
|
+
"Key Custody"
|
|
10172
|
+
],
|
|
10173
|
+
"summary": "Prepare an agent spending grant (Allowance Module)",
|
|
10174
|
+
"description": "Gives one agent's server-custody Ethereum signing key a bounded, on-chain\nallowance from this Safe through Safe's Allowance Module v1.0.0: one Safe\ntransaction (delegatecall into MultiSendCallOnly) that enables the module if\nneeded, adds the agent's key as a delegate and sets the allowance per reset\nperiod. Returns the grant (`pending`) and the SafeTx for the owner's passkey\nto sign; pass `operation` and `grant_id` from `prepare` to `execute`. The cap\nis enforced by the module on-chain — 1claw holding the delegate key gives it\nexactly the allowance and nothing more. Audited as `passkey_safe.grant_activated`.\n",
|
|
10175
|
+
"operationId": "createPasskeySafeGrant",
|
|
10176
|
+
"security": [
|
|
10177
|
+
{
|
|
10178
|
+
"BearerAuth": []
|
|
10179
|
+
}
|
|
10180
|
+
],
|
|
10181
|
+
"requestBody": {
|
|
10182
|
+
"required": true,
|
|
10183
|
+
"content": {
|
|
10184
|
+
"application/json": {
|
|
10185
|
+
"schema": {
|
|
10186
|
+
"type": "object",
|
|
10187
|
+
"required": [
|
|
10188
|
+
"agent_id",
|
|
10189
|
+
"allowance_amount"
|
|
10190
|
+
],
|
|
10191
|
+
"properties": {
|
|
10192
|
+
"agent_id": {
|
|
10193
|
+
"type": "string",
|
|
10194
|
+
"format": "uuid"
|
|
10195
|
+
},
|
|
10196
|
+
"token": {
|
|
10197
|
+
"type": "string",
|
|
10198
|
+
"description": "ERC-20 contract; omit for the native token."
|
|
10199
|
+
},
|
|
10200
|
+
"allowance_amount": {
|
|
10201
|
+
"type": "string",
|
|
10202
|
+
"description": "Base units",
|
|
10203
|
+
"decimal string": null,
|
|
10204
|
+
"≤ 2^96-1.": null
|
|
10205
|
+
},
|
|
10206
|
+
"reset_time_min": {
|
|
10207
|
+
"type": "integer",
|
|
10208
|
+
"default": 1440,
|
|
10209
|
+
"description": "Reset period in minutes."
|
|
10210
|
+
}
|
|
10211
|
+
}
|
|
10212
|
+
}
|
|
10213
|
+
}
|
|
10214
|
+
}
|
|
10215
|
+
},
|
|
10216
|
+
"responses": {
|
|
10217
|
+
"200": {
|
|
10218
|
+
"description": "Grant and what to sign",
|
|
10219
|
+
"content": {
|
|
10220
|
+
"application/json": {
|
|
10221
|
+
"schema": {
|
|
10222
|
+
"$ref": "#/components/schemas/PasskeySafeGrantPrepare"
|
|
10223
|
+
}
|
|
10224
|
+
}
|
|
10225
|
+
}
|
|
10226
|
+
},
|
|
10227
|
+
"400": {
|
|
10228
|
+
"$ref": "#/components/responses/BadRequest"
|
|
10229
|
+
},
|
|
10230
|
+
"401": {
|
|
10231
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
10232
|
+
},
|
|
10233
|
+
"404": {
|
|
10234
|
+
"$ref": "#/components/responses/NotFound"
|
|
10235
|
+
},
|
|
10236
|
+
"409": {
|
|
10237
|
+
"$ref": "#/components/responses/Conflict"
|
|
10238
|
+
}
|
|
10239
|
+
}
|
|
10240
|
+
}
|
|
10241
|
+
},
|
|
10242
|
+
"/v1/treasury/passkey-safes/{id}/grants/{grant_id}/revoke": {
|
|
10243
|
+
"parameters": [
|
|
10244
|
+
{
|
|
10245
|
+
"name": "id",
|
|
10246
|
+
"in": "path",
|
|
10247
|
+
"required": true,
|
|
10248
|
+
"schema": {
|
|
10249
|
+
"type": "string",
|
|
10250
|
+
"format": "uuid"
|
|
10251
|
+
}
|
|
10252
|
+
},
|
|
10253
|
+
{
|
|
10254
|
+
"name": "grant_id",
|
|
10255
|
+
"in": "path",
|
|
10256
|
+
"required": true,
|
|
10257
|
+
"schema": {
|
|
10258
|
+
"type": "string",
|
|
10259
|
+
"format": "uuid"
|
|
10260
|
+
}
|
|
10261
|
+
}
|
|
10262
|
+
],
|
|
10263
|
+
"post": {
|
|
10264
|
+
"tags": [
|
|
10265
|
+
"Key Custody"
|
|
10266
|
+
],
|
|
10267
|
+
"summary": "Prepare a grant revocation",
|
|
10268
|
+
"description": "Prepares `AllowanceModule.removeDelegate(delegate, true)` for the owner's\npasskey to sign; `execute` with `grant_id` relays it and marks the grant\n`revoked`. Audited as `passkey_safe.grant_revoked`.\n",
|
|
10269
|
+
"operationId": "revokePasskeySafeGrant",
|
|
10270
|
+
"security": [
|
|
10271
|
+
{
|
|
10272
|
+
"BearerAuth": []
|
|
10273
|
+
}
|
|
10274
|
+
],
|
|
10275
|
+
"responses": {
|
|
10276
|
+
"200": {
|
|
10277
|
+
"description": "Grant and what to sign",
|
|
10278
|
+
"content": {
|
|
10279
|
+
"application/json": {
|
|
10280
|
+
"schema": {
|
|
10281
|
+
"$ref": "#/components/schemas/PasskeySafeGrantPrepare"
|
|
10282
|
+
}
|
|
10283
|
+
}
|
|
10284
|
+
}
|
|
10285
|
+
},
|
|
10286
|
+
"401": {
|
|
10287
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
10288
|
+
},
|
|
10289
|
+
"404": {
|
|
10290
|
+
"$ref": "#/components/responses/NotFound"
|
|
10291
|
+
},
|
|
10292
|
+
"409": {
|
|
10293
|
+
"$ref": "#/components/responses/Conflict"
|
|
10294
|
+
}
|
|
10295
|
+
}
|
|
10296
|
+
}
|
|
10297
|
+
},
|
|
10298
|
+
"/v1/agents/{agent_id}/passkey-safes/{safe_id}/spend": {
|
|
10299
|
+
"parameters": [
|
|
10300
|
+
{
|
|
10301
|
+
"name": "agent_id",
|
|
10302
|
+
"in": "path",
|
|
10303
|
+
"required": true,
|
|
10304
|
+
"schema": {
|
|
10305
|
+
"type": "string",
|
|
10306
|
+
"format": "uuid"
|
|
10307
|
+
}
|
|
10308
|
+
},
|
|
10309
|
+
{
|
|
10310
|
+
"name": "safe_id",
|
|
10311
|
+
"in": "path",
|
|
10312
|
+
"required": true,
|
|
10313
|
+
"schema": {
|
|
10314
|
+
"type": "string",
|
|
10315
|
+
"format": "uuid"
|
|
10316
|
+
}
|
|
10317
|
+
}
|
|
10318
|
+
],
|
|
10319
|
+
"post": {
|
|
10320
|
+
"tags": [
|
|
10321
|
+
"Key Custody"
|
|
10322
|
+
],
|
|
10323
|
+
"summary": "Spend from a passkey-owned Safe under an active grant",
|
|
10324
|
+
"description": "Agent credential only. Runs the agent's guardrails (chains, allowlists, caps,\ndaily limits, approval policy) and the sanctions screen, reads the module's\ncurrent allowance and nonce, signs the Allowance Module transfer hash with the\nagent's Ethereum signing key, and relays `executeAllowanceTransfer` from the\nSafe owner's Ethereum treasury wallet. Above the on-chain remaining allowance\nthe request is refused before any gas is spent; the module would refuse it\nanyway. Counts as one signature. Audited as `passkey_safe.allowance_spent`.\n",
|
|
10325
|
+
"operationId": "spendFromPasskeySafeGrant",
|
|
10326
|
+
"security": [
|
|
10327
|
+
{
|
|
10328
|
+
"BearerAuth": []
|
|
10329
|
+
}
|
|
10330
|
+
],
|
|
10331
|
+
"requestBody": {
|
|
10332
|
+
"required": true,
|
|
10333
|
+
"content": {
|
|
10334
|
+
"application/json": {
|
|
10335
|
+
"schema": {
|
|
10336
|
+
"type": "object",
|
|
10337
|
+
"required": [
|
|
10338
|
+
"to",
|
|
10339
|
+
"amount"
|
|
10340
|
+
],
|
|
10341
|
+
"properties": {
|
|
10342
|
+
"to": {
|
|
10343
|
+
"type": "string"
|
|
10344
|
+
},
|
|
10345
|
+
"amount": {
|
|
10346
|
+
"type": "string",
|
|
10347
|
+
"description": "Base units",
|
|
10348
|
+
"decimal string.": null
|
|
10349
|
+
},
|
|
10350
|
+
"token": {
|
|
10351
|
+
"type": "string",
|
|
10352
|
+
"description": "ERC-20 contract; omit for the native token."
|
|
10353
|
+
}
|
|
10354
|
+
}
|
|
10355
|
+
}
|
|
10356
|
+
}
|
|
10357
|
+
}
|
|
10358
|
+
},
|
|
10359
|
+
"responses": {
|
|
10360
|
+
"200": {
|
|
10361
|
+
"description": "Broadcast",
|
|
10362
|
+
"content": {
|
|
10363
|
+
"application/json": {
|
|
10364
|
+
"schema": {
|
|
10365
|
+
"type": "object",
|
|
10366
|
+
"properties": {
|
|
10367
|
+
"grant_id": {
|
|
10368
|
+
"type": "string",
|
|
10369
|
+
"format": "uuid"
|
|
10370
|
+
},
|
|
10371
|
+
"safe_address": {
|
|
10372
|
+
"type": "string"
|
|
10373
|
+
},
|
|
10374
|
+
"chain": {
|
|
10375
|
+
"type": "string"
|
|
10376
|
+
},
|
|
10377
|
+
"to": {
|
|
10378
|
+
"type": "string"
|
|
10379
|
+
},
|
|
10380
|
+
"amount": {
|
|
10381
|
+
"type": "string"
|
|
10382
|
+
},
|
|
10383
|
+
"token_address": {
|
|
10384
|
+
"type": "string"
|
|
10385
|
+
},
|
|
10386
|
+
"remaining_after": {
|
|
10387
|
+
"type": "string",
|
|
10388
|
+
"description": "Allowance left in this period after this transfer."
|
|
10389
|
+
},
|
|
10390
|
+
"nonce": {
|
|
10391
|
+
"type": "integer",
|
|
10392
|
+
"description": "The module's delegate nonce used."
|
|
10393
|
+
},
|
|
10394
|
+
"tx_hash": {
|
|
10395
|
+
"type": "string"
|
|
10396
|
+
},
|
|
10397
|
+
"status": {
|
|
10398
|
+
"type": "string"
|
|
10399
|
+
}
|
|
10400
|
+
}
|
|
10401
|
+
}
|
|
10402
|
+
}
|
|
10403
|
+
}
|
|
10404
|
+
},
|
|
10405
|
+
"400": {
|
|
10406
|
+
"$ref": "#/components/responses/BadRequest"
|
|
10407
|
+
},
|
|
10408
|
+
"401": {
|
|
10409
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
10410
|
+
},
|
|
10411
|
+
"402": {
|
|
10412
|
+
"$ref": "#/components/responses/PaymentRequired"
|
|
10413
|
+
},
|
|
10414
|
+
"403": {
|
|
10415
|
+
"$ref": "#/components/responses/Forbidden"
|
|
10416
|
+
},
|
|
10417
|
+
"404": {
|
|
10418
|
+
"$ref": "#/components/responses/NotFound"
|
|
10419
|
+
},
|
|
10420
|
+
"409": {
|
|
10421
|
+
"$ref": "#/components/responses/Conflict"
|
|
10422
|
+
}
|
|
10423
|
+
}
|
|
10424
|
+
}
|
|
10425
|
+
},
|
|
10148
10426
|
"/v1/treasury/wallets/generate": {
|
|
10149
10427
|
"post": {
|
|
10150
10428
|
"tags": [
|
|
@@ -15669,8 +15947,8 @@
|
|
|
15669
15947
|
"tags": [
|
|
15670
15948
|
"Approvals"
|
|
15671
15949
|
],
|
|
15672
|
-
"summary": "List
|
|
15673
|
-
"description": "
|
|
15950
|
+
"summary": "List approvals",
|
|
15951
|
+
"description": "Humans get their own approval queue. An agent caller gets only the\napprovals it created (`agent_id` = caller) — enough to recover one whose\nid was lost across a restart, never the organization's queue. Supports\nfiltering by status and pagination.\n",
|
|
15674
15952
|
"operationId": "listApprovals",
|
|
15675
15953
|
"parameters": [
|
|
15676
15954
|
{
|
|
@@ -15683,7 +15961,8 @@
|
|
|
15683
15961
|
"pending",
|
|
15684
15962
|
"approved",
|
|
15685
15963
|
"rejected",
|
|
15686
|
-
"expired"
|
|
15964
|
+
"expired",
|
|
15965
|
+
"cancelled"
|
|
15687
15966
|
]
|
|
15688
15967
|
},
|
|
15689
15968
|
"description": "Filter by approval status"
|
|
@@ -15768,6 +16047,61 @@
|
|
|
15768
16047
|
}
|
|
15769
16048
|
}
|
|
15770
16049
|
},
|
|
16050
|
+
"/v1/approvals/{approval_id}/cancel": {
|
|
16051
|
+
"post": {
|
|
16052
|
+
"tags": [
|
|
16053
|
+
"Approvals"
|
|
16054
|
+
],
|
|
16055
|
+
"summary": "Cancel a pending approval (requester)",
|
|
16056
|
+
"description": "Withdraws a pending approval. Callable by the agent that requested it or\nthe human it was addressed to. First answer wins: if the approval was\nalready decided or expired, the existing record is returned unchanged\n(200) rather than an error — the caller's next question is what the\nanswer was. A cancellation is delivered to webhook subscribers as\n`approval.decided` with `decision: \"cancelled\"`, and audited as\n`approval.cancelled`.\n",
|
|
16057
|
+
"operationId": "cancelApproval",
|
|
16058
|
+
"parameters": [
|
|
16059
|
+
{
|
|
16060
|
+
"name": "approval_id",
|
|
16061
|
+
"in": "path",
|
|
16062
|
+
"required": true,
|
|
16063
|
+
"schema": {
|
|
16064
|
+
"type": "string",
|
|
16065
|
+
"format": "uuid"
|
|
16066
|
+
}
|
|
16067
|
+
}
|
|
16068
|
+
],
|
|
16069
|
+
"requestBody": {
|
|
16070
|
+
"required": false,
|
|
16071
|
+
"content": {
|
|
16072
|
+
"application/json": {
|
|
16073
|
+
"schema": {
|
|
16074
|
+
"type": "object",
|
|
16075
|
+
"properties": {
|
|
16076
|
+
"reason": {
|
|
16077
|
+
"type": "string",
|
|
16078
|
+
"maxLength": 500
|
|
16079
|
+
}
|
|
16080
|
+
}
|
|
16081
|
+
}
|
|
16082
|
+
}
|
|
16083
|
+
}
|
|
16084
|
+
},
|
|
16085
|
+
"responses": {
|
|
16086
|
+
"200": {
|
|
16087
|
+
"description": "The approval — `cancelled`, or the decision that landed first",
|
|
16088
|
+
"content": {
|
|
16089
|
+
"application/json": {
|
|
16090
|
+
"schema": {
|
|
16091
|
+
"$ref": "#/components/schemas/ApprovalResponse"
|
|
16092
|
+
}
|
|
16093
|
+
}
|
|
16094
|
+
}
|
|
16095
|
+
},
|
|
16096
|
+
"403": {
|
|
16097
|
+
"$ref": "#/components/responses/Forbidden"
|
|
16098
|
+
},
|
|
16099
|
+
"404": {
|
|
16100
|
+
"$ref": "#/components/responses/NotFound"
|
|
16101
|
+
}
|
|
16102
|
+
}
|
|
16103
|
+
}
|
|
16104
|
+
},
|
|
15771
16105
|
"/v1/approvals/{approval_id}/status": {
|
|
15772
16106
|
"get": {
|
|
15773
16107
|
"tags": [
|
|
@@ -39110,7 +39444,8 @@
|
|
|
39110
39444
|
"pending",
|
|
39111
39445
|
"approved",
|
|
39112
39446
|
"rejected",
|
|
39113
|
-
"expired"
|
|
39447
|
+
"expired",
|
|
39448
|
+
"cancelled"
|
|
39114
39449
|
]
|
|
39115
39450
|
},
|
|
39116
39451
|
"summary": {
|
|
@@ -39176,7 +39511,8 @@
|
|
|
39176
39511
|
"pending",
|
|
39177
39512
|
"approved",
|
|
39178
39513
|
"rejected",
|
|
39179
|
-
"expired"
|
|
39514
|
+
"expired",
|
|
39515
|
+
"cancelled"
|
|
39180
39516
|
]
|
|
39181
39517
|
},
|
|
39182
39518
|
"expires_at": {
|
|
@@ -40186,6 +40522,16 @@
|
|
|
40186
40522
|
"type": "string",
|
|
40187
40523
|
"format": "uuid"
|
|
40188
40524
|
},
|
|
40525
|
+
"passkey_name": {
|
|
40526
|
+
"type": "string",
|
|
40527
|
+
"nullable": true,
|
|
40528
|
+
"description": "The owning passkey's name — only that credential can sign for the Safe."
|
|
40529
|
+
},
|
|
40530
|
+
"passkey_rp_id": {
|
|
40531
|
+
"type": "string",
|
|
40532
|
+
"nullable": true,
|
|
40533
|
+
"description": "The domain the owning passkey was registered under (WebAuthn rpId); a browser on another domain cannot use it."
|
|
40534
|
+
},
|
|
40189
40535
|
"custody": {
|
|
40190
40536
|
"type": "string",
|
|
40191
40537
|
"enum": [
|
|
@@ -40213,6 +40559,137 @@
|
|
|
40213
40559
|
}
|
|
40214
40560
|
}
|
|
40215
40561
|
},
|
|
40562
|
+
"PasskeySafePrepare": {
|
|
40563
|
+
"type": "object",
|
|
40564
|
+
"properties": {
|
|
40565
|
+
"safe_id": {
|
|
40566
|
+
"type": "string",
|
|
40567
|
+
"format": "uuid"
|
|
40568
|
+
},
|
|
40569
|
+
"safe_address": {
|
|
40570
|
+
"type": "string"
|
|
40571
|
+
},
|
|
40572
|
+
"chain": {
|
|
40573
|
+
"type": "string"
|
|
40574
|
+
},
|
|
40575
|
+
"chain_id": {
|
|
40576
|
+
"type": "integer"
|
|
40577
|
+
},
|
|
40578
|
+
"to": {
|
|
40579
|
+
"type": "string"
|
|
40580
|
+
},
|
|
40581
|
+
"value_wei": {
|
|
40582
|
+
"type": "string"
|
|
40583
|
+
},
|
|
40584
|
+
"data": {
|
|
40585
|
+
"type": "string"
|
|
40586
|
+
},
|
|
40587
|
+
"nonce": {
|
|
40588
|
+
"type": "integer"
|
|
40589
|
+
},
|
|
40590
|
+
"operation": {
|
|
40591
|
+
"type": "integer",
|
|
40592
|
+
"description": "Pass back to `execute` unchanged."
|
|
40593
|
+
},
|
|
40594
|
+
"grant_id": {
|
|
40595
|
+
"type": "string",
|
|
40596
|
+
"format": "uuid",
|
|
40597
|
+
"description": "Present for grant setup / revoke; pass back to `execute`."
|
|
40598
|
+
},
|
|
40599
|
+
"deploy_required": {
|
|
40600
|
+
"type": "boolean"
|
|
40601
|
+
},
|
|
40602
|
+
"safe_tx_hash": {
|
|
40603
|
+
"type": "string",
|
|
40604
|
+
"description": "Hex SafeTx hash — the WebAuthn challenge (raw 32 bytes)."
|
|
40605
|
+
},
|
|
40606
|
+
"credential_id": {
|
|
40607
|
+
"type": "string"
|
|
40608
|
+
},
|
|
40609
|
+
"transports": {
|
|
40610
|
+
"type": "array",
|
|
40611
|
+
"nullable": true,
|
|
40612
|
+
"items": {
|
|
40613
|
+
"type": "string"
|
|
40614
|
+
},
|
|
40615
|
+
"description": "The passkey's registered transports (`internal`, `hybrid`, `usb`…) — pass as the `allowCredentials` hint so the browser asks the right authenticator."
|
|
40616
|
+
},
|
|
40617
|
+
"passkey_name": {
|
|
40618
|
+
"type": "string",
|
|
40619
|
+
"nullable": true
|
|
40620
|
+
},
|
|
40621
|
+
"rp_id": {
|
|
40622
|
+
"type": "string"
|
|
40623
|
+
}
|
|
40624
|
+
}
|
|
40625
|
+
},
|
|
40626
|
+
"PasskeySafeGrant": {
|
|
40627
|
+
"type": "object",
|
|
40628
|
+
"properties": {
|
|
40629
|
+
"id": {
|
|
40630
|
+
"type": "string",
|
|
40631
|
+
"format": "uuid"
|
|
40632
|
+
},
|
|
40633
|
+
"safe_id": {
|
|
40634
|
+
"type": "string",
|
|
40635
|
+
"format": "uuid"
|
|
40636
|
+
},
|
|
40637
|
+
"agent_id": {
|
|
40638
|
+
"type": "string",
|
|
40639
|
+
"format": "uuid"
|
|
40640
|
+
},
|
|
40641
|
+
"chain": {
|
|
40642
|
+
"type": "string"
|
|
40643
|
+
},
|
|
40644
|
+
"delegate_address": {
|
|
40645
|
+
"type": "string",
|
|
40646
|
+
"description": "The agent's Ethereum signing key at grant time."
|
|
40647
|
+
},
|
|
40648
|
+
"token_address": {
|
|
40649
|
+
"type": "string",
|
|
40650
|
+
"description": "0x000…0 for the native token."
|
|
40651
|
+
},
|
|
40652
|
+
"allowance_amount": {
|
|
40653
|
+
"type": "string",
|
|
40654
|
+
"description": "Base units per reset period."
|
|
40655
|
+
},
|
|
40656
|
+
"reset_time_min": {
|
|
40657
|
+
"type": "integer"
|
|
40658
|
+
},
|
|
40659
|
+
"status": {
|
|
40660
|
+
"type": "string",
|
|
40661
|
+
"enum": [
|
|
40662
|
+
"pending",
|
|
40663
|
+
"active",
|
|
40664
|
+
"revoking",
|
|
40665
|
+
"revoked"
|
|
40666
|
+
]
|
|
40667
|
+
},
|
|
40668
|
+
"setup_tx_hash": {
|
|
40669
|
+
"type": "string",
|
|
40670
|
+
"nullable": true
|
|
40671
|
+
},
|
|
40672
|
+
"revoke_tx_hash": {
|
|
40673
|
+
"type": "string",
|
|
40674
|
+
"nullable": true
|
|
40675
|
+
},
|
|
40676
|
+
"created_at": {
|
|
40677
|
+
"type": "string",
|
|
40678
|
+
"format": "date-time"
|
|
40679
|
+
}
|
|
40680
|
+
}
|
|
40681
|
+
},
|
|
40682
|
+
"PasskeySafeGrantPrepare": {
|
|
40683
|
+
"type": "object",
|
|
40684
|
+
"properties": {
|
|
40685
|
+
"grant": {
|
|
40686
|
+
"$ref": "#/components/schemas/PasskeySafeGrant"
|
|
40687
|
+
},
|
|
40688
|
+
"prepare": {
|
|
40689
|
+
"$ref": "#/components/schemas/PasskeySafePrepare"
|
|
40690
|
+
}
|
|
40691
|
+
}
|
|
40692
|
+
},
|
|
40216
40693
|
"ClientShareListResponse": {
|
|
40217
40694
|
"type": "object",
|
|
40218
40695
|
"properties": {
|
|
@@ -41892,6 +42369,19 @@
|
|
|
41892
42369
|
"type": "number",
|
|
41893
42370
|
"nullable": true
|
|
41894
42371
|
},
|
|
42372
|
+
"has_paid_addon": {
|
|
42373
|
+
"type": "boolean",
|
|
42374
|
+
"description": "Whether this runtime has a paid Stripe add-on (unlimited hours)."
|
|
42375
|
+
},
|
|
42376
|
+
"billing_kind": {
|
|
42377
|
+
"type": "string",
|
|
42378
|
+
"enum": [
|
|
42379
|
+
"pool",
|
|
42380
|
+
"included",
|
|
42381
|
+
"addon"
|
|
42382
|
+
],
|
|
42383
|
+
"description": "`pool` — counts against the plan's monthly runtime hours. `included` — the plan's\nfree runtime (every plan from Pro up includes one small or medium runtime, no hour\ncap, no charge). `addon` — paid Stripe subscription item (no hour cap).\n"
|
|
42384
|
+
},
|
|
41895
42385
|
"created_at": {
|
|
41896
42386
|
"type": "string",
|
|
41897
42387
|
"format": "date-time"
|
|
@@ -41913,6 +42403,27 @@
|
|
|
41913
42403
|
"items": {
|
|
41914
42404
|
"$ref": "#/components/schemas/RuntimeResponse"
|
|
41915
42405
|
}
|
|
42406
|
+
},
|
|
42407
|
+
"included_runtime": {
|
|
42408
|
+
"type": "object",
|
|
42409
|
+
"description": "The plan's included-runtime allowance (human callers only).",
|
|
42410
|
+
"properties": {
|
|
42411
|
+
"allowance": {
|
|
42412
|
+
"type": "integer",
|
|
42413
|
+
"description": "Runtimes the plan includes at no charge."
|
|
42414
|
+
},
|
|
42415
|
+
"used": {
|
|
42416
|
+
"type": "integer",
|
|
42417
|
+
"description": "Included slots currently in use."
|
|
42418
|
+
},
|
|
42419
|
+
"presets": {
|
|
42420
|
+
"type": "array",
|
|
42421
|
+
"items": {
|
|
42422
|
+
"type": "string"
|
|
42423
|
+
},
|
|
42424
|
+
"description": "Presets an included runtime may use (up to 1 vCPU / 2 GB)."
|
|
42425
|
+
}
|
|
42426
|
+
}
|
|
41916
42427
|
}
|
|
41917
42428
|
}
|
|
41918
42429
|
},
|
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.25"
|
|
6
6
|
description: |
|
|
7
7
|
Secure secret management for AI agents. Provides vaults, secrets,
|
|
8
8
|
policy-based access control, agent identity, Intents API,
|
|
@@ -6239,6 +6239,10 @@ paths:
|
|
|
6239
6239
|
is the SafeTx hash. The address is counterfactual (CREATE2) until the
|
|
6240
6240
|
first `execute` deploys it. Chains: base, optimism, arbitrum, polygon
|
|
6241
6241
|
(RIP-7212 precompile + fallback verifier), ethereum, sepolia, base-sepolia.
|
|
6242
|
+
The passkey must have been registered on the domain making this
|
|
6243
|
+
request (its rpId): a credential from `1claw.xyz` cannot sign on
|
|
6244
|
+
`1claw.co`, so such a passkey is refused here (400) rather than
|
|
6245
|
+
producing a Safe no browser here can sign for.
|
|
6242
6246
|
operationId: createPasskeySafe
|
|
6243
6247
|
security:
|
|
6244
6248
|
- BearerAuth: []
|
|
@@ -6343,20 +6347,7 @@ paths:
|
|
|
6343
6347
|
content:
|
|
6344
6348
|
application/json:
|
|
6345
6349
|
schema:
|
|
6346
|
-
|
|
6347
|
-
properties:
|
|
6348
|
-
safe_id: { type: string, format: uuid }
|
|
6349
|
-
safe_address: { type: string }
|
|
6350
|
-
chain: { type: string }
|
|
6351
|
-
chain_id: { type: integer }
|
|
6352
|
-
to: { type: string }
|
|
6353
|
-
value_wei: { type: string }
|
|
6354
|
-
data: { type: string }
|
|
6355
|
-
nonce: { type: integer }
|
|
6356
|
-
deploy_required: { type: boolean }
|
|
6357
|
-
safe_tx_hash: { type: string }
|
|
6358
|
-
credential_id: { type: string }
|
|
6359
|
-
rp_id: { type: string }
|
|
6350
|
+
$ref: "#/components/schemas/PasskeySafePrepare"
|
|
6360
6351
|
"400":
|
|
6361
6352
|
$ref: "#/components/responses/BadRequest"
|
|
6362
6353
|
"401":
|
|
@@ -6396,6 +6387,17 @@ paths:
|
|
|
6396
6387
|
value_wei: { type: string }
|
|
6397
6388
|
data: { type: string }
|
|
6398
6389
|
nonce: { type: integer }
|
|
6390
|
+
operation:
|
|
6391
|
+
type: integer
|
|
6392
|
+
default: 0
|
|
6393
|
+
description: |
|
|
6394
|
+
0 = call. 1 = delegatecall, accepted only with a `grant_id` whose
|
|
6395
|
+
prepared setup calldata this is, and only to the pinned
|
|
6396
|
+
MultiSendCallOnly — the API cannot delegatecall arbitrary code.
|
|
6397
|
+
grant_id:
|
|
6398
|
+
type: string
|
|
6399
|
+
format: uuid
|
|
6400
|
+
description: Pass back from a grant or revoke prepare; activates / revokes the grant on success.
|
|
6399
6401
|
authenticator_data: { type: string, description: Base64url. }
|
|
6400
6402
|
client_data_json: { type: string, description: Base64url. }
|
|
6401
6403
|
signature: { type: string, description: Base64url DER ECDSA signature. }
|
|
@@ -6425,6 +6427,177 @@ paths:
|
|
|
6425
6427
|
"409":
|
|
6426
6428
|
$ref: "#/components/responses/Conflict"
|
|
6427
6429
|
|
|
6430
|
+
/v1/treasury/passkey-safes/{id}/grants:
|
|
6431
|
+
parameters:
|
|
6432
|
+
- name: id
|
|
6433
|
+
in: path
|
|
6434
|
+
required: true
|
|
6435
|
+
schema: { type: string, format: uuid }
|
|
6436
|
+
get:
|
|
6437
|
+
tags: [Key Custody]
|
|
6438
|
+
summary: List agent spending grants on a passkey Safe
|
|
6439
|
+
operationId: listPasskeySafeGrants
|
|
6440
|
+
security:
|
|
6441
|
+
- BearerAuth: []
|
|
6442
|
+
responses:
|
|
6443
|
+
"200":
|
|
6444
|
+
description: Grants
|
|
6445
|
+
content:
|
|
6446
|
+
application/json:
|
|
6447
|
+
schema:
|
|
6448
|
+
type: object
|
|
6449
|
+
properties:
|
|
6450
|
+
grants:
|
|
6451
|
+
type: array
|
|
6452
|
+
items:
|
|
6453
|
+
$ref: "#/components/schemas/PasskeySafeGrant"
|
|
6454
|
+
"401":
|
|
6455
|
+
$ref: "#/components/responses/Unauthorized"
|
|
6456
|
+
"404":
|
|
6457
|
+
$ref: "#/components/responses/NotFound"
|
|
6458
|
+
post:
|
|
6459
|
+
tags: [Key Custody]
|
|
6460
|
+
summary: Prepare an agent spending grant (Allowance Module)
|
|
6461
|
+
description: |
|
|
6462
|
+
Gives one agent's server-custody Ethereum signing key a bounded, on-chain
|
|
6463
|
+
allowance from this Safe through Safe's Allowance Module v1.0.0: one Safe
|
|
6464
|
+
transaction (delegatecall into MultiSendCallOnly) that enables the module if
|
|
6465
|
+
needed, adds the agent's key as a delegate and sets the allowance per reset
|
|
6466
|
+
period. Returns the grant (`pending`) and the SafeTx for the owner's passkey
|
|
6467
|
+
to sign; pass `operation` and `grant_id` from `prepare` to `execute`. The cap
|
|
6468
|
+
is enforced by the module on-chain — 1claw holding the delegate key gives it
|
|
6469
|
+
exactly the allowance and nothing more. Audited as `passkey_safe.grant_activated`.
|
|
6470
|
+
operationId: createPasskeySafeGrant
|
|
6471
|
+
security:
|
|
6472
|
+
- BearerAuth: []
|
|
6473
|
+
requestBody:
|
|
6474
|
+
required: true
|
|
6475
|
+
content:
|
|
6476
|
+
application/json:
|
|
6477
|
+
schema:
|
|
6478
|
+
type: object
|
|
6479
|
+
required: [agent_id, allowance_amount]
|
|
6480
|
+
properties:
|
|
6481
|
+
agent_id: { type: string, format: uuid }
|
|
6482
|
+
token: { type: string, description: ERC-20 contract; omit for the native token. }
|
|
6483
|
+
allowance_amount: { type: string, description: Base units, decimal string, ≤ 2^96-1. }
|
|
6484
|
+
reset_time_min: { type: integer, default: 1440, description: Reset period in minutes. }
|
|
6485
|
+
responses:
|
|
6486
|
+
"200":
|
|
6487
|
+
description: Grant and what to sign
|
|
6488
|
+
content:
|
|
6489
|
+
application/json:
|
|
6490
|
+
schema:
|
|
6491
|
+
$ref: "#/components/schemas/PasskeySafeGrantPrepare"
|
|
6492
|
+
"400":
|
|
6493
|
+
$ref: "#/components/responses/BadRequest"
|
|
6494
|
+
"401":
|
|
6495
|
+
$ref: "#/components/responses/Unauthorized"
|
|
6496
|
+
"404":
|
|
6497
|
+
$ref: "#/components/responses/NotFound"
|
|
6498
|
+
"409":
|
|
6499
|
+
$ref: "#/components/responses/Conflict"
|
|
6500
|
+
|
|
6501
|
+
/v1/treasury/passkey-safes/{id}/grants/{grant_id}/revoke:
|
|
6502
|
+
parameters:
|
|
6503
|
+
- name: id
|
|
6504
|
+
in: path
|
|
6505
|
+
required: true
|
|
6506
|
+
schema: { type: string, format: uuid }
|
|
6507
|
+
- name: grant_id
|
|
6508
|
+
in: path
|
|
6509
|
+
required: true
|
|
6510
|
+
schema: { type: string, format: uuid }
|
|
6511
|
+
post:
|
|
6512
|
+
tags: [Key Custody]
|
|
6513
|
+
summary: Prepare a grant revocation
|
|
6514
|
+
description: |
|
|
6515
|
+
Prepares `AllowanceModule.removeDelegate(delegate, true)` for the owner's
|
|
6516
|
+
passkey to sign; `execute` with `grant_id` relays it and marks the grant
|
|
6517
|
+
`revoked`. Audited as `passkey_safe.grant_revoked`.
|
|
6518
|
+
operationId: revokePasskeySafeGrant
|
|
6519
|
+
security:
|
|
6520
|
+
- BearerAuth: []
|
|
6521
|
+
responses:
|
|
6522
|
+
"200":
|
|
6523
|
+
description: Grant and what to sign
|
|
6524
|
+
content:
|
|
6525
|
+
application/json:
|
|
6526
|
+
schema:
|
|
6527
|
+
$ref: "#/components/schemas/PasskeySafeGrantPrepare"
|
|
6528
|
+
"401":
|
|
6529
|
+
$ref: "#/components/responses/Unauthorized"
|
|
6530
|
+
"404":
|
|
6531
|
+
$ref: "#/components/responses/NotFound"
|
|
6532
|
+
"409":
|
|
6533
|
+
$ref: "#/components/responses/Conflict"
|
|
6534
|
+
|
|
6535
|
+
/v1/agents/{agent_id}/passkey-safes/{safe_id}/spend:
|
|
6536
|
+
parameters:
|
|
6537
|
+
- name: agent_id
|
|
6538
|
+
in: path
|
|
6539
|
+
required: true
|
|
6540
|
+
schema: { type: string, format: uuid }
|
|
6541
|
+
- name: safe_id
|
|
6542
|
+
in: path
|
|
6543
|
+
required: true
|
|
6544
|
+
schema: { type: string, format: uuid }
|
|
6545
|
+
post:
|
|
6546
|
+
tags: [Key Custody]
|
|
6547
|
+
summary: Spend from a passkey-owned Safe under an active grant
|
|
6548
|
+
description: |
|
|
6549
|
+
Agent credential only. Runs the agent's guardrails (chains, allowlists, caps,
|
|
6550
|
+
daily limits, approval policy) and the sanctions screen, reads the module's
|
|
6551
|
+
current allowance and nonce, signs the Allowance Module transfer hash with the
|
|
6552
|
+
agent's Ethereum signing key, and relays `executeAllowanceTransfer` from the
|
|
6553
|
+
Safe owner's Ethereum treasury wallet. Above the on-chain remaining allowance
|
|
6554
|
+
the request is refused before any gas is spent; the module would refuse it
|
|
6555
|
+
anyway. Counts as one signature. Audited as `passkey_safe.allowance_spent`.
|
|
6556
|
+
operationId: spendFromPasskeySafeGrant
|
|
6557
|
+
security:
|
|
6558
|
+
- BearerAuth: []
|
|
6559
|
+
requestBody:
|
|
6560
|
+
required: true
|
|
6561
|
+
content:
|
|
6562
|
+
application/json:
|
|
6563
|
+
schema:
|
|
6564
|
+
type: object
|
|
6565
|
+
required: [to, amount]
|
|
6566
|
+
properties:
|
|
6567
|
+
to: { type: string }
|
|
6568
|
+
amount: { type: string, description: Base units, decimal string. }
|
|
6569
|
+
token: { type: string, description: ERC-20 contract; omit for the native token. }
|
|
6570
|
+
responses:
|
|
6571
|
+
"200":
|
|
6572
|
+
description: Broadcast
|
|
6573
|
+
content:
|
|
6574
|
+
application/json:
|
|
6575
|
+
schema:
|
|
6576
|
+
type: object
|
|
6577
|
+
properties:
|
|
6578
|
+
grant_id: { type: string, format: uuid }
|
|
6579
|
+
safe_address: { type: string }
|
|
6580
|
+
chain: { type: string }
|
|
6581
|
+
to: { type: string }
|
|
6582
|
+
amount: { type: string }
|
|
6583
|
+
token_address: { type: string }
|
|
6584
|
+
remaining_after: { type: string, description: Allowance left in this period after this transfer. }
|
|
6585
|
+
nonce: { type: integer, description: The module's delegate nonce used. }
|
|
6586
|
+
tx_hash: { type: string }
|
|
6587
|
+
status: { type: string }
|
|
6588
|
+
"400":
|
|
6589
|
+
$ref: "#/components/responses/BadRequest"
|
|
6590
|
+
"401":
|
|
6591
|
+
$ref: "#/components/responses/Unauthorized"
|
|
6592
|
+
"402":
|
|
6593
|
+
$ref: "#/components/responses/PaymentRequired"
|
|
6594
|
+
"403":
|
|
6595
|
+
$ref: "#/components/responses/Forbidden"
|
|
6596
|
+
"404":
|
|
6597
|
+
$ref: "#/components/responses/NotFound"
|
|
6598
|
+
"409":
|
|
6599
|
+
$ref: "#/components/responses/Conflict"
|
|
6600
|
+
|
|
6428
6601
|
/v1/treasury/wallets/generate:
|
|
6429
6602
|
post:
|
|
6430
6603
|
tags: [Treasury Wallets]
|
|
@@ -10011,10 +10184,12 @@ paths:
|
|
|
10011
10184
|
/v1/approvals:
|
|
10012
10185
|
get:
|
|
10013
10186
|
tags: [Approvals]
|
|
10014
|
-
summary: List
|
|
10187
|
+
summary: List approvals
|
|
10015
10188
|
description: |
|
|
10016
|
-
|
|
10017
|
-
|
|
10189
|
+
Humans get their own approval queue. An agent caller gets only the
|
|
10190
|
+
approvals it created (`agent_id` = caller) — enough to recover one whose
|
|
10191
|
+
id was lost across a restart, never the organization's queue. Supports
|
|
10192
|
+
filtering by status and pagination.
|
|
10018
10193
|
operationId: listApprovals
|
|
10019
10194
|
parameters:
|
|
10020
10195
|
- name: status
|
|
@@ -10022,7 +10197,7 @@ paths:
|
|
|
10022
10197
|
required: false
|
|
10023
10198
|
schema:
|
|
10024
10199
|
type: string
|
|
10025
|
-
enum: [pending, approved, rejected, expired]
|
|
10200
|
+
enum: [pending, approved, rejected, expired, cancelled]
|
|
10026
10201
|
description: Filter by approval status
|
|
10027
10202
|
- name: limit
|
|
10028
10203
|
in: query
|
|
@@ -10073,6 +10248,46 @@ paths:
|
|
|
10073
10248
|
"404":
|
|
10074
10249
|
$ref: "#/components/responses/NotFound"
|
|
10075
10250
|
|
|
10251
|
+
/v1/approvals/{approval_id}/cancel:
|
|
10252
|
+
post:
|
|
10253
|
+
tags: [Approvals]
|
|
10254
|
+
summary: Cancel a pending approval (requester)
|
|
10255
|
+
description: |
|
|
10256
|
+
Withdraws a pending approval. Callable by the agent that requested it or
|
|
10257
|
+
the human it was addressed to. First answer wins: if the approval was
|
|
10258
|
+
already decided or expired, the existing record is returned unchanged
|
|
10259
|
+
(200) rather than an error — the caller's next question is what the
|
|
10260
|
+
answer was. A cancellation is delivered to webhook subscribers as
|
|
10261
|
+
`approval.decided` with `decision: "cancelled"`, and audited as
|
|
10262
|
+
`approval.cancelled`.
|
|
10263
|
+
operationId: cancelApproval
|
|
10264
|
+
parameters:
|
|
10265
|
+
- name: approval_id
|
|
10266
|
+
in: path
|
|
10267
|
+
required: true
|
|
10268
|
+
schema:
|
|
10269
|
+
type: string
|
|
10270
|
+
format: uuid
|
|
10271
|
+
requestBody:
|
|
10272
|
+
required: false
|
|
10273
|
+
content:
|
|
10274
|
+
application/json:
|
|
10275
|
+
schema:
|
|
10276
|
+
type: object
|
|
10277
|
+
properties:
|
|
10278
|
+
reason: { type: string, maxLength: 500 }
|
|
10279
|
+
responses:
|
|
10280
|
+
"200":
|
|
10281
|
+
description: The approval — `cancelled`, or the decision that landed first
|
|
10282
|
+
content:
|
|
10283
|
+
application/json:
|
|
10284
|
+
schema:
|
|
10285
|
+
$ref: "#/components/schemas/ApprovalResponse"
|
|
10286
|
+
"403":
|
|
10287
|
+
$ref: "#/components/responses/Forbidden"
|
|
10288
|
+
"404":
|
|
10289
|
+
$ref: "#/components/responses/NotFound"
|
|
10290
|
+
|
|
10076
10291
|
/v1/approvals/{approval_id}/status:
|
|
10077
10292
|
get:
|
|
10078
10293
|
tags: [Approvals]
|
|
@@ -25359,7 +25574,7 @@ components:
|
|
|
25359
25574
|
description: "What the action will do, as submitted."
|
|
25360
25575
|
status:
|
|
25361
25576
|
type: string
|
|
25362
|
-
enum: [pending, approved, rejected, expired]
|
|
25577
|
+
enum: [pending, approved, rejected, expired, cancelled]
|
|
25363
25578
|
summary:
|
|
25364
25579
|
type: object
|
|
25365
25580
|
description: Structured summary of the action requiring approval
|
|
@@ -25402,7 +25617,7 @@ components:
|
|
|
25402
25617
|
properties:
|
|
25403
25618
|
status:
|
|
25404
25619
|
type: string
|
|
25405
|
-
enum: [pending, approved, rejected, expired]
|
|
25620
|
+
enum: [pending, approved, rejected, expired, cancelled]
|
|
25406
25621
|
expires_at:
|
|
25407
25622
|
type: string
|
|
25408
25623
|
format: date-time
|
|
@@ -26074,12 +26289,62 @@ components:
|
|
|
26074
26289
|
chain_id: { type: integer }
|
|
26075
26290
|
safe_address: { type: string }
|
|
26076
26291
|
passkey_id: { type: string, format: uuid }
|
|
26292
|
+
passkey_name: { type: string, nullable: true, description: The owning passkey's name — only that credential can sign for the Safe. }
|
|
26293
|
+
passkey_rp_id: { type: string, nullable: true, description: The domain the owning passkey was registered under (WebAuthn rpId); a browser on another domain cannot use it. }
|
|
26077
26294
|
custody: { type: string, enum: [passkey_owner] }
|
|
26078
26295
|
deploy_status: { type: string, enum: [pending, deployed] }
|
|
26079
26296
|
deploy_tx_hash: { type: string, nullable: true }
|
|
26080
26297
|
owner_signer: { type: string, description: The SafeWebAuthnSharedSigner address listed as the Safe's owner. }
|
|
26081
26298
|
created_at: { type: string, format: date-time }
|
|
26082
26299
|
|
|
26300
|
+
PasskeySafePrepare:
|
|
26301
|
+
type: object
|
|
26302
|
+
properties:
|
|
26303
|
+
safe_id: { type: string, format: uuid }
|
|
26304
|
+
safe_address: { type: string }
|
|
26305
|
+
chain: { type: string }
|
|
26306
|
+
chain_id: { type: integer }
|
|
26307
|
+
to: { type: string }
|
|
26308
|
+
value_wei: { type: string }
|
|
26309
|
+
data: { type: string }
|
|
26310
|
+
nonce: { type: integer }
|
|
26311
|
+
operation: { type: integer, description: Pass back to `execute` unchanged. }
|
|
26312
|
+
grant_id: { type: string, format: uuid, description: Present for grant setup / revoke; pass back to `execute`. }
|
|
26313
|
+
deploy_required: { type: boolean }
|
|
26314
|
+
safe_tx_hash: { type: string, description: Hex SafeTx hash — the WebAuthn challenge (raw 32 bytes). }
|
|
26315
|
+
credential_id: { type: string }
|
|
26316
|
+
transports:
|
|
26317
|
+
type: array
|
|
26318
|
+
nullable: true
|
|
26319
|
+
items: { type: string }
|
|
26320
|
+
description: The passkey's registered transports (`internal`, `hybrid`, `usb`…) — pass as the `allowCredentials` hint so the browser asks the right authenticator.
|
|
26321
|
+
passkey_name: { type: string, nullable: true }
|
|
26322
|
+
rp_id: { type: string }
|
|
26323
|
+
|
|
26324
|
+
PasskeySafeGrant:
|
|
26325
|
+
type: object
|
|
26326
|
+
properties:
|
|
26327
|
+
id: { type: string, format: uuid }
|
|
26328
|
+
safe_id: { type: string, format: uuid }
|
|
26329
|
+
agent_id: { type: string, format: uuid }
|
|
26330
|
+
chain: { type: string }
|
|
26331
|
+
delegate_address: { type: string, description: The agent's Ethereum signing key at grant time. }
|
|
26332
|
+
token_address: { type: string, description: 0x000…0 for the native token. }
|
|
26333
|
+
allowance_amount: { type: string, description: Base units per reset period. }
|
|
26334
|
+
reset_time_min: { type: integer }
|
|
26335
|
+
status: { type: string, enum: [pending, active, revoking, revoked] }
|
|
26336
|
+
setup_tx_hash: { type: string, nullable: true }
|
|
26337
|
+
revoke_tx_hash: { type: string, nullable: true }
|
|
26338
|
+
created_at: { type: string, format: date-time }
|
|
26339
|
+
|
|
26340
|
+
PasskeySafeGrantPrepare:
|
|
26341
|
+
type: object
|
|
26342
|
+
properties:
|
|
26343
|
+
grant:
|
|
26344
|
+
$ref: "#/components/schemas/PasskeySafeGrant"
|
|
26345
|
+
prepare:
|
|
26346
|
+
$ref: "#/components/schemas/PasskeySafePrepare"
|
|
26347
|
+
|
|
26083
26348
|
ClientShareListResponse:
|
|
26084
26349
|
type: object
|
|
26085
26350
|
properties:
|
|
@@ -27150,6 +27415,16 @@ components:
|
|
|
27150
27415
|
monthly_hours_used:
|
|
27151
27416
|
type: number
|
|
27152
27417
|
nullable: true
|
|
27418
|
+
has_paid_addon:
|
|
27419
|
+
type: boolean
|
|
27420
|
+
description: Whether this runtime has a paid Stripe add-on (unlimited hours).
|
|
27421
|
+
billing_kind:
|
|
27422
|
+
type: string
|
|
27423
|
+
enum: [pool, included, addon]
|
|
27424
|
+
description: |
|
|
27425
|
+
`pool` — counts against the plan's monthly runtime hours. `included` — the plan's
|
|
27426
|
+
free runtime (every plan from Pro up includes one small or medium runtime, no hour
|
|
27427
|
+
cap, no charge). `addon` — paid Stripe subscription item (no hour cap).
|
|
27153
27428
|
created_at:
|
|
27154
27429
|
type: string
|
|
27155
27430
|
format: date-time
|
|
@@ -27165,6 +27440,16 @@ components:
|
|
|
27165
27440
|
type: array
|
|
27166
27441
|
items:
|
|
27167
27442
|
$ref: "#/components/schemas/RuntimeResponse"
|
|
27443
|
+
included_runtime:
|
|
27444
|
+
type: object
|
|
27445
|
+
description: The plan's included-runtime allowance (human callers only).
|
|
27446
|
+
properties:
|
|
27447
|
+
allowance: { type: integer, description: Runtimes the plan includes at no charge. }
|
|
27448
|
+
used: { type: integer, description: Included slots currently in use. }
|
|
27449
|
+
presets:
|
|
27450
|
+
type: array
|
|
27451
|
+
items: { type: string }
|
|
27452
|
+
description: Presets an included runtime may use (up to 1 vCPU / 2 GB).
|
|
27168
27453
|
|
|
27169
27454
|
SlugCheckResponse:
|
|
27170
27455
|
type: object
|