@1claw/openapi-spec 0.61.17 → 0.61.18
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 +347 -1
- package/openapi.yaml +246 -1
- 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.18",
|
|
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"
|
|
@@ -99,6 +99,10 @@
|
|
|
99
99
|
"name": "Treasury Wallets",
|
|
100
100
|
"description": "Multi-chain wallet generation for human users (replaces CDP embedded wallets)"
|
|
101
101
|
},
|
|
102
|
+
{
|
|
103
|
+
"name": "Key Custody",
|
|
104
|
+
"description": "Customer-held key shares for non-custodial (threshold) signing keys"
|
|
105
|
+
},
|
|
102
106
|
{
|
|
103
107
|
"name": "Admin",
|
|
104
108
|
"description": "Platform administration"
|
|
@@ -1172,6 +1176,11 @@
|
|
|
1172
1176
|
},
|
|
1173
1177
|
"created_at": {
|
|
1174
1178
|
"type": "string"
|
|
1179
|
+
},
|
|
1180
|
+
"prf_supported": {
|
|
1181
|
+
"type": "boolean",
|
|
1182
|
+
"nullable": true,
|
|
1183
|
+
"description": "`true` — can hold a wallet share (WebAuthn PRF).\n`false` — cannot. `null` — registered before this\nwas captured.\n"
|
|
1175
1184
|
}
|
|
1176
1185
|
}
|
|
1177
1186
|
}
|
|
@@ -8413,6 +8422,213 @@
|
|
|
8413
8422
|
}
|
|
8414
8423
|
}
|
|
8415
8424
|
},
|
|
8425
|
+
"/v1/keys/{key_id}/client-share": {
|
|
8426
|
+
"parameters": [
|
|
8427
|
+
{
|
|
8428
|
+
"name": "key_id",
|
|
8429
|
+
"in": "path",
|
|
8430
|
+
"required": true,
|
|
8431
|
+
"description": "A treasury wallet id or an agent signing key id owned by the caller's org",
|
|
8432
|
+
"schema": {
|
|
8433
|
+
"type": "string",
|
|
8434
|
+
"format": "uuid"
|
|
8435
|
+
}
|
|
8436
|
+
}
|
|
8437
|
+
],
|
|
8438
|
+
"put": {
|
|
8439
|
+
"tags": [
|
|
8440
|
+
"Key Custody"
|
|
8441
|
+
],
|
|
8442
|
+
"summary": "Store the customer's wrapped share of a threshold key",
|
|
8443
|
+
"description": "Stores ciphertext the vault cannot open: the customer's share of a\n2-party threshold signing key, wrapped in the browser under the\npasskey's WebAuthn PRF output (`passkey_prf`, one wrap per credential)\nor under a recovery code (`recovery_code`, one per key). The vault\nkeeps the blob and its salt and returns them only to the owning user.\nHuman users only; the passkey must have reported PRF support at\nregistration. Idempotent per (key, credential).\n",
|
|
8444
|
+
"operationId": "putClientKeyShare",
|
|
8445
|
+
"security": [
|
|
8446
|
+
{
|
|
8447
|
+
"BearerAuth": []
|
|
8448
|
+
}
|
|
8449
|
+
],
|
|
8450
|
+
"requestBody": {
|
|
8451
|
+
"required": true,
|
|
8452
|
+
"content": {
|
|
8453
|
+
"application/json": {
|
|
8454
|
+
"schema": {
|
|
8455
|
+
"$ref": "#/components/schemas/PutClientShareRequest"
|
|
8456
|
+
}
|
|
8457
|
+
}
|
|
8458
|
+
}
|
|
8459
|
+
},
|
|
8460
|
+
"responses": {
|
|
8461
|
+
"201": {
|
|
8462
|
+
"description": "Share stored",
|
|
8463
|
+
"content": {
|
|
8464
|
+
"application/json": {
|
|
8465
|
+
"schema": {
|
|
8466
|
+
"$ref": "#/components/schemas/ClientShareResponse"
|
|
8467
|
+
}
|
|
8468
|
+
}
|
|
8469
|
+
}
|
|
8470
|
+
},
|
|
8471
|
+
"400": {
|
|
8472
|
+
"$ref": "#/components/responses/BadRequest"
|
|
8473
|
+
},
|
|
8474
|
+
"401": {
|
|
8475
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8476
|
+
},
|
|
8477
|
+
"403": {
|
|
8478
|
+
"$ref": "#/components/responses/Forbidden"
|
|
8479
|
+
},
|
|
8480
|
+
"404": {
|
|
8481
|
+
"$ref": "#/components/responses/NotFound"
|
|
8482
|
+
}
|
|
8483
|
+
}
|
|
8484
|
+
},
|
|
8485
|
+
"get": {
|
|
8486
|
+
"tags": [
|
|
8487
|
+
"Key Custody"
|
|
8488
|
+
],
|
|
8489
|
+
"summary": "List the caller's wrapped shares for a key",
|
|
8490
|
+
"description": "Returns every wrap on file for this key, unopened, to the user who\nstored them. `custody` tells you whether the key is `server` (1claw\nholds the whole private key) or `client_tss` (threshold; neither party\ncan sign alone). Funding a `client_tss` wallet needs at least two wraps.\n",
|
|
8491
|
+
"operationId": "listClientKeyShares",
|
|
8492
|
+
"security": [
|
|
8493
|
+
{
|
|
8494
|
+
"BearerAuth": []
|
|
8495
|
+
}
|
|
8496
|
+
],
|
|
8497
|
+
"responses": {
|
|
8498
|
+
"200": {
|
|
8499
|
+
"description": "Wraps on file",
|
|
8500
|
+
"content": {
|
|
8501
|
+
"application/json": {
|
|
8502
|
+
"schema": {
|
|
8503
|
+
"$ref": "#/components/schemas/ClientShareListResponse"
|
|
8504
|
+
}
|
|
8505
|
+
}
|
|
8506
|
+
}
|
|
8507
|
+
},
|
|
8508
|
+
"401": {
|
|
8509
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8510
|
+
},
|
|
8511
|
+
"403": {
|
|
8512
|
+
"$ref": "#/components/responses/Forbidden"
|
|
8513
|
+
},
|
|
8514
|
+
"404": {
|
|
8515
|
+
"$ref": "#/components/responses/NotFound"
|
|
8516
|
+
}
|
|
8517
|
+
}
|
|
8518
|
+
}
|
|
8519
|
+
},
|
|
8520
|
+
"/v1/keys/{key_id}/client-share/rewrap": {
|
|
8521
|
+
"parameters": [
|
|
8522
|
+
{
|
|
8523
|
+
"name": "key_id",
|
|
8524
|
+
"in": "path",
|
|
8525
|
+
"required": true,
|
|
8526
|
+
"schema": {
|
|
8527
|
+
"type": "string",
|
|
8528
|
+
"format": "uuid"
|
|
8529
|
+
}
|
|
8530
|
+
}
|
|
8531
|
+
],
|
|
8532
|
+
"post": {
|
|
8533
|
+
"tags": [
|
|
8534
|
+
"Key Custody"
|
|
8535
|
+
],
|
|
8536
|
+
"summary": "Add a wrap for another credential or the recovery code",
|
|
8537
|
+
"description": "Same write as `PUT …/client-share`, for a key that already has at\nleast one wrap: the browser, holding the share in memory during a\npasskey session, re-wraps it under a newly added passkey's PRF\noutput or under the recovery code. 409 if no wrap exists yet.\n",
|
|
8538
|
+
"operationId": "rewrapClientKeyShare",
|
|
8539
|
+
"security": [
|
|
8540
|
+
{
|
|
8541
|
+
"BearerAuth": []
|
|
8542
|
+
}
|
|
8543
|
+
],
|
|
8544
|
+
"requestBody": {
|
|
8545
|
+
"required": true,
|
|
8546
|
+
"content": {
|
|
8547
|
+
"application/json": {
|
|
8548
|
+
"schema": {
|
|
8549
|
+
"$ref": "#/components/schemas/PutClientShareRequest"
|
|
8550
|
+
}
|
|
8551
|
+
}
|
|
8552
|
+
}
|
|
8553
|
+
},
|
|
8554
|
+
"responses": {
|
|
8555
|
+
"201": {
|
|
8556
|
+
"description": "Wrap added",
|
|
8557
|
+
"content": {
|
|
8558
|
+
"application/json": {
|
|
8559
|
+
"schema": {
|
|
8560
|
+
"$ref": "#/components/schemas/ClientShareResponse"
|
|
8561
|
+
}
|
|
8562
|
+
}
|
|
8563
|
+
}
|
|
8564
|
+
},
|
|
8565
|
+
"400": {
|
|
8566
|
+
"$ref": "#/components/responses/BadRequest"
|
|
8567
|
+
},
|
|
8568
|
+
"401": {
|
|
8569
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8570
|
+
},
|
|
8571
|
+
"403": {
|
|
8572
|
+
"$ref": "#/components/responses/Forbidden"
|
|
8573
|
+
},
|
|
8574
|
+
"404": {
|
|
8575
|
+
"$ref": "#/components/responses/NotFound"
|
|
8576
|
+
},
|
|
8577
|
+
"409": {
|
|
8578
|
+
"$ref": "#/components/responses/Conflict"
|
|
8579
|
+
}
|
|
8580
|
+
}
|
|
8581
|
+
}
|
|
8582
|
+
},
|
|
8583
|
+
"/v1/keys/{key_id}/client-share/{share_id}": {
|
|
8584
|
+
"parameters": [
|
|
8585
|
+
{
|
|
8586
|
+
"name": "key_id",
|
|
8587
|
+
"in": "path",
|
|
8588
|
+
"required": true,
|
|
8589
|
+
"schema": {
|
|
8590
|
+
"type": "string",
|
|
8591
|
+
"format": "uuid"
|
|
8592
|
+
}
|
|
8593
|
+
},
|
|
8594
|
+
{
|
|
8595
|
+
"name": "share_id",
|
|
8596
|
+
"in": "path",
|
|
8597
|
+
"required": true,
|
|
8598
|
+
"schema": {
|
|
8599
|
+
"type": "string",
|
|
8600
|
+
"format": "uuid"
|
|
8601
|
+
}
|
|
8602
|
+
}
|
|
8603
|
+
],
|
|
8604
|
+
"delete": {
|
|
8605
|
+
"tags": [
|
|
8606
|
+
"Key Custody"
|
|
8607
|
+
],
|
|
8608
|
+
"summary": "Remove one wrap",
|
|
8609
|
+
"description": "Deletes a single wrap. Wraps tied to a passkey are also removed when\nthat passkey is deleted. Removing the last wrap of a `client_tss` key\nmakes the key unrecoverable — the vault holds only its own share.\n",
|
|
8610
|
+
"operationId": "deleteClientKeyShare",
|
|
8611
|
+
"security": [
|
|
8612
|
+
{
|
|
8613
|
+
"BearerAuth": []
|
|
8614
|
+
}
|
|
8615
|
+
],
|
|
8616
|
+
"responses": {
|
|
8617
|
+
"204": {
|
|
8618
|
+
"description": "Wrap removed"
|
|
8619
|
+
},
|
|
8620
|
+
"401": {
|
|
8621
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8622
|
+
},
|
|
8623
|
+
"403": {
|
|
8624
|
+
"$ref": "#/components/responses/Forbidden"
|
|
8625
|
+
},
|
|
8626
|
+
"404": {
|
|
8627
|
+
"$ref": "#/components/responses/NotFound"
|
|
8628
|
+
}
|
|
8629
|
+
}
|
|
8630
|
+
}
|
|
8631
|
+
},
|
|
8416
8632
|
"/v1/treasury/wallets/generate": {
|
|
8417
8633
|
"post": {
|
|
8418
8634
|
"tags": [
|
|
@@ -31957,6 +32173,14 @@
|
|
|
31957
32173
|
"type": "string",
|
|
31958
32174
|
"format": "date-time",
|
|
31959
32175
|
"nullable": true
|
|
32176
|
+
},
|
|
32177
|
+
"custody": {
|
|
32178
|
+
"type": "string",
|
|
32179
|
+
"enum": [
|
|
32180
|
+
"server",
|
|
32181
|
+
"client_tss"
|
|
32182
|
+
],
|
|
32183
|
+
"description": "`server` — 1claw holds the whole private key and can sign alone.\n`client_tss` — 2-party threshold key; the customer's passkey share is required.\n"
|
|
31960
32184
|
}
|
|
31961
32185
|
}
|
|
31962
32186
|
},
|
|
@@ -34460,6 +34684,14 @@
|
|
|
34460
34684
|
"created_at": {
|
|
34461
34685
|
"type": "string",
|
|
34462
34686
|
"format": "date-time"
|
|
34687
|
+
},
|
|
34688
|
+
"custody": {
|
|
34689
|
+
"type": "string",
|
|
34690
|
+
"enum": [
|
|
34691
|
+
"server",
|
|
34692
|
+
"client_tss"
|
|
34693
|
+
],
|
|
34694
|
+
"description": "`server` — 1claw holds the whole private key and can sign alone.\n`client_tss` — 2-party threshold key; the customer's passkey share is required.\n"
|
|
34463
34695
|
}
|
|
34464
34696
|
}
|
|
34465
34697
|
},
|
|
@@ -38161,6 +38393,120 @@
|
|
|
38161
38393
|
},
|
|
38162
38394
|
"name": {
|
|
38163
38395
|
"type": "string"
|
|
38396
|
+
},
|
|
38397
|
+
"prf_supported": {
|
|
38398
|
+
"type": "boolean",
|
|
38399
|
+
"nullable": true,
|
|
38400
|
+
"description": "`prf.enabled` from `credential.getClientExtensionResults()` —\nwhether this authenticator can derive the secret that wraps a\nwallet share. Omit if the client did not request the extension.\n"
|
|
38401
|
+
}
|
|
38402
|
+
}
|
|
38403
|
+
},
|
|
38404
|
+
"PutClientShareRequest": {
|
|
38405
|
+
"type": "object",
|
|
38406
|
+
"required": [
|
|
38407
|
+
"wrap_kind",
|
|
38408
|
+
"wrapped_share",
|
|
38409
|
+
"salt"
|
|
38410
|
+
],
|
|
38411
|
+
"properties": {
|
|
38412
|
+
"wrap_kind": {
|
|
38413
|
+
"type": "string",
|
|
38414
|
+
"enum": [
|
|
38415
|
+
"passkey_prf",
|
|
38416
|
+
"recovery_code"
|
|
38417
|
+
]
|
|
38418
|
+
},
|
|
38419
|
+
"credential_id": {
|
|
38420
|
+
"type": "string",
|
|
38421
|
+
"format": "uuid",
|
|
38422
|
+
"nullable": true,
|
|
38423
|
+
"description": "Required for `passkey_prf`; the passkey id from `GET /v1/auth/passkeys`."
|
|
38424
|
+
},
|
|
38425
|
+
"wrapped_share": {
|
|
38426
|
+
"type": "string",
|
|
38427
|
+
"description": "Base64 ciphertext (≤ 4 KiB). Opaque to the vault."
|
|
38428
|
+
},
|
|
38429
|
+
"salt": {
|
|
38430
|
+
"type": "string",
|
|
38431
|
+
"description": "Base64 PRF salt, 16–64 random bytes, one per key."
|
|
38432
|
+
}
|
|
38433
|
+
}
|
|
38434
|
+
},
|
|
38435
|
+
"ClientShareResponse": {
|
|
38436
|
+
"type": "object",
|
|
38437
|
+
"properties": {
|
|
38438
|
+
"id": {
|
|
38439
|
+
"type": "string",
|
|
38440
|
+
"format": "uuid"
|
|
38441
|
+
},
|
|
38442
|
+
"key_id": {
|
|
38443
|
+
"type": "string",
|
|
38444
|
+
"format": "uuid"
|
|
38445
|
+
},
|
|
38446
|
+
"key_kind": {
|
|
38447
|
+
"type": "string",
|
|
38448
|
+
"enum": [
|
|
38449
|
+
"agent_signing_key",
|
|
38450
|
+
"treasury_wallet"
|
|
38451
|
+
]
|
|
38452
|
+
},
|
|
38453
|
+
"wrap_kind": {
|
|
38454
|
+
"type": "string",
|
|
38455
|
+
"enum": [
|
|
38456
|
+
"passkey_prf",
|
|
38457
|
+
"recovery_code"
|
|
38458
|
+
]
|
|
38459
|
+
},
|
|
38460
|
+
"credential_id": {
|
|
38461
|
+
"type": "string",
|
|
38462
|
+
"format": "uuid",
|
|
38463
|
+
"nullable": true
|
|
38464
|
+
},
|
|
38465
|
+
"wrapped_share": {
|
|
38466
|
+
"type": "string",
|
|
38467
|
+
"description": "Base64, exactly as stored."
|
|
38468
|
+
},
|
|
38469
|
+
"salt": {
|
|
38470
|
+
"type": "string",
|
|
38471
|
+
"description": "Base64."
|
|
38472
|
+
},
|
|
38473
|
+
"created_at": {
|
|
38474
|
+
"type": "string",
|
|
38475
|
+
"format": "date-time"
|
|
38476
|
+
},
|
|
38477
|
+
"updated_at": {
|
|
38478
|
+
"type": "string",
|
|
38479
|
+
"format": "date-time"
|
|
38480
|
+
}
|
|
38481
|
+
}
|
|
38482
|
+
},
|
|
38483
|
+
"ClientShareListResponse": {
|
|
38484
|
+
"type": "object",
|
|
38485
|
+
"properties": {
|
|
38486
|
+
"key_id": {
|
|
38487
|
+
"type": "string",
|
|
38488
|
+
"format": "uuid"
|
|
38489
|
+
},
|
|
38490
|
+
"key_kind": {
|
|
38491
|
+
"type": "string",
|
|
38492
|
+
"enum": [
|
|
38493
|
+
"agent_signing_key",
|
|
38494
|
+
"treasury_wallet"
|
|
38495
|
+
]
|
|
38496
|
+
},
|
|
38497
|
+
"custody": {
|
|
38498
|
+
"type": "string",
|
|
38499
|
+
"enum": [
|
|
38500
|
+
"server",
|
|
38501
|
+
"client_tss"
|
|
38502
|
+
],
|
|
38503
|
+
"description": "`server` — 1claw holds the whole private key and can sign alone.\n`client_tss` — 2-party threshold key; the customer's share is required.\n"
|
|
38504
|
+
},
|
|
38505
|
+
"shares": {
|
|
38506
|
+
"type": "array",
|
|
38507
|
+
"items": {
|
|
38508
|
+
"$ref": "#/components/schemas/ClientShareResponse"
|
|
38509
|
+
}
|
|
38164
38510
|
}
|
|
38165
38511
|
}
|
|
38166
38512
|
},
|
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.18"
|
|
6
6
|
description: |
|
|
7
7
|
Secure secret management for AI agents. Provides vaults, secrets,
|
|
8
8
|
policy-based access control, agent identity, Intents API,
|
|
@@ -80,6 +80,8 @@ tags:
|
|
|
80
80
|
description: Multi-sig treasury wallets (Safe) and agent access requests
|
|
81
81
|
- name: Treasury Wallets
|
|
82
82
|
description: Multi-chain wallet generation for human users (replaces CDP embedded wallets)
|
|
83
|
+
- name: Key Custody
|
|
84
|
+
description: Customer-held key shares for non-custodial (threshold) signing keys
|
|
83
85
|
- name: Admin
|
|
84
86
|
description: Platform administration
|
|
85
87
|
- name: Health
|
|
@@ -801,6 +803,13 @@ paths:
|
|
|
801
803
|
type: string
|
|
802
804
|
created_at:
|
|
803
805
|
type: string
|
|
806
|
+
prf_supported:
|
|
807
|
+
type: boolean
|
|
808
|
+
nullable: true
|
|
809
|
+
description: |
|
|
810
|
+
`true` — can hold a wallet share (WebAuthn PRF).
|
|
811
|
+
`false` — cannot. `null` — registered before this
|
|
812
|
+
was captured.
|
|
804
813
|
|
|
805
814
|
/v1/auth/passkeys/{passkey_id}:
|
|
806
815
|
delete:
|
|
@@ -5442,6 +5451,152 @@ paths:
|
|
|
5442
5451
|
# Treasury Wallets (multi-chain key generation for human users)
|
|
5443
5452
|
# ---------------------------------------------------------------------------
|
|
5444
5453
|
|
|
5454
|
+
/v1/keys/{key_id}/client-share:
|
|
5455
|
+
parameters:
|
|
5456
|
+
- name: key_id
|
|
5457
|
+
in: path
|
|
5458
|
+
required: true
|
|
5459
|
+
description: A treasury wallet id or an agent signing key id owned by the caller's org
|
|
5460
|
+
schema:
|
|
5461
|
+
type: string
|
|
5462
|
+
format: uuid
|
|
5463
|
+
put:
|
|
5464
|
+
tags: [Key Custody]
|
|
5465
|
+
summary: Store the customer's wrapped share of a threshold key
|
|
5466
|
+
description: |
|
|
5467
|
+
Stores ciphertext the vault cannot open: the customer's share of a
|
|
5468
|
+
2-party threshold signing key, wrapped in the browser under the
|
|
5469
|
+
passkey's WebAuthn PRF output (`passkey_prf`, one wrap per credential)
|
|
5470
|
+
or under a recovery code (`recovery_code`, one per key). The vault
|
|
5471
|
+
keeps the blob and its salt and returns them only to the owning user.
|
|
5472
|
+
Human users only; the passkey must have reported PRF support at
|
|
5473
|
+
registration. Idempotent per (key, credential).
|
|
5474
|
+
operationId: putClientKeyShare
|
|
5475
|
+
security:
|
|
5476
|
+
- BearerAuth: []
|
|
5477
|
+
requestBody:
|
|
5478
|
+
required: true
|
|
5479
|
+
content:
|
|
5480
|
+
application/json:
|
|
5481
|
+
schema:
|
|
5482
|
+
$ref: "#/components/schemas/PutClientShareRequest"
|
|
5483
|
+
responses:
|
|
5484
|
+
"201":
|
|
5485
|
+
description: Share stored
|
|
5486
|
+
content:
|
|
5487
|
+
application/json:
|
|
5488
|
+
schema:
|
|
5489
|
+
$ref: "#/components/schemas/ClientShareResponse"
|
|
5490
|
+
"400":
|
|
5491
|
+
$ref: "#/components/responses/BadRequest"
|
|
5492
|
+
"401":
|
|
5493
|
+
$ref: "#/components/responses/Unauthorized"
|
|
5494
|
+
"403":
|
|
5495
|
+
$ref: "#/components/responses/Forbidden"
|
|
5496
|
+
"404":
|
|
5497
|
+
$ref: "#/components/responses/NotFound"
|
|
5498
|
+
get:
|
|
5499
|
+
tags: [Key Custody]
|
|
5500
|
+
summary: List the caller's wrapped shares for a key
|
|
5501
|
+
description: |
|
|
5502
|
+
Returns every wrap on file for this key, unopened, to the user who
|
|
5503
|
+
stored them. `custody` tells you whether the key is `server` (1claw
|
|
5504
|
+
holds the whole private key) or `client_tss` (threshold; neither party
|
|
5505
|
+
can sign alone). Funding a `client_tss` wallet needs at least two wraps.
|
|
5506
|
+
operationId: listClientKeyShares
|
|
5507
|
+
security:
|
|
5508
|
+
- BearerAuth: []
|
|
5509
|
+
responses:
|
|
5510
|
+
"200":
|
|
5511
|
+
description: Wraps on file
|
|
5512
|
+
content:
|
|
5513
|
+
application/json:
|
|
5514
|
+
schema:
|
|
5515
|
+
$ref: "#/components/schemas/ClientShareListResponse"
|
|
5516
|
+
"401":
|
|
5517
|
+
$ref: "#/components/responses/Unauthorized"
|
|
5518
|
+
"403":
|
|
5519
|
+
$ref: "#/components/responses/Forbidden"
|
|
5520
|
+
"404":
|
|
5521
|
+
$ref: "#/components/responses/NotFound"
|
|
5522
|
+
|
|
5523
|
+
/v1/keys/{key_id}/client-share/rewrap:
|
|
5524
|
+
parameters:
|
|
5525
|
+
- name: key_id
|
|
5526
|
+
in: path
|
|
5527
|
+
required: true
|
|
5528
|
+
schema:
|
|
5529
|
+
type: string
|
|
5530
|
+
format: uuid
|
|
5531
|
+
post:
|
|
5532
|
+
tags: [Key Custody]
|
|
5533
|
+
summary: Add a wrap for another credential or the recovery code
|
|
5534
|
+
description: |
|
|
5535
|
+
Same write as `PUT …/client-share`, for a key that already has at
|
|
5536
|
+
least one wrap: the browser, holding the share in memory during a
|
|
5537
|
+
passkey session, re-wraps it under a newly added passkey's PRF
|
|
5538
|
+
output or under the recovery code. 409 if no wrap exists yet.
|
|
5539
|
+
operationId: rewrapClientKeyShare
|
|
5540
|
+
security:
|
|
5541
|
+
- BearerAuth: []
|
|
5542
|
+
requestBody:
|
|
5543
|
+
required: true
|
|
5544
|
+
content:
|
|
5545
|
+
application/json:
|
|
5546
|
+
schema:
|
|
5547
|
+
$ref: "#/components/schemas/PutClientShareRequest"
|
|
5548
|
+
responses:
|
|
5549
|
+
"201":
|
|
5550
|
+
description: Wrap added
|
|
5551
|
+
content:
|
|
5552
|
+
application/json:
|
|
5553
|
+
schema:
|
|
5554
|
+
$ref: "#/components/schemas/ClientShareResponse"
|
|
5555
|
+
"400":
|
|
5556
|
+
$ref: "#/components/responses/BadRequest"
|
|
5557
|
+
"401":
|
|
5558
|
+
$ref: "#/components/responses/Unauthorized"
|
|
5559
|
+
"403":
|
|
5560
|
+
$ref: "#/components/responses/Forbidden"
|
|
5561
|
+
"404":
|
|
5562
|
+
$ref: "#/components/responses/NotFound"
|
|
5563
|
+
"409":
|
|
5564
|
+
$ref: "#/components/responses/Conflict"
|
|
5565
|
+
|
|
5566
|
+
/v1/keys/{key_id}/client-share/{share_id}:
|
|
5567
|
+
parameters:
|
|
5568
|
+
- name: key_id
|
|
5569
|
+
in: path
|
|
5570
|
+
required: true
|
|
5571
|
+
schema:
|
|
5572
|
+
type: string
|
|
5573
|
+
format: uuid
|
|
5574
|
+
- name: share_id
|
|
5575
|
+
in: path
|
|
5576
|
+
required: true
|
|
5577
|
+
schema:
|
|
5578
|
+
type: string
|
|
5579
|
+
format: uuid
|
|
5580
|
+
delete:
|
|
5581
|
+
tags: [Key Custody]
|
|
5582
|
+
summary: Remove one wrap
|
|
5583
|
+
description: |
|
|
5584
|
+
Deletes a single wrap. Wraps tied to a passkey are also removed when
|
|
5585
|
+
that passkey is deleted. Removing the last wrap of a `client_tss` key
|
|
5586
|
+
makes the key unrecoverable — the vault holds only its own share.
|
|
5587
|
+
operationId: deleteClientKeyShare
|
|
5588
|
+
security:
|
|
5589
|
+
- BearerAuth: []
|
|
5590
|
+
responses:
|
|
5591
|
+
"204":
|
|
5592
|
+
description: Wrap removed
|
|
5593
|
+
"401":
|
|
5594
|
+
$ref: "#/components/responses/Unauthorized"
|
|
5595
|
+
"403":
|
|
5596
|
+
$ref: "#/components/responses/Forbidden"
|
|
5597
|
+
"404":
|
|
5598
|
+
$ref: "#/components/responses/NotFound"
|
|
5599
|
+
|
|
5445
5600
|
/v1/treasury/wallets/generate:
|
|
5446
5601
|
post:
|
|
5447
5602
|
tags: [Treasury Wallets]
|
|
@@ -20764,6 +20919,12 @@ components:
|
|
|
20764
20919
|
type: string
|
|
20765
20920
|
format: date-time
|
|
20766
20921
|
nullable: true
|
|
20922
|
+
custody:
|
|
20923
|
+
type: string
|
|
20924
|
+
enum: [server, client_tss]
|
|
20925
|
+
description: |
|
|
20926
|
+
`server` — 1claw holds the whole private key and can sign alone.
|
|
20927
|
+
`client_tss` — 2-party threshold key; the customer's passkey share is required.
|
|
20767
20928
|
|
|
20768
20929
|
SigningKeyListResponse:
|
|
20769
20930
|
type: object
|
|
@@ -22537,6 +22698,12 @@ components:
|
|
|
22537
22698
|
created_at:
|
|
22538
22699
|
type: string
|
|
22539
22700
|
format: date-time
|
|
22701
|
+
custody:
|
|
22702
|
+
type: string
|
|
22703
|
+
enum: [server, client_tss]
|
|
22704
|
+
description: |
|
|
22705
|
+
`server` — 1claw holds the whole private key and can sign alone.
|
|
22706
|
+
`client_tss` — 2-party threshold key; the customer's passkey share is required.
|
|
22540
22707
|
|
|
22541
22708
|
TreasuryWalletListResponse:
|
|
22542
22709
|
type: object
|
|
@@ -24912,6 +25079,84 @@ components:
|
|
|
24912
25079
|
type: string
|
|
24913
25080
|
name:
|
|
24914
25081
|
type: string
|
|
25082
|
+
prf_supported:
|
|
25083
|
+
type: boolean
|
|
25084
|
+
nullable: true
|
|
25085
|
+
description: |
|
|
25086
|
+
`prf.enabled` from `credential.getClientExtensionResults()` —
|
|
25087
|
+
whether this authenticator can derive the secret that wraps a
|
|
25088
|
+
wallet share. Omit if the client did not request the extension.
|
|
25089
|
+
|
|
25090
|
+
PutClientShareRequest:
|
|
25091
|
+
type: object
|
|
25092
|
+
required: [wrap_kind, wrapped_share, salt]
|
|
25093
|
+
properties:
|
|
25094
|
+
wrap_kind:
|
|
25095
|
+
type: string
|
|
25096
|
+
enum: [passkey_prf, recovery_code]
|
|
25097
|
+
credential_id:
|
|
25098
|
+
type: string
|
|
25099
|
+
format: uuid
|
|
25100
|
+
nullable: true
|
|
25101
|
+
description: Required for `passkey_prf`; the passkey id from `GET /v1/auth/passkeys`.
|
|
25102
|
+
wrapped_share:
|
|
25103
|
+
type: string
|
|
25104
|
+
description: Base64 ciphertext (≤ 4 KiB). Opaque to the vault.
|
|
25105
|
+
salt:
|
|
25106
|
+
type: string
|
|
25107
|
+
description: Base64 PRF salt, 16–64 random bytes, one per key.
|
|
25108
|
+
|
|
25109
|
+
ClientShareResponse:
|
|
25110
|
+
type: object
|
|
25111
|
+
properties:
|
|
25112
|
+
id:
|
|
25113
|
+
type: string
|
|
25114
|
+
format: uuid
|
|
25115
|
+
key_id:
|
|
25116
|
+
type: string
|
|
25117
|
+
format: uuid
|
|
25118
|
+
key_kind:
|
|
25119
|
+
type: string
|
|
25120
|
+
enum: [agent_signing_key, treasury_wallet]
|
|
25121
|
+
wrap_kind:
|
|
25122
|
+
type: string
|
|
25123
|
+
enum: [passkey_prf, recovery_code]
|
|
25124
|
+
credential_id:
|
|
25125
|
+
type: string
|
|
25126
|
+
format: uuid
|
|
25127
|
+
nullable: true
|
|
25128
|
+
wrapped_share:
|
|
25129
|
+
type: string
|
|
25130
|
+
description: Base64, exactly as stored.
|
|
25131
|
+
salt:
|
|
25132
|
+
type: string
|
|
25133
|
+
description: Base64.
|
|
25134
|
+
created_at:
|
|
25135
|
+
type: string
|
|
25136
|
+
format: date-time
|
|
25137
|
+
updated_at:
|
|
25138
|
+
type: string
|
|
25139
|
+
format: date-time
|
|
25140
|
+
|
|
25141
|
+
ClientShareListResponse:
|
|
25142
|
+
type: object
|
|
25143
|
+
properties:
|
|
25144
|
+
key_id:
|
|
25145
|
+
type: string
|
|
25146
|
+
format: uuid
|
|
25147
|
+
key_kind:
|
|
25148
|
+
type: string
|
|
25149
|
+
enum: [agent_signing_key, treasury_wallet]
|
|
25150
|
+
custody:
|
|
25151
|
+
type: string
|
|
25152
|
+
enum: [server, client_tss]
|
|
25153
|
+
description: |
|
|
25154
|
+
`server` — 1claw holds the whole private key and can sign alone.
|
|
25155
|
+
`client_tss` — 2-party threshold key; the customer's share is required.
|
|
25156
|
+
shares:
|
|
25157
|
+
type: array
|
|
25158
|
+
items:
|
|
25159
|
+
$ref: "#/components/schemas/ClientShareResponse"
|
|
24915
25160
|
|
|
24916
25161
|
PasskeyRegisterCompleteResponse:
|
|
24917
25162
|
type: object
|