@1claw/openapi-spec 0.61.18 → 0.61.20
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 +1054 -1
- package/openapi.yaml +557 -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.20"
|
|
6
6
|
description: |
|
|
7
7
|
Secure secret management for AI agents. Provides vaults, secrets,
|
|
8
8
|
policy-based access control, agent identity, Intents API,
|
|
@@ -5597,6 +5597,548 @@ paths:
|
|
|
5597
5597
|
"404":
|
|
5598
5598
|
$ref: "#/components/responses/NotFound"
|
|
5599
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
|
+
|
|
5945
|
+
/v1/treasury/passkey-safes:
|
|
5946
|
+
post:
|
|
5947
|
+
tags: [Key Custody]
|
|
5948
|
+
summary: Create a Safe owned by your passkey
|
|
5949
|
+
description: |
|
|
5950
|
+
An EVM Safe (v1.4.1) whose only owner is Safe's WebAuthn shared signer,
|
|
5951
|
+
configured with this passkey's P-256 public key. No private key exists
|
|
5952
|
+
anywhere: signing a transaction is a WebAuthn assertion whose challenge
|
|
5953
|
+
is the SafeTx hash. The address is counterfactual (CREATE2) until the
|
|
5954
|
+
first `execute` deploys it. Chains: base, optimism, arbitrum, polygon
|
|
5955
|
+
(RIP-7212 precompile + fallback verifier), ethereum, sepolia, base-sepolia.
|
|
5956
|
+
operationId: createPasskeySafe
|
|
5957
|
+
security:
|
|
5958
|
+
- BearerAuth: []
|
|
5959
|
+
requestBody:
|
|
5960
|
+
required: true
|
|
5961
|
+
content:
|
|
5962
|
+
application/json:
|
|
5963
|
+
schema:
|
|
5964
|
+
type: object
|
|
5965
|
+
required: [chain, passkey_id]
|
|
5966
|
+
properties:
|
|
5967
|
+
chain: { type: string }
|
|
5968
|
+
passkey_id: { type: string, format: uuid }
|
|
5969
|
+
responses:
|
|
5970
|
+
"201":
|
|
5971
|
+
description: Safe registered (counterfactual)
|
|
5972
|
+
content:
|
|
5973
|
+
application/json:
|
|
5974
|
+
schema:
|
|
5975
|
+
$ref: "#/components/schemas/PasskeySafe"
|
|
5976
|
+
"400":
|
|
5977
|
+
$ref: "#/components/responses/BadRequest"
|
|
5978
|
+
"401":
|
|
5979
|
+
$ref: "#/components/responses/Unauthorized"
|
|
5980
|
+
"404":
|
|
5981
|
+
$ref: "#/components/responses/NotFound"
|
|
5982
|
+
"409":
|
|
5983
|
+
$ref: "#/components/responses/Conflict"
|
|
5984
|
+
get:
|
|
5985
|
+
tags: [Key Custody]
|
|
5986
|
+
summary: List your passkey-owned Safes
|
|
5987
|
+
operationId: listPasskeySafes
|
|
5988
|
+
security:
|
|
5989
|
+
- BearerAuth: []
|
|
5990
|
+
responses:
|
|
5991
|
+
"200":
|
|
5992
|
+
description: Safes
|
|
5993
|
+
content:
|
|
5994
|
+
application/json:
|
|
5995
|
+
schema:
|
|
5996
|
+
type: object
|
|
5997
|
+
properties:
|
|
5998
|
+
safes:
|
|
5999
|
+
type: array
|
|
6000
|
+
items:
|
|
6001
|
+
$ref: "#/components/schemas/PasskeySafe"
|
|
6002
|
+
"401":
|
|
6003
|
+
$ref: "#/components/responses/Unauthorized"
|
|
6004
|
+
|
|
6005
|
+
/v1/treasury/passkey-safes/{id}:
|
|
6006
|
+
parameters:
|
|
6007
|
+
- name: id
|
|
6008
|
+
in: path
|
|
6009
|
+
required: true
|
|
6010
|
+
schema: { type: string, format: uuid }
|
|
6011
|
+
delete:
|
|
6012
|
+
tags: [Key Custody]
|
|
6013
|
+
summary: Forget a passkey Safe
|
|
6014
|
+
description: Deactivates the record only; the Safe and its funds stay on-chain under the passkey.
|
|
6015
|
+
operationId: deactivatePasskeySafe
|
|
6016
|
+
security:
|
|
6017
|
+
- BearerAuth: []
|
|
6018
|
+
responses:
|
|
6019
|
+
"204":
|
|
6020
|
+
description: Deactivated
|
|
6021
|
+
"401":
|
|
6022
|
+
$ref: "#/components/responses/Unauthorized"
|
|
6023
|
+
"404":
|
|
6024
|
+
$ref: "#/components/responses/NotFound"
|
|
6025
|
+
|
|
6026
|
+
/v1/treasury/passkey-safes/{id}/prepare:
|
|
6027
|
+
parameters:
|
|
6028
|
+
- name: id
|
|
6029
|
+
in: path
|
|
6030
|
+
required: true
|
|
6031
|
+
schema: { type: string, format: uuid }
|
|
6032
|
+
post:
|
|
6033
|
+
tags: [Key Custody]
|
|
6034
|
+
summary: Compute the SafeTx hash for a call from a passkey Safe
|
|
6035
|
+
description: |
|
|
6036
|
+
Runs the sanctions screen and spend policies on the call, reads the
|
|
6037
|
+
Safe's on-chain nonce (0 if not yet deployed), and returns the SafeTx
|
|
6038
|
+
hash — the raw 32 bytes are the WebAuthn challenge to sign with
|
|
6039
|
+
`userVerification: "required"`.
|
|
6040
|
+
operationId: preparePasskeySafeTx
|
|
6041
|
+
security:
|
|
6042
|
+
- BearerAuth: []
|
|
6043
|
+
requestBody:
|
|
6044
|
+
required: true
|
|
6045
|
+
content:
|
|
6046
|
+
application/json:
|
|
6047
|
+
schema:
|
|
6048
|
+
type: object
|
|
6049
|
+
required: [to, value_wei]
|
|
6050
|
+
properties:
|
|
6051
|
+
to: { type: string }
|
|
6052
|
+
value_wei: { type: string }
|
|
6053
|
+
data: { type: string, description: Hex calldata, optional. }
|
|
6054
|
+
responses:
|
|
6055
|
+
"200":
|
|
6056
|
+
description: What to sign
|
|
6057
|
+
content:
|
|
6058
|
+
application/json:
|
|
6059
|
+
schema:
|
|
6060
|
+
type: object
|
|
6061
|
+
properties:
|
|
6062
|
+
safe_id: { type: string, format: uuid }
|
|
6063
|
+
safe_address: { type: string }
|
|
6064
|
+
chain: { type: string }
|
|
6065
|
+
chain_id: { type: integer }
|
|
6066
|
+
to: { type: string }
|
|
6067
|
+
value_wei: { type: string }
|
|
6068
|
+
data: { type: string }
|
|
6069
|
+
nonce: { type: integer }
|
|
6070
|
+
deploy_required: { type: boolean }
|
|
6071
|
+
safe_tx_hash: { type: string }
|
|
6072
|
+
credential_id: { type: string }
|
|
6073
|
+
rp_id: { type: string }
|
|
6074
|
+
"400":
|
|
6075
|
+
$ref: "#/components/responses/BadRequest"
|
|
6076
|
+
"401":
|
|
6077
|
+
$ref: "#/components/responses/Unauthorized"
|
|
6078
|
+
"403":
|
|
6079
|
+
$ref: "#/components/responses/Forbidden"
|
|
6080
|
+
"404":
|
|
6081
|
+
$ref: "#/components/responses/NotFound"
|
|
6082
|
+
|
|
6083
|
+
/v1/treasury/passkey-safes/{id}/execute:
|
|
6084
|
+
parameters:
|
|
6085
|
+
- name: id
|
|
6086
|
+
in: path
|
|
6087
|
+
required: true
|
|
6088
|
+
schema: { type: string, format: uuid }
|
|
6089
|
+
post:
|
|
6090
|
+
tags: [Key Custody]
|
|
6091
|
+
summary: Relay a passkey-signed Safe transaction
|
|
6092
|
+
description: |
|
|
6093
|
+
Recomputes the SafeTx hash, verifies the WebAuthn assertion locally
|
|
6094
|
+
(this passkey, this hash, a dashboard origin, UV flag set), wraps it in
|
|
6095
|
+
Safe's contract-signature format and relays `execTransaction` — deploying
|
|
6096
|
+
the Safe first if needed — from your Ethereum treasury wallet, which pays
|
|
6097
|
+
gas and is not an owner. Audited as `passkey_safe.executed`.
|
|
6098
|
+
operationId: executePasskeySafeTx
|
|
6099
|
+
security:
|
|
6100
|
+
- BearerAuth: []
|
|
6101
|
+
requestBody:
|
|
6102
|
+
required: true
|
|
6103
|
+
content:
|
|
6104
|
+
application/json:
|
|
6105
|
+
schema:
|
|
6106
|
+
type: object
|
|
6107
|
+
required: [to, value_wei, nonce, authenticator_data, client_data_json, signature]
|
|
6108
|
+
properties:
|
|
6109
|
+
to: { type: string }
|
|
6110
|
+
value_wei: { type: string }
|
|
6111
|
+
data: { type: string }
|
|
6112
|
+
nonce: { type: integer }
|
|
6113
|
+
authenticator_data: { type: string, description: Base64url. }
|
|
6114
|
+
client_data_json: { type: string, description: Base64url. }
|
|
6115
|
+
signature: { type: string, description: Base64url DER ECDSA signature. }
|
|
6116
|
+
responses:
|
|
6117
|
+
"200":
|
|
6118
|
+
description: Relayed
|
|
6119
|
+
content:
|
|
6120
|
+
application/json:
|
|
6121
|
+
schema:
|
|
6122
|
+
type: object
|
|
6123
|
+
properties:
|
|
6124
|
+
safe_id: { type: string, format: uuid }
|
|
6125
|
+
safe_address: { type: string }
|
|
6126
|
+
chain: { type: string }
|
|
6127
|
+
safe_tx_hash: { type: string }
|
|
6128
|
+
deploy_tx_hash: { type: string, nullable: true }
|
|
6129
|
+
tx_hash: { type: string }
|
|
6130
|
+
status: { type: string }
|
|
6131
|
+
"400":
|
|
6132
|
+
$ref: "#/components/responses/BadRequest"
|
|
6133
|
+
"401":
|
|
6134
|
+
$ref: "#/components/responses/Unauthorized"
|
|
6135
|
+
"403":
|
|
6136
|
+
$ref: "#/components/responses/Forbidden"
|
|
6137
|
+
"404":
|
|
6138
|
+
$ref: "#/components/responses/NotFound"
|
|
6139
|
+
"409":
|
|
6140
|
+
$ref: "#/components/responses/Conflict"
|
|
6141
|
+
|
|
5600
6142
|
/v1/treasury/wallets/generate:
|
|
5601
6143
|
post:
|
|
5602
6144
|
tags: [Treasury Wallets]
|
|
@@ -25138,6 +25680,20 @@ components:
|
|
|
25138
25680
|
type: string
|
|
25139
25681
|
format: date-time
|
|
25140
25682
|
|
|
25683
|
+
PasskeySafe:
|
|
25684
|
+
type: object
|
|
25685
|
+
properties:
|
|
25686
|
+
id: { type: string, format: uuid }
|
|
25687
|
+
chain: { type: string }
|
|
25688
|
+
chain_id: { type: integer }
|
|
25689
|
+
safe_address: { type: string }
|
|
25690
|
+
passkey_id: { type: string, format: uuid }
|
|
25691
|
+
custody: { type: string, enum: [passkey_owner] }
|
|
25692
|
+
deploy_status: { type: string, enum: [pending, deployed] }
|
|
25693
|
+
deploy_tx_hash: { type: string, nullable: true }
|
|
25694
|
+
owner_signer: { type: string, description: The SafeWebAuthnSharedSigner address listed as the Safe's owner. }
|
|
25695
|
+
created_at: { type: string, format: date-time }
|
|
25696
|
+
|
|
25141
25697
|
ClientShareListResponse:
|
|
25142
25698
|
type: object
|
|
25143
25699
|
properties:
|