@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.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.20",
|
|
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"
|
|
@@ -8629,6 +8629,1012 @@
|
|
|
8629
8629
|
}
|
|
8630
8630
|
}
|
|
8631
8631
|
},
|
|
8632
|
+
"/v1/keys/tss/keygen/begin": {
|
|
8633
|
+
"post": {
|
|
8634
|
+
"tags": [
|
|
8635
|
+
"Key Custody"
|
|
8636
|
+
],
|
|
8637
|
+
"summary": "Start a 2-party threshold key generation",
|
|
8638
|
+
"description": "Begins a distributed key generation between the vault (party 1) and the\ncaller's browser (party 2, `@1claw/tss-wasm`). The result is a\n`custody: client_tss` treasury wallet whose private key never exists\nanywhere: the vault keeps one FROST share, the caller keeps the other,\nwrapped under their passkey's PRF output. Requires a passkey with\n`prf_supported: true` and no active wallet on the chain. Chains: `solana`\n(Ed25519). Sessions expire after 10 minutes.\n",
|
|
8639
|
+
"operationId": "tssKeygenBegin",
|
|
8640
|
+
"security": [
|
|
8641
|
+
{
|
|
8642
|
+
"BearerAuth": []
|
|
8643
|
+
}
|
|
8644
|
+
],
|
|
8645
|
+
"requestBody": {
|
|
8646
|
+
"required": true,
|
|
8647
|
+
"content": {
|
|
8648
|
+
"application/json": {
|
|
8649
|
+
"schema": {
|
|
8650
|
+
"type": "object",
|
|
8651
|
+
"required": [
|
|
8652
|
+
"chain"
|
|
8653
|
+
],
|
|
8654
|
+
"properties": {
|
|
8655
|
+
"chain": {
|
|
8656
|
+
"type": "string",
|
|
8657
|
+
"enum": [
|
|
8658
|
+
"solana"
|
|
8659
|
+
]
|
|
8660
|
+
}
|
|
8661
|
+
}
|
|
8662
|
+
}
|
|
8663
|
+
}
|
|
8664
|
+
}
|
|
8665
|
+
},
|
|
8666
|
+
"responses": {
|
|
8667
|
+
"201": {
|
|
8668
|
+
"description": "Session opened; the vault's round-1 package",
|
|
8669
|
+
"content": {
|
|
8670
|
+
"application/json": {
|
|
8671
|
+
"schema": {
|
|
8672
|
+
"type": "object",
|
|
8673
|
+
"properties": {
|
|
8674
|
+
"session_id": {
|
|
8675
|
+
"type": "string",
|
|
8676
|
+
"format": "uuid"
|
|
8677
|
+
},
|
|
8678
|
+
"chain": {
|
|
8679
|
+
"type": "string"
|
|
8680
|
+
},
|
|
8681
|
+
"curve": {
|
|
8682
|
+
"type": "string"
|
|
8683
|
+
},
|
|
8684
|
+
"server_identifier": {
|
|
8685
|
+
"type": "integer",
|
|
8686
|
+
"example": 1
|
|
8687
|
+
},
|
|
8688
|
+
"client_identifier": {
|
|
8689
|
+
"type": "integer",
|
|
8690
|
+
"example": 2
|
|
8691
|
+
},
|
|
8692
|
+
"server_round1": {
|
|
8693
|
+
"type": "string",
|
|
8694
|
+
"description": "Base64 FROST DKG round-1 package."
|
|
8695
|
+
},
|
|
8696
|
+
"expires_at": {
|
|
8697
|
+
"type": "string",
|
|
8698
|
+
"format": "date-time"
|
|
8699
|
+
}
|
|
8700
|
+
}
|
|
8701
|
+
}
|
|
8702
|
+
}
|
|
8703
|
+
}
|
|
8704
|
+
},
|
|
8705
|
+
"400": {
|
|
8706
|
+
"$ref": "#/components/responses/BadRequest"
|
|
8707
|
+
},
|
|
8708
|
+
"401": {
|
|
8709
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8710
|
+
},
|
|
8711
|
+
"403": {
|
|
8712
|
+
"$ref": "#/components/responses/Forbidden"
|
|
8713
|
+
},
|
|
8714
|
+
"409": {
|
|
8715
|
+
"$ref": "#/components/responses/Conflict"
|
|
8716
|
+
}
|
|
8717
|
+
}
|
|
8718
|
+
}
|
|
8719
|
+
},
|
|
8720
|
+
"/v1/keys/tss/keygen/round2": {
|
|
8721
|
+
"post": {
|
|
8722
|
+
"tags": [
|
|
8723
|
+
"Key Custody"
|
|
8724
|
+
],
|
|
8725
|
+
"summary": "Threshold key generation, round 2",
|
|
8726
|
+
"operationId": "tssKeygenRound2",
|
|
8727
|
+
"security": [
|
|
8728
|
+
{
|
|
8729
|
+
"BearerAuth": []
|
|
8730
|
+
}
|
|
8731
|
+
],
|
|
8732
|
+
"requestBody": {
|
|
8733
|
+
"required": true,
|
|
8734
|
+
"content": {
|
|
8735
|
+
"application/json": {
|
|
8736
|
+
"schema": {
|
|
8737
|
+
"type": "object",
|
|
8738
|
+
"required": [
|
|
8739
|
+
"session_id",
|
|
8740
|
+
"client_round1"
|
|
8741
|
+
],
|
|
8742
|
+
"properties": {
|
|
8743
|
+
"session_id": {
|
|
8744
|
+
"type": "string",
|
|
8745
|
+
"format": "uuid"
|
|
8746
|
+
},
|
|
8747
|
+
"client_round1": {
|
|
8748
|
+
"type": "string",
|
|
8749
|
+
"description": "Base64 FROST DKG round-1 package from the browser."
|
|
8750
|
+
}
|
|
8751
|
+
}
|
|
8752
|
+
}
|
|
8753
|
+
}
|
|
8754
|
+
}
|
|
8755
|
+
},
|
|
8756
|
+
"responses": {
|
|
8757
|
+
"200": {
|
|
8758
|
+
"description": "The vault's round-2 package, addressed to the caller",
|
|
8759
|
+
"content": {
|
|
8760
|
+
"application/json": {
|
|
8761
|
+
"schema": {
|
|
8762
|
+
"type": "object",
|
|
8763
|
+
"properties": {
|
|
8764
|
+
"session_id": {
|
|
8765
|
+
"type": "string",
|
|
8766
|
+
"format": "uuid"
|
|
8767
|
+
},
|
|
8768
|
+
"server_round2": {
|
|
8769
|
+
"type": "string"
|
|
8770
|
+
}
|
|
8771
|
+
}
|
|
8772
|
+
}
|
|
8773
|
+
}
|
|
8774
|
+
}
|
|
8775
|
+
},
|
|
8776
|
+
"400": {
|
|
8777
|
+
"$ref": "#/components/responses/BadRequest"
|
|
8778
|
+
},
|
|
8779
|
+
"401": {
|
|
8780
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8781
|
+
},
|
|
8782
|
+
"404": {
|
|
8783
|
+
"$ref": "#/components/responses/NotFound"
|
|
8784
|
+
},
|
|
8785
|
+
"409": {
|
|
8786
|
+
"$ref": "#/components/responses/Conflict"
|
|
8787
|
+
}
|
|
8788
|
+
}
|
|
8789
|
+
}
|
|
8790
|
+
},
|
|
8791
|
+
"/v1/keys/tss/keygen/complete": {
|
|
8792
|
+
"post": {
|
|
8793
|
+
"tags": [
|
|
8794
|
+
"Key Custody"
|
|
8795
|
+
],
|
|
8796
|
+
"summary": "Threshold key generation, final round",
|
|
8797
|
+
"description": "Needs `X-Passkey-Token` from a tx-assert with `action: tss_keygen` and\n`tx_digest` = hex SHA-256 of the session id. Creates the `client_tss`\nwallet and returns its address. The browser derives the same public key\npackage from the packages it already holds; store your share with\n`PUT /v1/keys/{key_id}/client-share` next.\n",
|
|
8798
|
+
"operationId": "tssKeygenComplete",
|
|
8799
|
+
"security": [
|
|
8800
|
+
{
|
|
8801
|
+
"BearerAuth": []
|
|
8802
|
+
}
|
|
8803
|
+
],
|
|
8804
|
+
"parameters": [
|
|
8805
|
+
{
|
|
8806
|
+
"name": "X-Passkey-Token",
|
|
8807
|
+
"in": "header",
|
|
8808
|
+
"required": true,
|
|
8809
|
+
"schema": {
|
|
8810
|
+
"type": "string"
|
|
8811
|
+
}
|
|
8812
|
+
}
|
|
8813
|
+
],
|
|
8814
|
+
"requestBody": {
|
|
8815
|
+
"required": true,
|
|
8816
|
+
"content": {
|
|
8817
|
+
"application/json": {
|
|
8818
|
+
"schema": {
|
|
8819
|
+
"type": "object",
|
|
8820
|
+
"required": [
|
|
8821
|
+
"session_id",
|
|
8822
|
+
"client_round2"
|
|
8823
|
+
],
|
|
8824
|
+
"properties": {
|
|
8825
|
+
"session_id": {
|
|
8826
|
+
"type": "string",
|
|
8827
|
+
"format": "uuid"
|
|
8828
|
+
},
|
|
8829
|
+
"client_round2": {
|
|
8830
|
+
"type": "string",
|
|
8831
|
+
"description": "Base64 FROST DKG round-2 package from the browser, addressed to the vault."
|
|
8832
|
+
}
|
|
8833
|
+
}
|
|
8834
|
+
}
|
|
8835
|
+
}
|
|
8836
|
+
}
|
|
8837
|
+
},
|
|
8838
|
+
"responses": {
|
|
8839
|
+
"201": {
|
|
8840
|
+
"description": "Wallet created",
|
|
8841
|
+
"content": {
|
|
8842
|
+
"application/json": {
|
|
8843
|
+
"schema": {
|
|
8844
|
+
"type": "object",
|
|
8845
|
+
"properties": {
|
|
8846
|
+
"key_id": {
|
|
8847
|
+
"type": "string",
|
|
8848
|
+
"format": "uuid"
|
|
8849
|
+
},
|
|
8850
|
+
"chain": {
|
|
8851
|
+
"type": "string"
|
|
8852
|
+
},
|
|
8853
|
+
"curve": {
|
|
8854
|
+
"type": "string"
|
|
8855
|
+
},
|
|
8856
|
+
"custody": {
|
|
8857
|
+
"type": "string",
|
|
8858
|
+
"enum": [
|
|
8859
|
+
"client_tss"
|
|
8860
|
+
]
|
|
8861
|
+
},
|
|
8862
|
+
"address": {
|
|
8863
|
+
"type": "string"
|
|
8864
|
+
},
|
|
8865
|
+
"public_key_hex": {
|
|
8866
|
+
"type": "string"
|
|
8867
|
+
},
|
|
8868
|
+
"public_key_package": {
|
|
8869
|
+
"type": "string",
|
|
8870
|
+
"description": "Base64 FROST public key package."
|
|
8871
|
+
}
|
|
8872
|
+
}
|
|
8873
|
+
}
|
|
8874
|
+
}
|
|
8875
|
+
}
|
|
8876
|
+
},
|
|
8877
|
+
"400": {
|
|
8878
|
+
"$ref": "#/components/responses/BadRequest"
|
|
8879
|
+
},
|
|
8880
|
+
"401": {
|
|
8881
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8882
|
+
},
|
|
8883
|
+
"403": {
|
|
8884
|
+
"$ref": "#/components/responses/Forbidden"
|
|
8885
|
+
},
|
|
8886
|
+
"404": {
|
|
8887
|
+
"$ref": "#/components/responses/NotFound"
|
|
8888
|
+
},
|
|
8889
|
+
"409": {
|
|
8890
|
+
"$ref": "#/components/responses/Conflict"
|
|
8891
|
+
}
|
|
8892
|
+
}
|
|
8893
|
+
}
|
|
8894
|
+
},
|
|
8895
|
+
"/v1/keys/{key_id}/tss/sign/begin": {
|
|
8896
|
+
"parameters": [
|
|
8897
|
+
{
|
|
8898
|
+
"name": "key_id",
|
|
8899
|
+
"in": "path",
|
|
8900
|
+
"required": true,
|
|
8901
|
+
"schema": {
|
|
8902
|
+
"type": "string",
|
|
8903
|
+
"format": "uuid"
|
|
8904
|
+
}
|
|
8905
|
+
}
|
|
8906
|
+
],
|
|
8907
|
+
"post": {
|
|
8908
|
+
"tags": [
|
|
8909
|
+
"Key Custody"
|
|
8910
|
+
],
|
|
8911
|
+
"summary": "Threshold signing, round 1",
|
|
8912
|
+
"description": "Needs `X-Passkey-Token` from a tx-assert with `action: tss_sign` and\n`tx_digest` = hex SHA-256 of `message`. The message must be a decodable\nSolana transaction message; every transfer destination in it is checked\nagainst the OFAC SDN list before the vault commits. Returns the vault's\nsigning commitments; nonces are single-use and expire with the session.\n",
|
|
8913
|
+
"operationId": "tssSignBegin",
|
|
8914
|
+
"security": [
|
|
8915
|
+
{
|
|
8916
|
+
"BearerAuth": []
|
|
8917
|
+
}
|
|
8918
|
+
],
|
|
8919
|
+
"parameters": [
|
|
8920
|
+
{
|
|
8921
|
+
"name": "X-Passkey-Token",
|
|
8922
|
+
"in": "header",
|
|
8923
|
+
"required": true,
|
|
8924
|
+
"schema": {
|
|
8925
|
+
"type": "string"
|
|
8926
|
+
}
|
|
8927
|
+
}
|
|
8928
|
+
],
|
|
8929
|
+
"requestBody": {
|
|
8930
|
+
"required": true,
|
|
8931
|
+
"content": {
|
|
8932
|
+
"application/json": {
|
|
8933
|
+
"schema": {
|
|
8934
|
+
"type": "object",
|
|
8935
|
+
"required": [
|
|
8936
|
+
"message"
|
|
8937
|
+
],
|
|
8938
|
+
"properties": {
|
|
8939
|
+
"message": {
|
|
8940
|
+
"type": "string",
|
|
8941
|
+
"description": "Base64 bytes to sign (the serialised transaction message)."
|
|
8942
|
+
}
|
|
8943
|
+
}
|
|
8944
|
+
}
|
|
8945
|
+
}
|
|
8946
|
+
}
|
|
8947
|
+
},
|
|
8948
|
+
"responses": {
|
|
8949
|
+
"201": {
|
|
8950
|
+
"description": "Session opened",
|
|
8951
|
+
"content": {
|
|
8952
|
+
"application/json": {
|
|
8953
|
+
"schema": {
|
|
8954
|
+
"type": "object",
|
|
8955
|
+
"properties": {
|
|
8956
|
+
"session_id": {
|
|
8957
|
+
"type": "string",
|
|
8958
|
+
"format": "uuid"
|
|
8959
|
+
},
|
|
8960
|
+
"key_id": {
|
|
8961
|
+
"type": "string",
|
|
8962
|
+
"format": "uuid"
|
|
8963
|
+
},
|
|
8964
|
+
"message_digest": {
|
|
8965
|
+
"type": "string"
|
|
8966
|
+
},
|
|
8967
|
+
"server_commitments": {
|
|
8968
|
+
"type": "string"
|
|
8969
|
+
},
|
|
8970
|
+
"expires_at": {
|
|
8971
|
+
"type": "string",
|
|
8972
|
+
"format": "date-time"
|
|
8973
|
+
}
|
|
8974
|
+
}
|
|
8975
|
+
}
|
|
8976
|
+
}
|
|
8977
|
+
}
|
|
8978
|
+
},
|
|
8979
|
+
"400": {
|
|
8980
|
+
"$ref": "#/components/responses/BadRequest"
|
|
8981
|
+
},
|
|
8982
|
+
"401": {
|
|
8983
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8984
|
+
},
|
|
8985
|
+
"403": {
|
|
8986
|
+
"$ref": "#/components/responses/Forbidden"
|
|
8987
|
+
},
|
|
8988
|
+
"404": {
|
|
8989
|
+
"$ref": "#/components/responses/NotFound"
|
|
8990
|
+
}
|
|
8991
|
+
}
|
|
8992
|
+
}
|
|
8993
|
+
},
|
|
8994
|
+
"/v1/keys/{key_id}/tss/sign/complete": {
|
|
8995
|
+
"parameters": [
|
|
8996
|
+
{
|
|
8997
|
+
"name": "key_id",
|
|
8998
|
+
"in": "path",
|
|
8999
|
+
"required": true,
|
|
9000
|
+
"schema": {
|
|
9001
|
+
"type": "string",
|
|
9002
|
+
"format": "uuid"
|
|
9003
|
+
}
|
|
9004
|
+
}
|
|
9005
|
+
],
|
|
9006
|
+
"post": {
|
|
9007
|
+
"tags": [
|
|
9008
|
+
"Key Custody"
|
|
9009
|
+
],
|
|
9010
|
+
"summary": "Threshold signing, round 2 — aggregate and return the signature",
|
|
9011
|
+
"description": "The vault produces its share, verifies the caller's, aggregates, and\nverifies the result under the group key before returning it. A bad\nshare is a `400`, never a published signature.\n",
|
|
9012
|
+
"operationId": "tssSignComplete",
|
|
9013
|
+
"security": [
|
|
9014
|
+
{
|
|
9015
|
+
"BearerAuth": []
|
|
9016
|
+
}
|
|
9017
|
+
],
|
|
9018
|
+
"requestBody": {
|
|
9019
|
+
"required": true,
|
|
9020
|
+
"content": {
|
|
9021
|
+
"application/json": {
|
|
9022
|
+
"schema": {
|
|
9023
|
+
"type": "object",
|
|
9024
|
+
"required": [
|
|
9025
|
+
"session_id",
|
|
9026
|
+
"client_commitments",
|
|
9027
|
+
"client_signature_share"
|
|
9028
|
+
],
|
|
9029
|
+
"properties": {
|
|
9030
|
+
"session_id": {
|
|
9031
|
+
"type": "string",
|
|
9032
|
+
"format": "uuid"
|
|
9033
|
+
},
|
|
9034
|
+
"client_commitments": {
|
|
9035
|
+
"type": "string"
|
|
9036
|
+
},
|
|
9037
|
+
"client_signature_share": {
|
|
9038
|
+
"type": "string"
|
|
9039
|
+
}
|
|
9040
|
+
}
|
|
9041
|
+
}
|
|
9042
|
+
}
|
|
9043
|
+
}
|
|
9044
|
+
},
|
|
9045
|
+
"responses": {
|
|
9046
|
+
"200": {
|
|
9047
|
+
"description": "Signature",
|
|
9048
|
+
"content": {
|
|
9049
|
+
"application/json": {
|
|
9050
|
+
"schema": {
|
|
9051
|
+
"type": "object",
|
|
9052
|
+
"properties": {
|
|
9053
|
+
"key_id": {
|
|
9054
|
+
"type": "string",
|
|
9055
|
+
"format": "uuid"
|
|
9056
|
+
},
|
|
9057
|
+
"message_digest": {
|
|
9058
|
+
"type": "string"
|
|
9059
|
+
},
|
|
9060
|
+
"signature": {
|
|
9061
|
+
"type": "string",
|
|
9062
|
+
"description": "Base64 64-byte Ed25519 signature."
|
|
9063
|
+
},
|
|
9064
|
+
"signature_hex": {
|
|
9065
|
+
"type": "string"
|
|
9066
|
+
}
|
|
9067
|
+
}
|
|
9068
|
+
}
|
|
9069
|
+
}
|
|
9070
|
+
}
|
|
9071
|
+
},
|
|
9072
|
+
"400": {
|
|
9073
|
+
"$ref": "#/components/responses/BadRequest"
|
|
9074
|
+
},
|
|
9075
|
+
"401": {
|
|
9076
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
9077
|
+
},
|
|
9078
|
+
"404": {
|
|
9079
|
+
"$ref": "#/components/responses/NotFound"
|
|
9080
|
+
},
|
|
9081
|
+
"409": {
|
|
9082
|
+
"$ref": "#/components/responses/Conflict"
|
|
9083
|
+
}
|
|
9084
|
+
}
|
|
9085
|
+
}
|
|
9086
|
+
},
|
|
9087
|
+
"/v1/treasury/wallets/{chain}/tss/prepare": {
|
|
9088
|
+
"parameters": [
|
|
9089
|
+
{
|
|
9090
|
+
"name": "chain",
|
|
9091
|
+
"in": "path",
|
|
9092
|
+
"required": true,
|
|
9093
|
+
"schema": {
|
|
9094
|
+
"type": "string"
|
|
9095
|
+
}
|
|
9096
|
+
}
|
|
9097
|
+
],
|
|
9098
|
+
"post": {
|
|
9099
|
+
"tags": [
|
|
9100
|
+
"Key Custody"
|
|
9101
|
+
],
|
|
9102
|
+
"summary": "Build the unsigned message for a send from a client_tss wallet",
|
|
9103
|
+
"description": "Runs wallet access, the sanctions screen and spend policies on the\ndeclared destination, fetches a recent blockhash and returns the\nunsigned transaction message. Sign it with `/v1/keys/{key_id}/tss/sign/*`\nand submit with `…/tss/broadcast`.\n",
|
|
9104
|
+
"operationId": "tssTreasuryPrepare",
|
|
9105
|
+
"security": [
|
|
9106
|
+
{
|
|
9107
|
+
"BearerAuth": []
|
|
9108
|
+
}
|
|
9109
|
+
],
|
|
9110
|
+
"requestBody": {
|
|
9111
|
+
"required": true,
|
|
9112
|
+
"content": {
|
|
9113
|
+
"application/json": {
|
|
9114
|
+
"schema": {
|
|
9115
|
+
"type": "object",
|
|
9116
|
+
"required": [
|
|
9117
|
+
"to",
|
|
9118
|
+
"value"
|
|
9119
|
+
],
|
|
9120
|
+
"properties": {
|
|
9121
|
+
"to": {
|
|
9122
|
+
"type": "string"
|
|
9123
|
+
},
|
|
9124
|
+
"value": {
|
|
9125
|
+
"type": "string",
|
|
9126
|
+
"description": "Major units",
|
|
9127
|
+
"e.g. \"0.5\".": null
|
|
9128
|
+
},
|
|
9129
|
+
"memo": {
|
|
9130
|
+
"type": "string"
|
|
9131
|
+
}
|
|
9132
|
+
}
|
|
9133
|
+
}
|
|
9134
|
+
}
|
|
9135
|
+
}
|
|
9136
|
+
},
|
|
9137
|
+
"responses": {
|
|
9138
|
+
"200": {
|
|
9139
|
+
"description": "Unsigned message",
|
|
9140
|
+
"content": {
|
|
9141
|
+
"application/json": {
|
|
9142
|
+
"schema": {
|
|
9143
|
+
"type": "object",
|
|
9144
|
+
"properties": {
|
|
9145
|
+
"key_id": {
|
|
9146
|
+
"type": "string",
|
|
9147
|
+
"format": "uuid"
|
|
9148
|
+
},
|
|
9149
|
+
"chain": {
|
|
9150
|
+
"type": "string"
|
|
9151
|
+
},
|
|
9152
|
+
"from": {
|
|
9153
|
+
"type": "string"
|
|
9154
|
+
},
|
|
9155
|
+
"to": {
|
|
9156
|
+
"type": "string"
|
|
9157
|
+
},
|
|
9158
|
+
"value_base_units": {
|
|
9159
|
+
"type": "string"
|
|
9160
|
+
},
|
|
9161
|
+
"recent_blockhash": {
|
|
9162
|
+
"type": "string"
|
|
9163
|
+
},
|
|
9164
|
+
"message": {
|
|
9165
|
+
"type": "string"
|
|
9166
|
+
},
|
|
9167
|
+
"message_digest": {
|
|
9168
|
+
"type": "string"
|
|
9169
|
+
}
|
|
9170
|
+
}
|
|
9171
|
+
}
|
|
9172
|
+
}
|
|
9173
|
+
}
|
|
9174
|
+
},
|
|
9175
|
+
"400": {
|
|
9176
|
+
"$ref": "#/components/responses/BadRequest"
|
|
9177
|
+
},
|
|
9178
|
+
"401": {
|
|
9179
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
9180
|
+
},
|
|
9181
|
+
"403": {
|
|
9182
|
+
"$ref": "#/components/responses/Forbidden"
|
|
9183
|
+
},
|
|
9184
|
+
"404": {
|
|
9185
|
+
"$ref": "#/components/responses/NotFound"
|
|
9186
|
+
}
|
|
9187
|
+
}
|
|
9188
|
+
}
|
|
9189
|
+
},
|
|
9190
|
+
"/v1/treasury/wallets/{chain}/tss/broadcast": {
|
|
9191
|
+
"parameters": [
|
|
9192
|
+
{
|
|
9193
|
+
"name": "chain",
|
|
9194
|
+
"in": "path",
|
|
9195
|
+
"required": true,
|
|
9196
|
+
"schema": {
|
|
9197
|
+
"type": "string"
|
|
9198
|
+
}
|
|
9199
|
+
}
|
|
9200
|
+
],
|
|
9201
|
+
"post": {
|
|
9202
|
+
"tags": [
|
|
9203
|
+
"Key Custody"
|
|
9204
|
+
],
|
|
9205
|
+
"summary": "Broadcast a threshold-signed send",
|
|
9206
|
+
"description": "Verifies the signature under the wallet's public key over exactly this\nmessage, checks `to` is a transfer destination inside it, assembles the\ntransaction and submits it. Audited as `treasury_wallet.send`.\n",
|
|
9207
|
+
"operationId": "tssTreasuryBroadcast",
|
|
9208
|
+
"security": [
|
|
9209
|
+
{
|
|
9210
|
+
"BearerAuth": []
|
|
9211
|
+
}
|
|
9212
|
+
],
|
|
9213
|
+
"requestBody": {
|
|
9214
|
+
"required": true,
|
|
9215
|
+
"content": {
|
|
9216
|
+
"application/json": {
|
|
9217
|
+
"schema": {
|
|
9218
|
+
"type": "object",
|
|
9219
|
+
"required": [
|
|
9220
|
+
"message",
|
|
9221
|
+
"signature",
|
|
9222
|
+
"to",
|
|
9223
|
+
"value_base_units"
|
|
9224
|
+
],
|
|
9225
|
+
"properties": {
|
|
9226
|
+
"message": {
|
|
9227
|
+
"type": "string"
|
|
9228
|
+
},
|
|
9229
|
+
"signature": {
|
|
9230
|
+
"type": "string"
|
|
9231
|
+
},
|
|
9232
|
+
"to": {
|
|
9233
|
+
"type": "string"
|
|
9234
|
+
},
|
|
9235
|
+
"value_base_units": {
|
|
9236
|
+
"type": "string"
|
|
9237
|
+
}
|
|
9238
|
+
}
|
|
9239
|
+
}
|
|
9240
|
+
}
|
|
9241
|
+
}
|
|
9242
|
+
},
|
|
9243
|
+
"responses": {
|
|
9244
|
+
"200": {
|
|
9245
|
+
"description": "Broadcast",
|
|
9246
|
+
"content": {
|
|
9247
|
+
"application/json": {
|
|
9248
|
+
"schema": {
|
|
9249
|
+
"$ref": "#/components/schemas/TreasuryWalletSendResponse"
|
|
9250
|
+
}
|
|
9251
|
+
}
|
|
9252
|
+
}
|
|
9253
|
+
},
|
|
9254
|
+
"400": {
|
|
9255
|
+
"$ref": "#/components/responses/BadRequest"
|
|
9256
|
+
},
|
|
9257
|
+
"401": {
|
|
9258
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
9259
|
+
},
|
|
9260
|
+
"404": {
|
|
9261
|
+
"$ref": "#/components/responses/NotFound"
|
|
9262
|
+
}
|
|
9263
|
+
}
|
|
9264
|
+
}
|
|
9265
|
+
},
|
|
9266
|
+
"/v1/treasury/passkey-safes": {
|
|
9267
|
+
"post": {
|
|
9268
|
+
"tags": [
|
|
9269
|
+
"Key Custody"
|
|
9270
|
+
],
|
|
9271
|
+
"summary": "Create a Safe owned by your passkey",
|
|
9272
|
+
"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",
|
|
9273
|
+
"operationId": "createPasskeySafe",
|
|
9274
|
+
"security": [
|
|
9275
|
+
{
|
|
9276
|
+
"BearerAuth": []
|
|
9277
|
+
}
|
|
9278
|
+
],
|
|
9279
|
+
"requestBody": {
|
|
9280
|
+
"required": true,
|
|
9281
|
+
"content": {
|
|
9282
|
+
"application/json": {
|
|
9283
|
+
"schema": {
|
|
9284
|
+
"type": "object",
|
|
9285
|
+
"required": [
|
|
9286
|
+
"chain",
|
|
9287
|
+
"passkey_id"
|
|
9288
|
+
],
|
|
9289
|
+
"properties": {
|
|
9290
|
+
"chain": {
|
|
9291
|
+
"type": "string"
|
|
9292
|
+
},
|
|
9293
|
+
"passkey_id": {
|
|
9294
|
+
"type": "string",
|
|
9295
|
+
"format": "uuid"
|
|
9296
|
+
}
|
|
9297
|
+
}
|
|
9298
|
+
}
|
|
9299
|
+
}
|
|
9300
|
+
}
|
|
9301
|
+
},
|
|
9302
|
+
"responses": {
|
|
9303
|
+
"201": {
|
|
9304
|
+
"description": "Safe registered (counterfactual)",
|
|
9305
|
+
"content": {
|
|
9306
|
+
"application/json": {
|
|
9307
|
+
"schema": {
|
|
9308
|
+
"$ref": "#/components/schemas/PasskeySafe"
|
|
9309
|
+
}
|
|
9310
|
+
}
|
|
9311
|
+
}
|
|
9312
|
+
},
|
|
9313
|
+
"400": {
|
|
9314
|
+
"$ref": "#/components/responses/BadRequest"
|
|
9315
|
+
},
|
|
9316
|
+
"401": {
|
|
9317
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
9318
|
+
},
|
|
9319
|
+
"404": {
|
|
9320
|
+
"$ref": "#/components/responses/NotFound"
|
|
9321
|
+
},
|
|
9322
|
+
"409": {
|
|
9323
|
+
"$ref": "#/components/responses/Conflict"
|
|
9324
|
+
}
|
|
9325
|
+
}
|
|
9326
|
+
},
|
|
9327
|
+
"get": {
|
|
9328
|
+
"tags": [
|
|
9329
|
+
"Key Custody"
|
|
9330
|
+
],
|
|
9331
|
+
"summary": "List your passkey-owned Safes",
|
|
9332
|
+
"operationId": "listPasskeySafes",
|
|
9333
|
+
"security": [
|
|
9334
|
+
{
|
|
9335
|
+
"BearerAuth": []
|
|
9336
|
+
}
|
|
9337
|
+
],
|
|
9338
|
+
"responses": {
|
|
9339
|
+
"200": {
|
|
9340
|
+
"description": "Safes",
|
|
9341
|
+
"content": {
|
|
9342
|
+
"application/json": {
|
|
9343
|
+
"schema": {
|
|
9344
|
+
"type": "object",
|
|
9345
|
+
"properties": {
|
|
9346
|
+
"safes": {
|
|
9347
|
+
"type": "array",
|
|
9348
|
+
"items": {
|
|
9349
|
+
"$ref": "#/components/schemas/PasskeySafe"
|
|
9350
|
+
}
|
|
9351
|
+
}
|
|
9352
|
+
}
|
|
9353
|
+
}
|
|
9354
|
+
}
|
|
9355
|
+
}
|
|
9356
|
+
},
|
|
9357
|
+
"401": {
|
|
9358
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
9359
|
+
}
|
|
9360
|
+
}
|
|
9361
|
+
}
|
|
9362
|
+
},
|
|
9363
|
+
"/v1/treasury/passkey-safes/{id}": {
|
|
9364
|
+
"parameters": [
|
|
9365
|
+
{
|
|
9366
|
+
"name": "id",
|
|
9367
|
+
"in": "path",
|
|
9368
|
+
"required": true,
|
|
9369
|
+
"schema": {
|
|
9370
|
+
"type": "string",
|
|
9371
|
+
"format": "uuid"
|
|
9372
|
+
}
|
|
9373
|
+
}
|
|
9374
|
+
],
|
|
9375
|
+
"delete": {
|
|
9376
|
+
"tags": [
|
|
9377
|
+
"Key Custody"
|
|
9378
|
+
],
|
|
9379
|
+
"summary": "Forget a passkey Safe",
|
|
9380
|
+
"description": "Deactivates the record only; the Safe and its funds stay on-chain under the passkey.",
|
|
9381
|
+
"operationId": "deactivatePasskeySafe",
|
|
9382
|
+
"security": [
|
|
9383
|
+
{
|
|
9384
|
+
"BearerAuth": []
|
|
9385
|
+
}
|
|
9386
|
+
],
|
|
9387
|
+
"responses": {
|
|
9388
|
+
"204": {
|
|
9389
|
+
"description": "Deactivated"
|
|
9390
|
+
},
|
|
9391
|
+
"401": {
|
|
9392
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
9393
|
+
},
|
|
9394
|
+
"404": {
|
|
9395
|
+
"$ref": "#/components/responses/NotFound"
|
|
9396
|
+
}
|
|
9397
|
+
}
|
|
9398
|
+
}
|
|
9399
|
+
},
|
|
9400
|
+
"/v1/treasury/passkey-safes/{id}/prepare": {
|
|
9401
|
+
"parameters": [
|
|
9402
|
+
{
|
|
9403
|
+
"name": "id",
|
|
9404
|
+
"in": "path",
|
|
9405
|
+
"required": true,
|
|
9406
|
+
"schema": {
|
|
9407
|
+
"type": "string",
|
|
9408
|
+
"format": "uuid"
|
|
9409
|
+
}
|
|
9410
|
+
}
|
|
9411
|
+
],
|
|
9412
|
+
"post": {
|
|
9413
|
+
"tags": [
|
|
9414
|
+
"Key Custody"
|
|
9415
|
+
],
|
|
9416
|
+
"summary": "Compute the SafeTx hash for a call from a passkey Safe",
|
|
9417
|
+
"description": "Runs the sanctions screen and spend policies on the call, reads the\nSafe's on-chain nonce (0 if not yet deployed), and returns the SafeTx\nhash — the raw 32 bytes are the WebAuthn challenge to sign with\n`userVerification: \"required\"`.\n",
|
|
9418
|
+
"operationId": "preparePasskeySafeTx",
|
|
9419
|
+
"security": [
|
|
9420
|
+
{
|
|
9421
|
+
"BearerAuth": []
|
|
9422
|
+
}
|
|
9423
|
+
],
|
|
9424
|
+
"requestBody": {
|
|
9425
|
+
"required": true,
|
|
9426
|
+
"content": {
|
|
9427
|
+
"application/json": {
|
|
9428
|
+
"schema": {
|
|
9429
|
+
"type": "object",
|
|
9430
|
+
"required": [
|
|
9431
|
+
"to",
|
|
9432
|
+
"value_wei"
|
|
9433
|
+
],
|
|
9434
|
+
"properties": {
|
|
9435
|
+
"to": {
|
|
9436
|
+
"type": "string"
|
|
9437
|
+
},
|
|
9438
|
+
"value_wei": {
|
|
9439
|
+
"type": "string"
|
|
9440
|
+
},
|
|
9441
|
+
"data": {
|
|
9442
|
+
"type": "string",
|
|
9443
|
+
"description": "Hex calldata",
|
|
9444
|
+
"optional.": null
|
|
9445
|
+
}
|
|
9446
|
+
}
|
|
9447
|
+
}
|
|
9448
|
+
}
|
|
9449
|
+
}
|
|
9450
|
+
},
|
|
9451
|
+
"responses": {
|
|
9452
|
+
"200": {
|
|
9453
|
+
"description": "What to sign",
|
|
9454
|
+
"content": {
|
|
9455
|
+
"application/json": {
|
|
9456
|
+
"schema": {
|
|
9457
|
+
"type": "object",
|
|
9458
|
+
"properties": {
|
|
9459
|
+
"safe_id": {
|
|
9460
|
+
"type": "string",
|
|
9461
|
+
"format": "uuid"
|
|
9462
|
+
},
|
|
9463
|
+
"safe_address": {
|
|
9464
|
+
"type": "string"
|
|
9465
|
+
},
|
|
9466
|
+
"chain": {
|
|
9467
|
+
"type": "string"
|
|
9468
|
+
},
|
|
9469
|
+
"chain_id": {
|
|
9470
|
+
"type": "integer"
|
|
9471
|
+
},
|
|
9472
|
+
"to": {
|
|
9473
|
+
"type": "string"
|
|
9474
|
+
},
|
|
9475
|
+
"value_wei": {
|
|
9476
|
+
"type": "string"
|
|
9477
|
+
},
|
|
9478
|
+
"data": {
|
|
9479
|
+
"type": "string"
|
|
9480
|
+
},
|
|
9481
|
+
"nonce": {
|
|
9482
|
+
"type": "integer"
|
|
9483
|
+
},
|
|
9484
|
+
"deploy_required": {
|
|
9485
|
+
"type": "boolean"
|
|
9486
|
+
},
|
|
9487
|
+
"safe_tx_hash": {
|
|
9488
|
+
"type": "string"
|
|
9489
|
+
},
|
|
9490
|
+
"credential_id": {
|
|
9491
|
+
"type": "string"
|
|
9492
|
+
},
|
|
9493
|
+
"rp_id": {
|
|
9494
|
+
"type": "string"
|
|
9495
|
+
}
|
|
9496
|
+
}
|
|
9497
|
+
}
|
|
9498
|
+
}
|
|
9499
|
+
}
|
|
9500
|
+
},
|
|
9501
|
+
"400": {
|
|
9502
|
+
"$ref": "#/components/responses/BadRequest"
|
|
9503
|
+
},
|
|
9504
|
+
"401": {
|
|
9505
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
9506
|
+
},
|
|
9507
|
+
"403": {
|
|
9508
|
+
"$ref": "#/components/responses/Forbidden"
|
|
9509
|
+
},
|
|
9510
|
+
"404": {
|
|
9511
|
+
"$ref": "#/components/responses/NotFound"
|
|
9512
|
+
}
|
|
9513
|
+
}
|
|
9514
|
+
}
|
|
9515
|
+
},
|
|
9516
|
+
"/v1/treasury/passkey-safes/{id}/execute": {
|
|
9517
|
+
"parameters": [
|
|
9518
|
+
{
|
|
9519
|
+
"name": "id",
|
|
9520
|
+
"in": "path",
|
|
9521
|
+
"required": true,
|
|
9522
|
+
"schema": {
|
|
9523
|
+
"type": "string",
|
|
9524
|
+
"format": "uuid"
|
|
9525
|
+
}
|
|
9526
|
+
}
|
|
9527
|
+
],
|
|
9528
|
+
"post": {
|
|
9529
|
+
"tags": [
|
|
9530
|
+
"Key Custody"
|
|
9531
|
+
],
|
|
9532
|
+
"summary": "Relay a passkey-signed Safe transaction",
|
|
9533
|
+
"description": "Recomputes the SafeTx hash, verifies the WebAuthn assertion locally\n(this passkey, this hash, a dashboard origin, UV flag set), wraps it in\nSafe's contract-signature format and relays `execTransaction` — deploying\nthe Safe first if needed — from your Ethereum treasury wallet, which pays\ngas and is not an owner. Audited as `passkey_safe.executed`.\n",
|
|
9534
|
+
"operationId": "executePasskeySafeTx",
|
|
9535
|
+
"security": [
|
|
9536
|
+
{
|
|
9537
|
+
"BearerAuth": []
|
|
9538
|
+
}
|
|
9539
|
+
],
|
|
9540
|
+
"requestBody": {
|
|
9541
|
+
"required": true,
|
|
9542
|
+
"content": {
|
|
9543
|
+
"application/json": {
|
|
9544
|
+
"schema": {
|
|
9545
|
+
"type": "object",
|
|
9546
|
+
"required": [
|
|
9547
|
+
"to",
|
|
9548
|
+
"value_wei",
|
|
9549
|
+
"nonce",
|
|
9550
|
+
"authenticator_data",
|
|
9551
|
+
"client_data_json",
|
|
9552
|
+
"signature"
|
|
9553
|
+
],
|
|
9554
|
+
"properties": {
|
|
9555
|
+
"to": {
|
|
9556
|
+
"type": "string"
|
|
9557
|
+
},
|
|
9558
|
+
"value_wei": {
|
|
9559
|
+
"type": "string"
|
|
9560
|
+
},
|
|
9561
|
+
"data": {
|
|
9562
|
+
"type": "string"
|
|
9563
|
+
},
|
|
9564
|
+
"nonce": {
|
|
9565
|
+
"type": "integer"
|
|
9566
|
+
},
|
|
9567
|
+
"authenticator_data": {
|
|
9568
|
+
"type": "string",
|
|
9569
|
+
"description": "Base64url."
|
|
9570
|
+
},
|
|
9571
|
+
"client_data_json": {
|
|
9572
|
+
"type": "string",
|
|
9573
|
+
"description": "Base64url."
|
|
9574
|
+
},
|
|
9575
|
+
"signature": {
|
|
9576
|
+
"type": "string",
|
|
9577
|
+
"description": "Base64url DER ECDSA signature."
|
|
9578
|
+
}
|
|
9579
|
+
}
|
|
9580
|
+
}
|
|
9581
|
+
}
|
|
9582
|
+
}
|
|
9583
|
+
},
|
|
9584
|
+
"responses": {
|
|
9585
|
+
"200": {
|
|
9586
|
+
"description": "Relayed",
|
|
9587
|
+
"content": {
|
|
9588
|
+
"application/json": {
|
|
9589
|
+
"schema": {
|
|
9590
|
+
"type": "object",
|
|
9591
|
+
"properties": {
|
|
9592
|
+
"safe_id": {
|
|
9593
|
+
"type": "string",
|
|
9594
|
+
"format": "uuid"
|
|
9595
|
+
},
|
|
9596
|
+
"safe_address": {
|
|
9597
|
+
"type": "string"
|
|
9598
|
+
},
|
|
9599
|
+
"chain": {
|
|
9600
|
+
"type": "string"
|
|
9601
|
+
},
|
|
9602
|
+
"safe_tx_hash": {
|
|
9603
|
+
"type": "string"
|
|
9604
|
+
},
|
|
9605
|
+
"deploy_tx_hash": {
|
|
9606
|
+
"type": "string",
|
|
9607
|
+
"nullable": true
|
|
9608
|
+
},
|
|
9609
|
+
"tx_hash": {
|
|
9610
|
+
"type": "string"
|
|
9611
|
+
},
|
|
9612
|
+
"status": {
|
|
9613
|
+
"type": "string"
|
|
9614
|
+
}
|
|
9615
|
+
}
|
|
9616
|
+
}
|
|
9617
|
+
}
|
|
9618
|
+
}
|
|
9619
|
+
},
|
|
9620
|
+
"400": {
|
|
9621
|
+
"$ref": "#/components/responses/BadRequest"
|
|
9622
|
+
},
|
|
9623
|
+
"401": {
|
|
9624
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
9625
|
+
},
|
|
9626
|
+
"403": {
|
|
9627
|
+
"$ref": "#/components/responses/Forbidden"
|
|
9628
|
+
},
|
|
9629
|
+
"404": {
|
|
9630
|
+
"$ref": "#/components/responses/NotFound"
|
|
9631
|
+
},
|
|
9632
|
+
"409": {
|
|
9633
|
+
"$ref": "#/components/responses/Conflict"
|
|
9634
|
+
}
|
|
9635
|
+
}
|
|
9636
|
+
}
|
|
9637
|
+
},
|
|
8632
9638
|
"/v1/treasury/wallets/generate": {
|
|
8633
9639
|
"post": {
|
|
8634
9640
|
"tags": [
|
|
@@ -38480,6 +39486,53 @@
|
|
|
38480
39486
|
}
|
|
38481
39487
|
}
|
|
38482
39488
|
},
|
|
39489
|
+
"PasskeySafe": {
|
|
39490
|
+
"type": "object",
|
|
39491
|
+
"properties": {
|
|
39492
|
+
"id": {
|
|
39493
|
+
"type": "string",
|
|
39494
|
+
"format": "uuid"
|
|
39495
|
+
},
|
|
39496
|
+
"chain": {
|
|
39497
|
+
"type": "string"
|
|
39498
|
+
},
|
|
39499
|
+
"chain_id": {
|
|
39500
|
+
"type": "integer"
|
|
39501
|
+
},
|
|
39502
|
+
"safe_address": {
|
|
39503
|
+
"type": "string"
|
|
39504
|
+
},
|
|
39505
|
+
"passkey_id": {
|
|
39506
|
+
"type": "string",
|
|
39507
|
+
"format": "uuid"
|
|
39508
|
+
},
|
|
39509
|
+
"custody": {
|
|
39510
|
+
"type": "string",
|
|
39511
|
+
"enum": [
|
|
39512
|
+
"passkey_owner"
|
|
39513
|
+
]
|
|
39514
|
+
},
|
|
39515
|
+
"deploy_status": {
|
|
39516
|
+
"type": "string",
|
|
39517
|
+
"enum": [
|
|
39518
|
+
"pending",
|
|
39519
|
+
"deployed"
|
|
39520
|
+
]
|
|
39521
|
+
},
|
|
39522
|
+
"deploy_tx_hash": {
|
|
39523
|
+
"type": "string",
|
|
39524
|
+
"nullable": true
|
|
39525
|
+
},
|
|
39526
|
+
"owner_signer": {
|
|
39527
|
+
"type": "string",
|
|
39528
|
+
"description": "The SafeWebAuthnSharedSigner address listed as the Safe's owner."
|
|
39529
|
+
},
|
|
39530
|
+
"created_at": {
|
|
39531
|
+
"type": "string",
|
|
39532
|
+
"format": "date-time"
|
|
39533
|
+
}
|
|
39534
|
+
}
|
|
39535
|
+
},
|
|
38483
39536
|
"ClientShareListResponse": {
|
|
38484
39537
|
"type": "object",
|
|
38485
39538
|
"properties": {
|