@1claw/openapi-spec 0.61.17 → 0.61.19
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 +981 -1
- package/openapi.yaml +591 -1
- 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.19"
|
|
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,497 @@ 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
|
+
|
|
5600
|
+
/v1/keys/tss/keygen/begin:
|
|
5601
|
+
post:
|
|
5602
|
+
tags: [Key Custody]
|
|
5603
|
+
summary: Start a 2-party threshold key generation
|
|
5604
|
+
description: |
|
|
5605
|
+
Begins a distributed key generation between the vault (party 1) and the
|
|
5606
|
+
caller's browser (party 2, `@1claw/tss-wasm`). The result is a
|
|
5607
|
+
`custody: client_tss` treasury wallet whose private key never exists
|
|
5608
|
+
anywhere: the vault keeps one FROST share, the caller keeps the other,
|
|
5609
|
+
wrapped under their passkey's PRF output. Requires a passkey with
|
|
5610
|
+
`prf_supported: true` and no active wallet on the chain. Chains: `solana`
|
|
5611
|
+
(Ed25519). Sessions expire after 10 minutes.
|
|
5612
|
+
operationId: tssKeygenBegin
|
|
5613
|
+
security:
|
|
5614
|
+
- BearerAuth: []
|
|
5615
|
+
requestBody:
|
|
5616
|
+
required: true
|
|
5617
|
+
content:
|
|
5618
|
+
application/json:
|
|
5619
|
+
schema:
|
|
5620
|
+
type: object
|
|
5621
|
+
required: [chain]
|
|
5622
|
+
properties:
|
|
5623
|
+
chain:
|
|
5624
|
+
type: string
|
|
5625
|
+
enum: [solana]
|
|
5626
|
+
responses:
|
|
5627
|
+
"201":
|
|
5628
|
+
description: Session opened; the vault's round-1 package
|
|
5629
|
+
content:
|
|
5630
|
+
application/json:
|
|
5631
|
+
schema:
|
|
5632
|
+
type: object
|
|
5633
|
+
properties:
|
|
5634
|
+
session_id: { type: string, format: uuid }
|
|
5635
|
+
chain: { type: string }
|
|
5636
|
+
curve: { type: string }
|
|
5637
|
+
server_identifier: { type: integer, example: 1 }
|
|
5638
|
+
client_identifier: { type: integer, example: 2 }
|
|
5639
|
+
server_round1:
|
|
5640
|
+
type: string
|
|
5641
|
+
description: Base64 FROST DKG round-1 package.
|
|
5642
|
+
expires_at: { type: string, format: date-time }
|
|
5643
|
+
"400":
|
|
5644
|
+
$ref: "#/components/responses/BadRequest"
|
|
5645
|
+
"401":
|
|
5646
|
+
$ref: "#/components/responses/Unauthorized"
|
|
5647
|
+
"403":
|
|
5648
|
+
$ref: "#/components/responses/Forbidden"
|
|
5649
|
+
"409":
|
|
5650
|
+
$ref: "#/components/responses/Conflict"
|
|
5651
|
+
|
|
5652
|
+
/v1/keys/tss/keygen/round2:
|
|
5653
|
+
post:
|
|
5654
|
+
tags: [Key Custody]
|
|
5655
|
+
summary: Threshold key generation, round 2
|
|
5656
|
+
operationId: tssKeygenRound2
|
|
5657
|
+
security:
|
|
5658
|
+
- BearerAuth: []
|
|
5659
|
+
requestBody:
|
|
5660
|
+
required: true
|
|
5661
|
+
content:
|
|
5662
|
+
application/json:
|
|
5663
|
+
schema:
|
|
5664
|
+
type: object
|
|
5665
|
+
required: [session_id, client_round1]
|
|
5666
|
+
properties:
|
|
5667
|
+
session_id: { type: string, format: uuid }
|
|
5668
|
+
client_round1:
|
|
5669
|
+
type: string
|
|
5670
|
+
description: Base64 FROST DKG round-1 package from the browser.
|
|
5671
|
+
responses:
|
|
5672
|
+
"200":
|
|
5673
|
+
description: The vault's round-2 package, addressed to the caller
|
|
5674
|
+
content:
|
|
5675
|
+
application/json:
|
|
5676
|
+
schema:
|
|
5677
|
+
type: object
|
|
5678
|
+
properties:
|
|
5679
|
+
session_id: { type: string, format: uuid }
|
|
5680
|
+
server_round2: { type: string }
|
|
5681
|
+
"400":
|
|
5682
|
+
$ref: "#/components/responses/BadRequest"
|
|
5683
|
+
"401":
|
|
5684
|
+
$ref: "#/components/responses/Unauthorized"
|
|
5685
|
+
"404":
|
|
5686
|
+
$ref: "#/components/responses/NotFound"
|
|
5687
|
+
"409":
|
|
5688
|
+
$ref: "#/components/responses/Conflict"
|
|
5689
|
+
|
|
5690
|
+
/v1/keys/tss/keygen/complete:
|
|
5691
|
+
post:
|
|
5692
|
+
tags: [Key Custody]
|
|
5693
|
+
summary: Threshold key generation, final round
|
|
5694
|
+
description: |
|
|
5695
|
+
Needs `X-Passkey-Token` from a tx-assert with `action: tss_keygen` and
|
|
5696
|
+
`tx_digest` = hex SHA-256 of the session id. Creates the `client_tss`
|
|
5697
|
+
wallet and returns its address. The browser derives the same public key
|
|
5698
|
+
package from the packages it already holds; store your share with
|
|
5699
|
+
`PUT /v1/keys/{key_id}/client-share` next.
|
|
5700
|
+
operationId: tssKeygenComplete
|
|
5701
|
+
security:
|
|
5702
|
+
- BearerAuth: []
|
|
5703
|
+
parameters:
|
|
5704
|
+
- name: X-Passkey-Token
|
|
5705
|
+
in: header
|
|
5706
|
+
required: true
|
|
5707
|
+
schema: { type: string }
|
|
5708
|
+
requestBody:
|
|
5709
|
+
required: true
|
|
5710
|
+
content:
|
|
5711
|
+
application/json:
|
|
5712
|
+
schema:
|
|
5713
|
+
type: object
|
|
5714
|
+
required: [session_id, client_round2]
|
|
5715
|
+
properties:
|
|
5716
|
+
session_id: { type: string, format: uuid }
|
|
5717
|
+
client_round2:
|
|
5718
|
+
type: string
|
|
5719
|
+
description: Base64 FROST DKG round-2 package from the browser, addressed to the vault.
|
|
5720
|
+
responses:
|
|
5721
|
+
"201":
|
|
5722
|
+
description: Wallet created
|
|
5723
|
+
content:
|
|
5724
|
+
application/json:
|
|
5725
|
+
schema:
|
|
5726
|
+
type: object
|
|
5727
|
+
properties:
|
|
5728
|
+
key_id: { type: string, format: uuid }
|
|
5729
|
+
chain: { type: string }
|
|
5730
|
+
curve: { type: string }
|
|
5731
|
+
custody: { type: string, enum: [client_tss] }
|
|
5732
|
+
address: { type: string }
|
|
5733
|
+
public_key_hex: { type: string }
|
|
5734
|
+
public_key_package: { type: string, description: Base64 FROST public key package. }
|
|
5735
|
+
"400":
|
|
5736
|
+
$ref: "#/components/responses/BadRequest"
|
|
5737
|
+
"401":
|
|
5738
|
+
$ref: "#/components/responses/Unauthorized"
|
|
5739
|
+
"403":
|
|
5740
|
+
$ref: "#/components/responses/Forbidden"
|
|
5741
|
+
"404":
|
|
5742
|
+
$ref: "#/components/responses/NotFound"
|
|
5743
|
+
"409":
|
|
5744
|
+
$ref: "#/components/responses/Conflict"
|
|
5745
|
+
|
|
5746
|
+
/v1/keys/{key_id}/tss/sign/begin:
|
|
5747
|
+
parameters:
|
|
5748
|
+
- name: key_id
|
|
5749
|
+
in: path
|
|
5750
|
+
required: true
|
|
5751
|
+
schema: { type: string, format: uuid }
|
|
5752
|
+
post:
|
|
5753
|
+
tags: [Key Custody]
|
|
5754
|
+
summary: Threshold signing, round 1
|
|
5755
|
+
description: |
|
|
5756
|
+
Needs `X-Passkey-Token` from a tx-assert with `action: tss_sign` and
|
|
5757
|
+
`tx_digest` = hex SHA-256 of `message`. The message must be a decodable
|
|
5758
|
+
Solana transaction message; every transfer destination in it is checked
|
|
5759
|
+
against the OFAC SDN list before the vault commits. Returns the vault's
|
|
5760
|
+
signing commitments; nonces are single-use and expire with the session.
|
|
5761
|
+
operationId: tssSignBegin
|
|
5762
|
+
security:
|
|
5763
|
+
- BearerAuth: []
|
|
5764
|
+
parameters:
|
|
5765
|
+
- name: X-Passkey-Token
|
|
5766
|
+
in: header
|
|
5767
|
+
required: true
|
|
5768
|
+
schema: { type: string }
|
|
5769
|
+
requestBody:
|
|
5770
|
+
required: true
|
|
5771
|
+
content:
|
|
5772
|
+
application/json:
|
|
5773
|
+
schema:
|
|
5774
|
+
type: object
|
|
5775
|
+
required: [message]
|
|
5776
|
+
properties:
|
|
5777
|
+
message:
|
|
5778
|
+
type: string
|
|
5779
|
+
description: Base64 bytes to sign (the serialised transaction message).
|
|
5780
|
+
responses:
|
|
5781
|
+
"201":
|
|
5782
|
+
description: Session opened
|
|
5783
|
+
content:
|
|
5784
|
+
application/json:
|
|
5785
|
+
schema:
|
|
5786
|
+
type: object
|
|
5787
|
+
properties:
|
|
5788
|
+
session_id: { type: string, format: uuid }
|
|
5789
|
+
key_id: { type: string, format: uuid }
|
|
5790
|
+
message_digest: { type: string }
|
|
5791
|
+
server_commitments: { type: string }
|
|
5792
|
+
expires_at: { type: string, format: date-time }
|
|
5793
|
+
"400":
|
|
5794
|
+
$ref: "#/components/responses/BadRequest"
|
|
5795
|
+
"401":
|
|
5796
|
+
$ref: "#/components/responses/Unauthorized"
|
|
5797
|
+
"403":
|
|
5798
|
+
$ref: "#/components/responses/Forbidden"
|
|
5799
|
+
"404":
|
|
5800
|
+
$ref: "#/components/responses/NotFound"
|
|
5801
|
+
|
|
5802
|
+
/v1/keys/{key_id}/tss/sign/complete:
|
|
5803
|
+
parameters:
|
|
5804
|
+
- name: key_id
|
|
5805
|
+
in: path
|
|
5806
|
+
required: true
|
|
5807
|
+
schema: { type: string, format: uuid }
|
|
5808
|
+
post:
|
|
5809
|
+
tags: [Key Custody]
|
|
5810
|
+
summary: Threshold signing, round 2 — aggregate and return the signature
|
|
5811
|
+
description: |
|
|
5812
|
+
The vault produces its share, verifies the caller's, aggregates, and
|
|
5813
|
+
verifies the result under the group key before returning it. A bad
|
|
5814
|
+
share is a `400`, never a published signature.
|
|
5815
|
+
operationId: tssSignComplete
|
|
5816
|
+
security:
|
|
5817
|
+
- BearerAuth: []
|
|
5818
|
+
requestBody:
|
|
5819
|
+
required: true
|
|
5820
|
+
content:
|
|
5821
|
+
application/json:
|
|
5822
|
+
schema:
|
|
5823
|
+
type: object
|
|
5824
|
+
required: [session_id, client_commitments, client_signature_share]
|
|
5825
|
+
properties:
|
|
5826
|
+
session_id: { type: string, format: uuid }
|
|
5827
|
+
client_commitments: { type: string }
|
|
5828
|
+
client_signature_share: { type: string }
|
|
5829
|
+
responses:
|
|
5830
|
+
"200":
|
|
5831
|
+
description: Signature
|
|
5832
|
+
content:
|
|
5833
|
+
application/json:
|
|
5834
|
+
schema:
|
|
5835
|
+
type: object
|
|
5836
|
+
properties:
|
|
5837
|
+
key_id: { type: string, format: uuid }
|
|
5838
|
+
message_digest: { type: string }
|
|
5839
|
+
signature: { type: string, description: Base64 64-byte Ed25519 signature. }
|
|
5840
|
+
signature_hex: { type: string }
|
|
5841
|
+
"400":
|
|
5842
|
+
$ref: "#/components/responses/BadRequest"
|
|
5843
|
+
"401":
|
|
5844
|
+
$ref: "#/components/responses/Unauthorized"
|
|
5845
|
+
"404":
|
|
5846
|
+
$ref: "#/components/responses/NotFound"
|
|
5847
|
+
"409":
|
|
5848
|
+
$ref: "#/components/responses/Conflict"
|
|
5849
|
+
|
|
5850
|
+
/v1/treasury/wallets/{chain}/tss/prepare:
|
|
5851
|
+
parameters:
|
|
5852
|
+
- name: chain
|
|
5853
|
+
in: path
|
|
5854
|
+
required: true
|
|
5855
|
+
schema: { type: string }
|
|
5856
|
+
post:
|
|
5857
|
+
tags: [Key Custody]
|
|
5858
|
+
summary: Build the unsigned message for a send from a client_tss wallet
|
|
5859
|
+
description: |
|
|
5860
|
+
Runs wallet access, the sanctions screen and spend policies on the
|
|
5861
|
+
declared destination, fetches a recent blockhash and returns the
|
|
5862
|
+
unsigned transaction message. Sign it with `/v1/keys/{key_id}/tss/sign/*`
|
|
5863
|
+
and submit with `…/tss/broadcast`.
|
|
5864
|
+
operationId: tssTreasuryPrepare
|
|
5865
|
+
security:
|
|
5866
|
+
- BearerAuth: []
|
|
5867
|
+
requestBody:
|
|
5868
|
+
required: true
|
|
5869
|
+
content:
|
|
5870
|
+
application/json:
|
|
5871
|
+
schema:
|
|
5872
|
+
type: object
|
|
5873
|
+
required: [to, value]
|
|
5874
|
+
properties:
|
|
5875
|
+
to: { type: string }
|
|
5876
|
+
value: { type: string, description: Major units, e.g. "0.5". }
|
|
5877
|
+
memo: { type: string }
|
|
5878
|
+
responses:
|
|
5879
|
+
"200":
|
|
5880
|
+
description: Unsigned message
|
|
5881
|
+
content:
|
|
5882
|
+
application/json:
|
|
5883
|
+
schema:
|
|
5884
|
+
type: object
|
|
5885
|
+
properties:
|
|
5886
|
+
key_id: { type: string, format: uuid }
|
|
5887
|
+
chain: { type: string }
|
|
5888
|
+
from: { type: string }
|
|
5889
|
+
to: { type: string }
|
|
5890
|
+
value_base_units: { type: string }
|
|
5891
|
+
recent_blockhash: { type: string }
|
|
5892
|
+
message: { type: string }
|
|
5893
|
+
message_digest: { type: string }
|
|
5894
|
+
"400":
|
|
5895
|
+
$ref: "#/components/responses/BadRequest"
|
|
5896
|
+
"401":
|
|
5897
|
+
$ref: "#/components/responses/Unauthorized"
|
|
5898
|
+
"403":
|
|
5899
|
+
$ref: "#/components/responses/Forbidden"
|
|
5900
|
+
"404":
|
|
5901
|
+
$ref: "#/components/responses/NotFound"
|
|
5902
|
+
|
|
5903
|
+
/v1/treasury/wallets/{chain}/tss/broadcast:
|
|
5904
|
+
parameters:
|
|
5905
|
+
- name: chain
|
|
5906
|
+
in: path
|
|
5907
|
+
required: true
|
|
5908
|
+
schema: { type: string }
|
|
5909
|
+
post:
|
|
5910
|
+
tags: [Key Custody]
|
|
5911
|
+
summary: Broadcast a threshold-signed send
|
|
5912
|
+
description: |
|
|
5913
|
+
Verifies the signature under the wallet's public key over exactly this
|
|
5914
|
+
message, checks `to` is a transfer destination inside it, assembles the
|
|
5915
|
+
transaction and submits it. Audited as `treasury_wallet.send`.
|
|
5916
|
+
operationId: tssTreasuryBroadcast
|
|
5917
|
+
security:
|
|
5918
|
+
- BearerAuth: []
|
|
5919
|
+
requestBody:
|
|
5920
|
+
required: true
|
|
5921
|
+
content:
|
|
5922
|
+
application/json:
|
|
5923
|
+
schema:
|
|
5924
|
+
type: object
|
|
5925
|
+
required: [message, signature, to, value_base_units]
|
|
5926
|
+
properties:
|
|
5927
|
+
message: { type: string }
|
|
5928
|
+
signature: { type: string }
|
|
5929
|
+
to: { type: string }
|
|
5930
|
+
value_base_units: { type: string }
|
|
5931
|
+
responses:
|
|
5932
|
+
"200":
|
|
5933
|
+
description: Broadcast
|
|
5934
|
+
content:
|
|
5935
|
+
application/json:
|
|
5936
|
+
schema:
|
|
5937
|
+
$ref: "#/components/schemas/TreasuryWalletSendResponse"
|
|
5938
|
+
"400":
|
|
5939
|
+
$ref: "#/components/responses/BadRequest"
|
|
5940
|
+
"401":
|
|
5941
|
+
$ref: "#/components/responses/Unauthorized"
|
|
5942
|
+
"404":
|
|
5943
|
+
$ref: "#/components/responses/NotFound"
|
|
5944
|
+
|
|
5445
5945
|
/v1/treasury/wallets/generate:
|
|
5446
5946
|
post:
|
|
5447
5947
|
tags: [Treasury Wallets]
|
|
@@ -20764,6 +21264,12 @@ components:
|
|
|
20764
21264
|
type: string
|
|
20765
21265
|
format: date-time
|
|
20766
21266
|
nullable: true
|
|
21267
|
+
custody:
|
|
21268
|
+
type: string
|
|
21269
|
+
enum: [server, client_tss]
|
|
21270
|
+
description: |
|
|
21271
|
+
`server` — 1claw holds the whole private key and can sign alone.
|
|
21272
|
+
`client_tss` — 2-party threshold key; the customer's passkey share is required.
|
|
20767
21273
|
|
|
20768
21274
|
SigningKeyListResponse:
|
|
20769
21275
|
type: object
|
|
@@ -22537,6 +23043,12 @@ components:
|
|
|
22537
23043
|
created_at:
|
|
22538
23044
|
type: string
|
|
22539
23045
|
format: date-time
|
|
23046
|
+
custody:
|
|
23047
|
+
type: string
|
|
23048
|
+
enum: [server, client_tss]
|
|
23049
|
+
description: |
|
|
23050
|
+
`server` — 1claw holds the whole private key and can sign alone.
|
|
23051
|
+
`client_tss` — 2-party threshold key; the customer's passkey share is required.
|
|
22540
23052
|
|
|
22541
23053
|
TreasuryWalletListResponse:
|
|
22542
23054
|
type: object
|
|
@@ -24912,6 +25424,84 @@ components:
|
|
|
24912
25424
|
type: string
|
|
24913
25425
|
name:
|
|
24914
25426
|
type: string
|
|
25427
|
+
prf_supported:
|
|
25428
|
+
type: boolean
|
|
25429
|
+
nullable: true
|
|
25430
|
+
description: |
|
|
25431
|
+
`prf.enabled` from `credential.getClientExtensionResults()` —
|
|
25432
|
+
whether this authenticator can derive the secret that wraps a
|
|
25433
|
+
wallet share. Omit if the client did not request the extension.
|
|
25434
|
+
|
|
25435
|
+
PutClientShareRequest:
|
|
25436
|
+
type: object
|
|
25437
|
+
required: [wrap_kind, wrapped_share, salt]
|
|
25438
|
+
properties:
|
|
25439
|
+
wrap_kind:
|
|
25440
|
+
type: string
|
|
25441
|
+
enum: [passkey_prf, recovery_code]
|
|
25442
|
+
credential_id:
|
|
25443
|
+
type: string
|
|
25444
|
+
format: uuid
|
|
25445
|
+
nullable: true
|
|
25446
|
+
description: Required for `passkey_prf`; the passkey id from `GET /v1/auth/passkeys`.
|
|
25447
|
+
wrapped_share:
|
|
25448
|
+
type: string
|
|
25449
|
+
description: Base64 ciphertext (≤ 4 KiB). Opaque to the vault.
|
|
25450
|
+
salt:
|
|
25451
|
+
type: string
|
|
25452
|
+
description: Base64 PRF salt, 16–64 random bytes, one per key.
|
|
25453
|
+
|
|
25454
|
+
ClientShareResponse:
|
|
25455
|
+
type: object
|
|
25456
|
+
properties:
|
|
25457
|
+
id:
|
|
25458
|
+
type: string
|
|
25459
|
+
format: uuid
|
|
25460
|
+
key_id:
|
|
25461
|
+
type: string
|
|
25462
|
+
format: uuid
|
|
25463
|
+
key_kind:
|
|
25464
|
+
type: string
|
|
25465
|
+
enum: [agent_signing_key, treasury_wallet]
|
|
25466
|
+
wrap_kind:
|
|
25467
|
+
type: string
|
|
25468
|
+
enum: [passkey_prf, recovery_code]
|
|
25469
|
+
credential_id:
|
|
25470
|
+
type: string
|
|
25471
|
+
format: uuid
|
|
25472
|
+
nullable: true
|
|
25473
|
+
wrapped_share:
|
|
25474
|
+
type: string
|
|
25475
|
+
description: Base64, exactly as stored.
|
|
25476
|
+
salt:
|
|
25477
|
+
type: string
|
|
25478
|
+
description: Base64.
|
|
25479
|
+
created_at:
|
|
25480
|
+
type: string
|
|
25481
|
+
format: date-time
|
|
25482
|
+
updated_at:
|
|
25483
|
+
type: string
|
|
25484
|
+
format: date-time
|
|
25485
|
+
|
|
25486
|
+
ClientShareListResponse:
|
|
25487
|
+
type: object
|
|
25488
|
+
properties:
|
|
25489
|
+
key_id:
|
|
25490
|
+
type: string
|
|
25491
|
+
format: uuid
|
|
25492
|
+
key_kind:
|
|
25493
|
+
type: string
|
|
25494
|
+
enum: [agent_signing_key, treasury_wallet]
|
|
25495
|
+
custody:
|
|
25496
|
+
type: string
|
|
25497
|
+
enum: [server, client_tss]
|
|
25498
|
+
description: |
|
|
25499
|
+
`server` — 1claw holds the whole private key and can sign alone.
|
|
25500
|
+
`client_tss` — 2-party threshold key; the customer's share is required.
|
|
25501
|
+
shares:
|
|
25502
|
+
type: array
|
|
25503
|
+
items:
|
|
25504
|
+
$ref: "#/components/schemas/ClientShareResponse"
|
|
24915
25505
|
|
|
24916
25506
|
PasskeyRegisterCompleteResponse:
|
|
24917
25507
|
type: object
|