From 78b3f01f2692fed954c9436cc28eb45f542a7f04 Mon Sep 17 00:00:00 2001
From: "dfnsco-dfns-sdk-sync[bot]"
<275545256+dfnsco-dfns-sdk-sync[bot]@users.noreply.github.com>
Date: Tue, 21 Jul 2026 16:33:26 +0000
Subject: [PATCH] chore: sync generated SDK from monorepo v1.930.0
---
dfns_sdk/client.py | 6 +
dfns_sdk/delegated_client.py | 6 +
dfns_sdk/generated/__init__.py | 6 +
dfns_sdk/generated/allocations/client.py | 2 +
.../generated/allocations/delegated_client.py | 2 +
dfns_sdk/generated/auth/client.py | 20 +-
dfns_sdk/generated/auth/delegated_client.py | 18 +-
dfns_sdk/generated/auth/types.py | 3 +-
dfns_sdk/generated/exchanges/client.py | 2 +
.../generated/exchanges/delegated_client.py | 2 +
dfns_sdk/generated/keys/client.py | 4 +-
dfns_sdk/generated/keys/types.py | 4 +
dfns_sdk/generated/networks/client.py | 4 +-
dfns_sdk/generated/networks/types.py | 4 +
dfns_sdk/generated/payins/__init__.py | 7 +
dfns_sdk/generated/payins/client.py | 148 ++++++
dfns_sdk/generated/payins/delegated_client.py | 209 ++++++++
dfns_sdk/generated/payins/types.py | 62 +++
dfns_sdk/generated/payouts/types.py | 3 +-
dfns_sdk/generated/permissions/types.py | 10 +
dfns_sdk/generated/signers/client.py | 66 +++
.../generated/signers/delegated_client.py | 90 ++++
dfns_sdk/generated/signers/types.py | 25 +
dfns_sdk/generated/swaps/types.py | 2 +
dfns_sdk/generated/vaults/__init__.py | 7 +
dfns_sdk/generated/vaults/client.py | 268 ++++++++++
dfns_sdk/generated/vaults/delegated_client.py | 495 ++++++++++++++++++
dfns_sdk/generated/vaults/types.py | 298 +++++++++++
dfns_sdk/generated/wallets/client.py | 2 +-
dfns_sdk/generated/wallets/types.py | 41 ++
dfns_sdk/generated/webhooks/types.py | 28 +
31 files changed, 1818 insertions(+), 26 deletions(-)
create mode 100644 dfns_sdk/generated/payins/__init__.py
create mode 100644 dfns_sdk/generated/payins/client.py
create mode 100644 dfns_sdk/generated/payins/delegated_client.py
create mode 100644 dfns_sdk/generated/payins/types.py
create mode 100644 dfns_sdk/generated/vaults/__init__.py
create mode 100644 dfns_sdk/generated/vaults/client.py
create mode 100644 dfns_sdk/generated/vaults/delegated_client.py
create mode 100644 dfns_sdk/generated/vaults/types.py
diff --git a/dfns_sdk/client.py b/dfns_sdk/client.py
index 3fbb3ff..0241b2e 100644
--- a/dfns_sdk/client.py
+++ b/dfns_sdk/client.py
@@ -10,12 +10,14 @@
from .generated.fee_sponsors import FeeSponsorsClient
from .generated.keys import KeysClient
from .generated.networks import NetworksClient
+from .generated.payins import PayinsClient
from .generated.payouts import PayoutsClient
from .generated.permissions import PermissionsClient
from .generated.policies import PoliciesClient
from .generated.signers import SignersClient
from .generated.staking import StakingClient
from .generated.swaps import SwapsClient
+from .generated.vaults import VaultsClient
from .generated.wallets import WalletsClient
from .generated.webhooks import WebhooksClient
from .types import DfnsClientConfig
@@ -41,12 +43,14 @@ class DfnsClient:
fee_sponsors: FeeSponsorsClient
keys: KeysClient
networks: NetworksClient
+ payins: PayinsClient
payouts: PayoutsClient
permissions: PermissionsClient
policies: PoliciesClient
signers: SignersClient
staking: StakingClient
swaps: SwapsClient
+ vaults: VaultsClient
wallets: WalletsClient
webhooks: WebhooksClient
@@ -66,12 +70,14 @@ def __init__(self, config: DfnsClientConfig):
self.fee_sponsors = FeeSponsorsClient(self._http)
self.keys = KeysClient(self._http)
self.networks = NetworksClient(self._http)
+ self.payins = PayinsClient(self._http)
self.payouts = PayoutsClient(self._http)
self.permissions = PermissionsClient(self._http)
self.policies = PoliciesClient(self._http)
self.signers = SignersClient(self._http)
self.staking = StakingClient(self._http)
self.swaps = SwapsClient(self._http)
+ self.vaults = VaultsClient(self._http)
self.wallets = WalletsClient(self._http)
self.webhooks = WebhooksClient(self._http)
diff --git a/dfns_sdk/delegated_client.py b/dfns_sdk/delegated_client.py
index 8ef51c5..b1bcc65 100644
--- a/dfns_sdk/delegated_client.py
+++ b/dfns_sdk/delegated_client.py
@@ -10,12 +10,14 @@
from .generated.fee_sponsors import DelegatedFeeSponsorsClient
from .generated.keys import DelegatedKeysClient
from .generated.networks import DelegatedNetworksClient
+from .generated.payins import DelegatedPayinsClient
from .generated.payouts import DelegatedPayoutsClient
from .generated.permissions import DelegatedPermissionsClient
from .generated.policies import DelegatedPoliciesClient
from .generated.signers import DelegatedSignersClient
from .generated.staking import DelegatedStakingClient
from .generated.swaps import DelegatedSwapsClient
+from .generated.vaults import DelegatedVaultsClient
from .generated.wallets import DelegatedWalletsClient
from .generated.webhooks import DelegatedWebhooksClient
from .types import DfnsDelegatedClientConfig
@@ -57,12 +59,14 @@ class DfnsDelegatedClient:
fee_sponsors: DelegatedFeeSponsorsClient
keys: DelegatedKeysClient
networks: DelegatedNetworksClient
+ payins: DelegatedPayinsClient
payouts: DelegatedPayoutsClient
permissions: DelegatedPermissionsClient
policies: DelegatedPoliciesClient
signers: DelegatedSignersClient
staking: DelegatedStakingClient
swaps: DelegatedSwapsClient
+ vaults: DelegatedVaultsClient
wallets: DelegatedWalletsClient
webhooks: DelegatedWebhooksClient
@@ -82,12 +86,14 @@ def __init__(self, config: DfnsDelegatedClientConfig):
self.fee_sponsors = DelegatedFeeSponsorsClient(self._http)
self.keys = DelegatedKeysClient(self._http)
self.networks = DelegatedNetworksClient(self._http)
+ self.payins = DelegatedPayinsClient(self._http)
self.payouts = DelegatedPayoutsClient(self._http)
self.permissions = DelegatedPermissionsClient(self._http)
self.policies = DelegatedPoliciesClient(self._http)
self.signers = DelegatedSignersClient(self._http)
self.staking = DelegatedStakingClient(self._http)
self.swaps = DelegatedSwapsClient(self._http)
+ self.vaults = DelegatedVaultsClient(self._http)
self.wallets = DelegatedWalletsClient(self._http)
self.webhooks = DelegatedWebhooksClient(self._http)
diff --git a/dfns_sdk/generated/__init__.py b/dfns_sdk/generated/__init__.py
index 48db9a5..692aa42 100644
--- a/dfns_sdk/generated/__init__.py
+++ b/dfns_sdk/generated/__init__.py
@@ -7,12 +7,14 @@
from .fee_sponsors import DelegatedFeeSponsorsClient, FeeSponsorsClient
from .keys import DelegatedKeysClient, KeysClient
from .networks import DelegatedNetworksClient, NetworksClient
+from .payins import DelegatedPayinsClient, PayinsClient
from .payouts import DelegatedPayoutsClient, PayoutsClient
from .permissions import DelegatedPermissionsClient, PermissionsClient
from .policies import DelegatedPoliciesClient, PoliciesClient
from .signers import DelegatedSignersClient, SignersClient
from .staking import DelegatedStakingClient, StakingClient
from .swaps import DelegatedSwapsClient, SwapsClient
+from .vaults import DelegatedVaultsClient, VaultsClient
from .wallets import DelegatedWalletsClient, WalletsClient
from .webhooks import DelegatedWebhooksClient, WebhooksClient
@@ -31,6 +33,8 @@
"DelegatedKeysClient",
"NetworksClient",
"DelegatedNetworksClient",
+ "PayinsClient",
+ "DelegatedPayinsClient",
"PayoutsClient",
"DelegatedPayoutsClient",
"PermissionsClient",
@@ -43,6 +47,8 @@
"DelegatedStakingClient",
"SwapsClient",
"DelegatedSwapsClient",
+ "VaultsClient",
+ "DelegatedVaultsClient",
"WalletsClient",
"DelegatedWalletsClient",
"WebhooksClient",
diff --git a/dfns_sdk/generated/allocations/client.py b/dfns_sdk/generated/allocations/client.py
index 5205a6e..3495184 100644
--- a/dfns_sdk/generated/allocations/client.py
+++ b/dfns_sdk/generated/allocations/client.py
@@ -16,6 +16,8 @@ def list_allocations(self, query: T.ListAllocationsQuery | None = None) -> T.Lis
"""
List Allocations.
+ Lists the allocations of your organization.
+
Args:
query: Query parameters.
diff --git a/dfns_sdk/generated/allocations/delegated_client.py b/dfns_sdk/generated/allocations/delegated_client.py
index 2495216..ccd0539 100644
--- a/dfns_sdk/generated/allocations/delegated_client.py
+++ b/dfns_sdk/generated/allocations/delegated_client.py
@@ -23,6 +23,8 @@ def list_allocations(self, query: T.ListAllocationsQuery | None = None) -> T.Lis
"""
List Allocations.
+ Lists the allocations of your organization.
+
Args:
query: Query parameters.
diff --git a/dfns_sdk/generated/auth/client.py b/dfns_sdk/generated/auth/client.py
index 214930b..44adc75 100644
--- a/dfns_sdk/generated/auth/client.py
+++ b/dfns_sdk/generated/auth/client.py
@@ -22,7 +22,7 @@ def create_user_action_signature(
Completes the user action signing process and provides a signing token that can be used to verify the user intended to perform the action.
- This is the first step of the [User Action Signing flow](http://docs.dfns.co/api-reference/auth/signing-flows).
+ This is the first step of the [User Action Signing flow](https://docs.dfns.co/api-reference/auth/signing-flows).
The type of credentials used to sign the action is determined by the `kind` field in the nested objects (`firstFactor` and `secondFactor`). Supported credential kinds are:
* `Fido2`: User action is signed by a user's signing device using `WebAuthn`.
@@ -53,7 +53,7 @@ def create_user_action_challenge(
Starts a user action signing session, returning a challenge that will be used to verify the user's intent to perform an action.
- This is the first step of the [User Action Signing flow](http://docs.dfns.co/api-reference/auth/signing-flows).
+ This is the first step of the [User Action Signing flow](https://docs.dfns.co/api-reference/auth/signing-flows).
Args:
body: Request body.
@@ -128,7 +128,7 @@ def list_applications(self) -> T.ListApplicationsResponse:
List Applications.
- Applications are deprecated and will be removed in a future release. See details [here](https://docs.dfns.co/developers/guides/applications-deprecation).
+ Applications are deprecated and will be removed in a future release. See details [here](https://docs.dfns.co/deprecation/applications-deprecation).
Returns:
@@ -150,7 +150,7 @@ def get_application(self, app_id: str) -> T.GetApplicationResponse:
Get Application.
- Applications are deprecated and will be removed in a future release. See details [here](https://docs.dfns.co/developers/guides/applications-deprecation).
+ Applications are deprecated and will be removed in a future release. See details [here](https://docs.dfns.co/deprecation/applications-deprecation).
Args:
@@ -442,7 +442,7 @@ def complete_user_login(self, body: T.CompleteUserLoginRequest) -> dict[str, Any
The type of credentials used to login is determined by the `kind` field in the nested objects (`firstFactor` and `secondFactor`). Supported credential kinds are:
* `Fido2`: Login challenge is signed by a user's signing device using `WebAuthn`.
* `Key`: Login challenge is signed by a user's private key.
- * `PasswordProtectedKey`: Login challenge is signed by the decrypted user's private key that was sent during [Create User Login Challenge](../registration/inituserregistration) step.
+ * `PasswordProtectedKey`: Login challenge is signed by the decrypted user's private key that was sent during the [Create Login Challenge](https://docs.dfns.co/api-reference/auth/create-login-challenge) step.
Args:
body: Request body.
@@ -510,7 +510,7 @@ def social_login(self, body: T.SocialLoginRequest) -> T.SocialLoginResponse:
"""
Social Login.
- Completes the login process and provides the authenticated user with their authentication token.
+ Logs a user in with a JWT id token issued by a social login provider and provides the authenticated user with their authentication token.
Args:
body: Request body.
@@ -532,7 +532,7 @@ def complete_sso_login(self, body: T.CompleteSsoLoginRequest) -> T.CompleteSsoLo
"""
Complete SSO Login.
- Completes the login process and provides the authenticated user with their authentication token.
+ Completes the SSO login process by exchanging the authorization code obtained from the identity provider for the user's authentication token.
Args:
body: Request body.
@@ -732,7 +732,7 @@ def deactivate_personal_access_token(self, token_id: str) -> T.DeactivatePersona
"""
Deactivate Personal Access Token.
- Deactivates a credential that was previously active. If the credential is already deactivated no action is taken.
+ Deactivates a personal access token that was previously active. If the token is already deactivated no action is taken.
Args:
token_id: Token id.
@@ -896,7 +896,7 @@ def create_registration_challenge(
"""
Create Registration Challenge.
- Starts a user registration session. It returns a challenge that will need to be signed by a passkey and used to perform the step [Complete User Registration](/api-reference/auth/register)
+ Starts a user registration session. It returns a challenge that will need to be signed by a passkey and used to perform the step [Complete User Registration](/api-reference/auth/complete-user-registration)
Args:
body: Request body.
@@ -920,7 +920,7 @@ def create_social_registration_challenge(
"""
Create Social Registration Challenge.
- Starts an end-user registration session by passing a JWT obtained by an IdP. It returns a challenge that will need to be signed by a passkey and used to perform [Complete End User Registration with Wallets](/api-reference/auth/register-end-user).
+ Starts an end-user registration session by passing a JWT obtained by an IdP. It returns a challenge that will need to be signed by a passkey and used to perform [Complete End User Registration with Wallets](/api-reference/auth/complete-end-user-registration-with-wallets).
Args:
body: Request body.
diff --git a/dfns_sdk/generated/auth/delegated_client.py b/dfns_sdk/generated/auth/delegated_client.py
index e9767f5..3fcb50d 100644
--- a/dfns_sdk/generated/auth/delegated_client.py
+++ b/dfns_sdk/generated/auth/delegated_client.py
@@ -29,7 +29,7 @@ def create_user_action_signature(
Completes the user action signing process and provides a signing token that can be used to verify the user intended to perform the action.
- This is the first step of the [User Action Signing flow](http://docs.dfns.co/api-reference/auth/signing-flows).
+ This is the first step of the [User Action Signing flow](https://docs.dfns.co/api-reference/auth/signing-flows).
The type of credentials used to sign the action is determined by the `kind` field in the nested objects (`firstFactor` and `secondFactor`). Supported credential kinds are:
* `Fido2`: User action is signed by a user's signing device using `WebAuthn`.
@@ -60,7 +60,7 @@ def create_user_action_challenge(
Starts a user action signing session, returning a challenge that will be used to verify the user's intent to perform an action.
- This is the first step of the [User Action Signing flow](http://docs.dfns.co/api-reference/auth/signing-flows).
+ This is the first step of the [User Action Signing flow](https://docs.dfns.co/api-reference/auth/signing-flows).
Args:
body: Request body.
@@ -135,7 +135,7 @@ def list_applications(self) -> T.ListApplicationsResponse:
List Applications.
- Applications are deprecated and will be removed in a future release. See details [here](https://docs.dfns.co/developers/guides/applications-deprecation).
+ Applications are deprecated and will be removed in a future release. See details [here](https://docs.dfns.co/deprecation/applications-deprecation).
Returns:
@@ -157,7 +157,7 @@ def get_application(self, app_id: str) -> T.GetApplicationResponse:
Get Application.
- Applications are deprecated and will be removed in a future release. See details [here](https://docs.dfns.co/developers/guides/applications-deprecation).
+ Applications are deprecated and will be removed in a future release. See details [here](https://docs.dfns.co/deprecation/applications-deprecation).
Args:
@@ -606,7 +606,7 @@ def complete_user_login(self, body: T.CompleteUserLoginRequest) -> dict[str, Any
The type of credentials used to login is determined by the `kind` field in the nested objects (`firstFactor` and `secondFactor`). Supported credential kinds are:
* `Fido2`: Login challenge is signed by a user's signing device using `WebAuthn`.
* `Key`: Login challenge is signed by a user's private key.
- * `PasswordProtectedKey`: Login challenge is signed by the decrypted user's private key that was sent during [Create User Login Challenge](../registration/inituserregistration) step.
+ * `PasswordProtectedKey`: Login challenge is signed by the decrypted user's private key that was sent during the [Create Login Challenge](https://docs.dfns.co/api-reference/auth/create-login-challenge) step.
Args:
body: Request body.
@@ -674,7 +674,7 @@ def social_login(self, body: T.SocialLoginRequest) -> T.SocialLoginResponse:
"""
Social Login.
- Completes the login process and provides the authenticated user with their authentication token.
+ Logs a user in with a JWT id token issued by a social login provider and provides the authenticated user with their authentication token.
Args:
body: Request body.
@@ -696,7 +696,7 @@ def complete_sso_login(self, body: T.CompleteSsoLoginRequest) -> T.CompleteSsoLo
"""
Complete SSO Login.
- Completes the login process and provides the authenticated user with their authentication token.
+ Completes the SSO login process by exchanging the authorization code obtained from the identity provider for the user's authentication token.
Args:
body: Request body.
@@ -1243,7 +1243,7 @@ def create_registration_challenge(
"""
Create Registration Challenge.
- Starts a user registration session. It returns a challenge that will need to be signed by a passkey and used to perform the step [Complete User Registration](/api-reference/auth/register)
+ Starts a user registration session. It returns a challenge that will need to be signed by a passkey and used to perform the step [Complete User Registration](/api-reference/auth/complete-user-registration)
Args:
body: Request body.
@@ -1267,7 +1267,7 @@ def create_social_registration_challenge(
"""
Create Social Registration Challenge.
- Starts an end-user registration session by passing a JWT obtained by an IdP. It returns a challenge that will need to be signed by a passkey and used to perform [Complete End User Registration with Wallets](/api-reference/auth/register-end-user).
+ Starts an end-user registration session by passing a JWT obtained by an IdP. It returns a challenge that will need to be signed by a passkey and used to perform [Complete End User Registration with Wallets](/api-reference/auth/complete-end-user-registration-with-wallets).
Args:
body: Request body.
diff --git a/dfns_sdk/generated/auth/types.py b/dfns_sdk/generated/auth/types.py
index c6113f0..8f51e3e 100644
--- a/dfns_sdk/generated/auth/types.py
+++ b/dfns_sdk/generated/auth/types.py
@@ -269,7 +269,8 @@ class CompleteSsoLoginResponse(TypedDict, total=False):
class InitiateSsoLoginRequest(TypedDict, total=False):
"""initiateSsoLogin request body."""
- org_id: str
+ org_id: NotRequired[str]
+ tenant_id: NotRequired[str]
client_id: str
redirect_uri: str
diff --git a/dfns_sdk/generated/exchanges/client.py b/dfns_sdk/generated/exchanges/client.py
index 39d18d0..29eb309 100644
--- a/dfns_sdk/generated/exchanges/client.py
+++ b/dfns_sdk/generated/exchanges/client.py
@@ -153,6 +153,8 @@ def list_asset_withdrawal_networks(self, exchange_id: str, account_id: str, asse
"""
List Asset Withdrawal Networks.
+ Lists the networks to which the given asset can be withdrawn from an exchange account.
+
Args:
exchange_id: Path parameter.
account_id: Path parameter.
diff --git a/dfns_sdk/generated/exchanges/delegated_client.py b/dfns_sdk/generated/exchanges/delegated_client.py
index ca1a18c..ec0c2d1 100644
--- a/dfns_sdk/generated/exchanges/delegated_client.py
+++ b/dfns_sdk/generated/exchanges/delegated_client.py
@@ -217,6 +217,8 @@ def list_asset_withdrawal_networks(self, exchange_id: str, account_id: str, asse
"""
List Asset Withdrawal Networks.
+ Lists the networks to which the given asset can be withdrawn from an exchange account.
+
Args:
exchange_id: Path parameter.
account_id: Path parameter.
diff --git a/dfns_sdk/generated/keys/client.py b/dfns_sdk/generated/keys/client.py
index a9977ae..571deef 100644
--- a/dfns_sdk/generated/keys/client.py
+++ b/dfns_sdk/generated/keys/client.py
@@ -72,7 +72,7 @@ def delegate_key(self, key_id: str, body: T.DelegateKeyRequest) -> T.DelegateKey
This operation is irreversible. The key ownership will be transferred to the end-user
- In most cases, when you want to implement [Wallet Delegation](https://docs.dfns.co/developers/guides/wallet-delegation), simply create the wallet by directly delegating it to an end user, in which case it will the non-custodial from the start. There are some rare cases, however, where the key or wallet must be created before the user has accessed to the system. To accommodate this, we've added the ability to create a key or wallet in delay delegation mode, and then later delegate it (i.e.: transfer ownership of it) to an end user via this endpoint.
+ In most cases, when you want to implement [Wallet Delegation](https://docs.dfns.co/guides/developers/delegated-wallets), simply create the wallet by directly delegating it to an end user, in which case it will the non-custodial from the start. There are some rare cases, however, where the key or wallet must be created before the user has accessed to the system. To accommodate this, we've added the ability to create a key or wallet in delay delegation mode, and then later delegate it (i.e.: transfer ownership of it) to an end user via this endpoint.
Args:
key_id: Path parameter.
@@ -248,7 +248,7 @@ def generate_signature(self, key_id: str, body: dict[str, Any]) -> T.GenerateSig
Dfns is compatible with any blockchain that uses a supported [key format](https://docs.dfns.co/networks/supported-key-formats). If Dfns doesn't officially integrate with a blockchain, you can use hash signing to generate the signatures to interact with the chain.
- If you were using the deprecated `POST /wallets/{walletId}/signatures` endpoint, then you should now use this one. See the [deprecation notice](https://docs.dfns.co/developers/guides/keys-and-multichain-migration-guide) to get more information about how to change your code. TL,DR: from a wallet you can obtain the key as `wallet.signingKey.id`.
+ If you were using the deprecated `POST /wallets/{walletId}/signatures` endpoint, then you should now use this one. See the [deprecation notice](https://docs.dfns.co/deprecation/keys-and-multichain-migration-guide) to get more information about how to change your code. TL,DR: from a wallet you can obtain the key as `wallet.signingKey.id`.
Args:
diff --git a/dfns_sdk/generated/keys/types.py b/dfns_sdk/generated/keys/types.py
index e6b5e1d..a4fab85 100644
--- a/dfns_sdk/generated/keys/types.py
+++ b/dfns_sdk/generated/keys/types.py
@@ -269,6 +269,8 @@ class GenerateSignatureResponse(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
@@ -409,6 +411,8 @@ class GetSignatureResponse(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
diff --git a/dfns_sdk/generated/networks/client.py b/dfns_sdk/generated/networks/client.py
index 760e1f2..6439dac 100644
--- a/dfns_sdk/generated/networks/client.py
+++ b/dfns_sdk/generated/networks/client.py
@@ -97,7 +97,7 @@ def update_canton_validator(
Update an existing Canton Validator configuration.
- Read details about the process [here](https://docs.dfns.co/networks/canton-validators).
+ Read details about the process [here](https://docs.dfns.co/networks/canton).
Args:
network: Path parameter.
@@ -179,7 +179,7 @@ def create_canton_validator(
The `Shared` option allows you to use a shared validator hosted by Dfns and get started in seconds, while the `Custom` option allows you to connect your own validator and ledger nodes using OAuth2 authentication.
- Read details about the process [here](https://docs.dfns.co/networks/canton-validators).
+ Read details about the process [here](https://docs.dfns.co/networks/canton).
Args:
network: Path parameter.
diff --git a/dfns_sdk/generated/networks/types.py b/dfns_sdk/generated/networks/types.py
index a3530db..5aee223 100644
--- a/dfns_sdk/generated/networks/types.py
+++ b/dfns_sdk/generated/networks/types.py
@@ -54,8 +54,12 @@ class EstimateFeesQuery(TypedDict, total=False):
"PolygonAmoy",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
+ "SeiPacific1",
+ "SeiAtlantic2",
"Sonic",
"SonicTestnet",
"Tempo",
diff --git a/dfns_sdk/generated/payins/__init__.py b/dfns_sdk/generated/payins/__init__.py
new file mode 100644
index 0000000..cd7b7ed
--- /dev/null
+++ b/dfns_sdk/generated/payins/__init__.py
@@ -0,0 +1,7 @@
+"""Payins domain module."""
+
+from . import types
+from .client import PayinsClient
+from .delegated_client import DelegatedPayinsClient
+
+__all__ = ["PayinsClient", "DelegatedPayinsClient", "types"]
diff --git a/dfns_sdk/generated/payins/client.py b/dfns_sdk/generated/payins/client.py
new file mode 100644
index 0000000..1b33712
--- /dev/null
+++ b/dfns_sdk/generated/payins/client.py
@@ -0,0 +1,148 @@
+"""Client for the payins domain."""
+
+from typing import Any, cast
+
+from ..._internal import HttpClient
+from . import types as T
+
+
+class PayinsClient:
+ """Client for payins operations."""
+
+ def __init__(self, http_client: HttpClient):
+ self._http = http_client
+
+ def list_payins(self, query: T.ListPayinsQuery | None = None) -> T.ListPayinsResponse:
+ """
+ List Payins.
+
+ List payins with optional filtering and pagination.
+
+ Args:
+ query: Query parameters.
+
+ Returns:
+ T.ListPayinsResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="GET",
+ path="/payins",
+ path_params={},
+ query_params=query,
+ body=None,
+ requires_signature=False,
+ )
+ return cast(T.ListPayinsResponse, response)
+
+ def create_payin(self, body: dict[str, Any]) -> dict[str, Any]:
+ """
+ Create Payin.
+
+ Deliver stablecoin from the organisation's provider balance to a wallet on-chain.
+
+ Args:
+ body: Request body.
+
+ Returns:
+ dict[str, Any]: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="POST",
+ path="/payins",
+ path_params={},
+ query_params=None,
+ body=body,
+ requires_signature=True,
+ )
+ return cast(dict[str, Any], response)
+
+ def get_payin_recipient(self, query: T.GetPayinRecipientQuery) -> T.GetPayinRecipientResponse:
+ """
+ Get Payin Recipient.
+
+ Check whether a wallet's address is registered (and approved) as an payin recipient with the provider.
+
+ Args:
+ query: Query parameters.
+
+ Returns:
+ T.GetPayinRecipientResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="GET",
+ path="/payins/recipients",
+ path_params={},
+ query_params=query,
+ body=None,
+ requires_signature=False,
+ )
+ return cast(T.GetPayinRecipientResponse, response)
+
+ def register_payin_recipient(self, body: dict[str, Any]) -> T.RegisterPayinRecipientResponse:
+ """
+ Register Payin Recipient.
+
+ Register a wallet's address as an payin recipient with the provider. The registration then needs
+ to be approved on the provider's side (for Circle Mint: by an administrator in the Mint Console)
+ before payins to that wallet can be created.
+
+ Args:
+ body: Request body.
+
+ Returns:
+ T.RegisterPayinRecipientResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="POST",
+ path="/payins/recipients",
+ path_params={},
+ query_params=None,
+ body=body,
+ requires_signature=True,
+ )
+ return cast(T.RegisterPayinRecipientResponse, response)
+
+ def get_payin_status(self, payin_id: str) -> dict[str, Any]:
+ """
+ Get Payin Status.
+
+ Retrieve the current status of an payin by its ID.
+
+ Args:
+ payin_id: Payin id.
+
+ Returns:
+ dict[str, Any]: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="GET",
+ path="/payins/{payinId}",
+ path_params={"payinId": payin_id},
+ query_params=None,
+ body=None,
+ requires_signature=False,
+ )
+ return cast(dict[str, Any], response)
+
+ def list_payin_balances(self, query: T.ListPayinBalancesQuery) -> T.ListPayinBalancesResponse:
+ """
+ List Payin Balances.
+
+ The organisation's available balance at the payin provider, one entry per currency —
+ the funds payins can deliver on-chain.
+
+ Args:
+ query: Query parameters.
+
+ Returns:
+ T.ListPayinBalancesResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="GET",
+ path="/payins/balances",
+ path_params={},
+ query_params=query,
+ body=None,
+ requires_signature=False,
+ )
+ return cast(T.ListPayinBalancesResponse, response)
diff --git a/dfns_sdk/generated/payins/delegated_client.py b/dfns_sdk/generated/payins/delegated_client.py
new file mode 100644
index 0000000..413a3b2
--- /dev/null
+++ b/dfns_sdk/generated/payins/delegated_client.py
@@ -0,0 +1,209 @@
+"""Delegated client for the payins domain."""
+
+import json
+from typing import Any, cast
+
+from ..._internal import HttpClient
+from ...base_auth_api import BaseAuthApi, SignUserActionChallengeRequest, UserActionChallengeResponse
+from . import types as T
+
+
+class DelegatedPayinsClient:
+ """
+ Delegated client for payins operations.
+
+ This client separates user action signing into _init() and _complete() method pairs,
+ allowing external systems to handle the signing process.
+ """
+
+ def __init__(self, http_client: HttpClient):
+ self._http = http_client
+
+ def list_payins(self, query: T.ListPayinsQuery | None = None) -> T.ListPayinsResponse:
+ """
+ List Payins.
+
+ List payins with optional filtering and pagination.
+
+ Args:
+ query: Query parameters.
+
+ Returns:
+ T.ListPayinsResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="GET",
+ path="/payins",
+ path_params={},
+ query_params=query,
+ body=None,
+ requires_signature=False,
+ )
+ return cast(T.ListPayinsResponse, response)
+
+ def create_payin_init(self, body: dict[str, Any]) -> UserActionChallengeResponse:
+ """
+ Initialize Create Payin.
+
+ Creates a user action challenge for external signing.
+
+ Args:
+ body: Request body.
+
+ Returns:
+ UserActionChallengeResponse: The challenge to sign externally.
+ """ # noqa: E501
+ path = "/payins"
+ payload = json.dumps(body, separators=(",", ":")) if body else ""
+
+ return BaseAuthApi.create_user_action_challenge(
+ self._http,
+ user_action_http_method="POST",
+ user_action_http_path=path,
+ user_action_payload=payload,
+ )
+
+ def create_payin_complete(
+ self, body: dict[str, Any], signed_challenge: SignUserActionChallengeRequest
+ ) -> dict[str, Any]:
+ """
+ Complete Create Payin.
+
+ Submits the signed challenge and makes the API request.
+
+ Args:
+ body: Request body.
+ signed_challenge: The signed challenge from external signing.
+
+ Returns:
+ dict[str, Any]: The API response.
+ """ # noqa: E501
+ user_action_result = BaseAuthApi.sign_user_action_challenge(self._http, signed_challenge)
+ user_action_token = user_action_result["userAction"]
+
+ response = self._http.request_with_user_action(
+ method="POST",
+ path="/payins",
+ path_params={},
+ query_params=None,
+ body=body,
+ user_action=user_action_token,
+ )
+ return cast(dict[str, Any], response)
+
+ def get_payin_recipient(self, query: T.GetPayinRecipientQuery) -> T.GetPayinRecipientResponse:
+ """
+ Get Payin Recipient.
+
+ Check whether a wallet's address is registered (and approved) as an payin recipient with the provider.
+
+ Args:
+ query: Query parameters.
+
+ Returns:
+ T.GetPayinRecipientResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="GET",
+ path="/payins/recipients",
+ path_params={},
+ query_params=query,
+ body=None,
+ requires_signature=False,
+ )
+ return cast(T.GetPayinRecipientResponse, response)
+
+ def register_payin_recipient_init(self, body: dict[str, Any]) -> UserActionChallengeResponse:
+ """
+ Initialize Register Payin Recipient.
+
+ Creates a user action challenge for external signing.
+
+ Args:
+ body: Request body.
+
+ Returns:
+ UserActionChallengeResponse: The challenge to sign externally.
+ """ # noqa: E501
+ path = "/payins/recipients"
+ payload = json.dumps(body, separators=(",", ":")) if body else ""
+
+ return BaseAuthApi.create_user_action_challenge(
+ self._http,
+ user_action_http_method="POST",
+ user_action_http_path=path,
+ user_action_payload=payload,
+ )
+
+ def register_payin_recipient_complete(
+ self, body: dict[str, Any], signed_challenge: SignUserActionChallengeRequest
+ ) -> T.RegisterPayinRecipientResponse:
+ """
+ Complete Register Payin Recipient.
+
+ Submits the signed challenge and makes the API request.
+
+ Args:
+ body: Request body.
+ signed_challenge: The signed challenge from external signing.
+
+ Returns:
+ T.RegisterPayinRecipientResponse: The API response.
+ """ # noqa: E501
+ user_action_result = BaseAuthApi.sign_user_action_challenge(self._http, signed_challenge)
+ user_action_token = user_action_result["userAction"]
+
+ response = self._http.request_with_user_action(
+ method="POST",
+ path="/payins/recipients",
+ path_params={},
+ query_params=None,
+ body=body,
+ user_action=user_action_token,
+ )
+ return cast(T.RegisterPayinRecipientResponse, response)
+
+ def get_payin_status(self, payin_id: str) -> dict[str, Any]:
+ """
+ Get Payin Status.
+
+ Retrieve the current status of an payin by its ID.
+
+ Args:
+ payin_id: Payin id.
+
+ Returns:
+ dict[str, Any]: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="GET",
+ path="/payins/{payinId}",
+ path_params={"payinId": payin_id},
+ query_params=None,
+ body=None,
+ requires_signature=False,
+ )
+ return cast(dict[str, Any], response)
+
+ def list_payin_balances(self, query: T.ListPayinBalancesQuery) -> T.ListPayinBalancesResponse:
+ """
+ List Payin Balances.
+
+ The organisation's available balance at the payin provider, one entry per currency —
+ the funds payins can deliver on-chain.
+
+ Args:
+ query: Query parameters.
+
+ Returns:
+ T.ListPayinBalancesResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="GET",
+ path="/payins/balances",
+ path_params={},
+ query_params=query,
+ body=None,
+ requires_signature=False,
+ )
+ return cast(T.ListPayinBalancesResponse, response)
diff --git a/dfns_sdk/generated/payins/types.py b/dfns_sdk/generated/payins/types.py
new file mode 100644
index 0000000..1e14375
--- /dev/null
+++ b/dfns_sdk/generated/payins/types.py
@@ -0,0 +1,62 @@
+"""Types for the payins domain."""
+
+from typing import Any, Literal, TypedDict
+
+from typing_extensions import NotRequired
+
+
+class ListPayinsResponse(TypedDict, total=False):
+ """listPayins response."""
+
+ items: list[dict[str, Any]]
+ next_page_token: NotRequired[str]
+
+
+class ListPayinsQuery(TypedDict, total=False):
+ """listPayins query parameters."""
+
+ limit: NotRequired[int]
+ pagination_token: NotRequired[str]
+ wallet_id: NotRequired[str]
+ status: NotRequired[list[Literal["Processing", "Completed", "Failed"]]]
+ provider: NotRequired[list[Literal["CircleMint"]]]
+
+
+class GetPayinRecipientResponse(TypedDict, total=False):
+ """getPayinRecipient response."""
+
+ provider: Literal["CircleMint"]
+ wallet_id: str
+ currency: Literal["USD", "EUR"]
+ status: Literal["NotRegistered", "PendingVerification", "Active"]
+ recipient_address_id: NotRequired[str]
+
+
+class GetPayinRecipientQuery(TypedDict, total=False):
+ """getPayinRecipient query parameters."""
+
+ provider: Literal["CircleMint"]
+ wallet_id: str
+ currency: Literal["USD", "EUR"]
+
+
+class RegisterPayinRecipientResponse(TypedDict, total=False):
+ """registerPayinRecipient response."""
+
+ provider: Literal["CircleMint"]
+ wallet_id: str
+ currency: Literal["USD", "EUR"]
+ status: Literal["NotRegistered", "PendingVerification", "Active"]
+ recipient_address_id: NotRequired[str]
+
+
+class ListPayinBalancesResponse(TypedDict, total=False):
+ """listPayinBalances response."""
+
+ items: list[dict[str, Any]]
+
+
+class ListPayinBalancesQuery(TypedDict, total=False):
+ """listPayinBalances query parameters."""
+
+ provider: Literal["CircleMint"]
diff --git a/dfns_sdk/generated/payouts/types.py b/dfns_sdk/generated/payouts/types.py
index 9970ada..3f112f8 100644
--- a/dfns_sdk/generated/payouts/types.py
+++ b/dfns_sdk/generated/payouts/types.py
@@ -19,12 +19,13 @@ class ListPayoutsQuery(TypedDict, total=False):
pagination_token: NotRequired[str]
wallet_id: NotRequired[str]
status: NotRequired[list[Literal["Processing", "Completed", "Failed", "Rejected", "Expired", "Canceled"]]]
+ provider: NotRequired[list[Literal["Borderless", "CircleMint"]]]
class RequestPayoutQuoteResponse(TypedDict, total=False):
"""requestPayoutQuote response."""
- provider: Literal["Borderless"]
+ provider: Literal["Borderless", "CircleMint"]
asset: dict[str, Any]
timestamp: str
quotes: list[dict[str, Any]]
diff --git a/dfns_sdk/generated/permissions/types.py b/dfns_sdk/generated/permissions/types.py
index cfc089e..8fbb464 100644
--- a/dfns_sdk/generated/permissions/types.py
+++ b/dfns_sdk/generated/permissions/types.py
@@ -138,6 +138,8 @@ class CreatePermissionRequest(TypedDict, total=False):
"Payouts:Create",
"Payouts:Read",
"Payouts:Write",
+ "Payins:Create",
+ "Payins:Read",
"Allocations:Create",
"Allocations:Update",
"Allocations:Read",
@@ -157,6 +159,7 @@ class CreatePermissionRequest(TypedDict, total=False):
"KeyStores:Fleets:Create",
"KeyStores:Fleets:Clone",
"KeyStores:Fleets:AddMacUser",
+ "KeyStores:Fleets:KeyHarvest",
"KeyStores:ProofOfControl:Create",
"KeyStores:OnchainSignatures:Create",
"Networks:CantonValidators:Create",
@@ -182,6 +185,8 @@ class CreatePermissionRequest(TypedDict, total=False):
"Vaults:Tags:Add",
"Vaults:Tags:Delete",
"Vaults:Addresses:Create",
+ "Vaults:Balances:Unquarantine",
+ "Vaults:Transfers:Create",
"Webhooks:Create",
"Webhooks:Read",
"Webhooks:Update",
@@ -324,6 +329,8 @@ class UpdatePermissionRequest(TypedDict, total=False):
"Payouts:Create",
"Payouts:Read",
"Payouts:Write",
+ "Payins:Create",
+ "Payins:Read",
"Allocations:Create",
"Allocations:Update",
"Allocations:Read",
@@ -343,6 +350,7 @@ class UpdatePermissionRequest(TypedDict, total=False):
"KeyStores:Fleets:Create",
"KeyStores:Fleets:Clone",
"KeyStores:Fleets:AddMacUser",
+ "KeyStores:Fleets:KeyHarvest",
"KeyStores:ProofOfControl:Create",
"KeyStores:OnchainSignatures:Create",
"Networks:CantonValidators:Create",
@@ -368,6 +376,8 @@ class UpdatePermissionRequest(TypedDict, total=False):
"Vaults:Tags:Add",
"Vaults:Tags:Delete",
"Vaults:Addresses:Create",
+ "Vaults:Balances:Unquarantine",
+ "Vaults:Transfers:Create",
"Webhooks:Create",
"Webhooks:Read",
"Webhooks:Update",
diff --git a/dfns_sdk/generated/signers/client.py b/dfns_sdk/generated/signers/client.py
index cb469c9..bc1826e 100644
--- a/dfns_sdk/generated/signers/client.py
+++ b/dfns_sdk/generated/signers/client.py
@@ -16,6 +16,8 @@ def create_add_mac_user_input(self, store_id: str, body: T.CreateAddMacUserInput
"""
Create Add Mac User Input.
+ Creates the input archive for an add-mac-user fleet operation, which registers a new Mac operator machine with an HSM in the key store's trust set.
+
Args:
store_id: Path parameter.
body: Request body.
@@ -33,6 +35,8 @@ def create_clone_input(self, store_id: str, body: T.CreateCloneInputRequest) ->
"""
Create Clone Input.
+ Creates the input archive for a clone fleet operation, which replicates a key store from a source HSM to a target HSM.
+
Args:
store_id: Path parameter.
body: Request body.
@@ -50,6 +54,8 @@ def create_genesis_input(self, store_id: str, body: T.CreateGenesisInputRequest)
"""
Create Genesis Input.
+ Creates the input archive for a genesis fleet operation, which provisions a new offline signer fleet and generates the key store's initial signing keys.
+
Args:
store_id: Path parameter.
body: Request body.
@@ -63,10 +69,29 @@ def create_genesis_input(self, store_id: str, body: T.CreateGenesisInputRequest)
requires_signature=True,
)
+ def create_key_harvest_input(self, store_id: str, body: T.CreateKeyHarvestInputRequest) -> None:
+ """
+ Create Key Harvest Input.
+
+ Args:
+ store_id: Path parameter.
+ body: Request body.
+ """ # noqa: E501
+ self._http.request(
+ method="POST",
+ path="/key-stores/{storeId}/key-harvest/input",
+ path_params={"storeId": store_id},
+ query_params=None,
+ body=body,
+ requires_signature=True,
+ )
+
def create_onchain_sign_input(self, store_id: str, body: T.CreateOnchainSignInputRequest) -> None:
"""
Create Onchain Sign Input.
+ Creates the input archive for an onchain-sign operation covering the key store's pending signature requests.
+
Args:
store_id: Path parameter.
body: Request body.
@@ -84,6 +109,8 @@ def create_proof_of_control_input(self, store_id: str, body: T.CreateProofOfCont
"""
Create Proof Of Control Input.
+ Creates the input archive for a proof-of-control operation covering the keys of the specified wallets.
+
Args:
store_id: Path parameter.
body: Request body.
@@ -101,6 +128,8 @@ def list_key_stores(self) -> T.ListKeyStoresResponse:
"""
List Key Stores.
+ Lists the key stores of your organization.
+
Returns:
T.ListKeyStoresResponse: The API response.
""" # noqa: E501
@@ -118,6 +147,8 @@ def list_signers(self) -> T.ListSignersResponse:
"""
List Signers.
+ Lists the signer clusters of your key store, including each signer's ID and encryption public key.
+
Returns:
T.ListSignersResponse: The API response.
""" # noqa: E501
@@ -137,6 +168,8 @@ def submit_add_mac_user_output(
"""
Submit Add Mac User Output.
+ Submits the output archive produced by the offline signer fleet for an add-mac-user operation.
+
Args:
store_id: Path parameter.
body: Request body.
@@ -162,6 +195,8 @@ def submit_clone_output(
"""
Submit Clone Output.
+ Submits the output archive produced by the offline signer fleet for a clone operation.
+
Args:
store_id: Path parameter.
body: Request body.
@@ -187,6 +222,8 @@ def submit_genesis_output(
"""
Submit Genesis Output.
+ Submits the output archive produced by the offline signer fleet for a genesis operation.
+
Args:
store_id: Path parameter.
body: Request body.
@@ -206,12 +243,39 @@ def submit_genesis_output(
)
return cast(T.SubmitGenesisOutputResponse, response)
+ def submit_key_harvest_output(
+ self, store_id: str, body: T.SubmitKeyHarvestOutputRequest, file: bytes
+ ) -> T.SubmitKeyHarvestOutputResponse:
+ """
+ Submit Key Harvest Output.
+
+ Args:
+ store_id: Path parameter.
+ body: Request body.
+ file: The file bytes to upload.
+
+ Returns:
+ T.SubmitKeyHarvestOutputResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="POST",
+ path="/key-stores/{storeId}/key-harvest/output",
+ path_params={"storeId": store_id},
+ query_params=None,
+ body=body,
+ file=file,
+ requires_signature=True,
+ )
+ return cast(T.SubmitKeyHarvestOutputResponse, response)
+
def submit_onchain_sign_output(
self, store_id: str, body: T.SubmitOnchainSignOutputRequest, file: bytes
) -> T.SubmitOnchainSignOutputResponse:
"""
Submit Onchain Sign Output.
+ Submits the output archive produced by the offline signer fleet for an onchain-sign operation.
+
Args:
store_id: Path parameter.
body: Request body.
@@ -237,6 +301,8 @@ def submit_proof_of_control_output(
"""
Submit Proof Of Control Output.
+ Submits the output archive produced by the offline signer fleet for a proof-of-control operation.
+
Args:
store_id: Path parameter.
body: Request body.
diff --git a/dfns_sdk/generated/signers/delegated_client.py b/dfns_sdk/generated/signers/delegated_client.py
index dfd0b0a..7596af1 100644
--- a/dfns_sdk/generated/signers/delegated_client.py
+++ b/dfns_sdk/generated/signers/delegated_client.py
@@ -170,6 +170,57 @@ def create_genesis_input_complete(
user_action=user_action_token,
)
+ def create_key_harvest_input_init(
+ self, store_id: str, body: T.CreateKeyHarvestInputRequest
+ ) -> UserActionChallengeResponse:
+ """
+ Initialize Create Key Harvest Input.
+
+ Creates a user action challenge for external signing.
+
+ Args:
+ store_id: Path parameter.
+ body: Request body.
+
+ Returns:
+ UserActionChallengeResponse: The challenge to sign externally.
+ """ # noqa: E501
+ path = "/key-stores/{storeId}/key-harvest/input"
+ path = path.replace("{storeId}", str(store_id))
+ payload = json.dumps(body, separators=(",", ":")) if body else ""
+
+ return BaseAuthApi.create_user_action_challenge(
+ self._http,
+ user_action_http_method="POST",
+ user_action_http_path=path,
+ user_action_payload=payload,
+ )
+
+ def create_key_harvest_input_complete(
+ self, store_id: str, body: T.CreateKeyHarvestInputRequest, signed_challenge: SignUserActionChallengeRequest
+ ) -> None:
+ """
+ Complete Create Key Harvest Input.
+
+ Submits the signed challenge and makes the API request.
+
+ Args:
+ store_id: Path parameter.
+ body: Request body.
+ signed_challenge: The signed challenge from external signing.
+ """ # noqa: E501
+ user_action_result = BaseAuthApi.sign_user_action_challenge(self._http, signed_challenge)
+ user_action_token = user_action_result["userAction"]
+
+ self._http.request_with_user_action(
+ method="POST",
+ path="/key-stores/{storeId}/key-harvest/input",
+ path_params={"storeId": store_id},
+ query_params=None,
+ body=body,
+ user_action=user_action_token,
+ )
+
def create_onchain_sign_input_init(
self, store_id: str, body: T.CreateOnchainSignInputRequest
) -> UserActionChallengeResponse:
@@ -276,6 +327,8 @@ def list_key_stores(self) -> T.ListKeyStoresResponse:
"""
List Key Stores.
+ Lists the key stores of your organization.
+
Returns:
T.ListKeyStoresResponse: The API response.
""" # noqa: E501
@@ -293,6 +346,8 @@ def list_signers(self) -> T.ListSignersResponse:
"""
List Signers.
+ Lists the signer clusters of your key store, including each signer's ID and encryption public key.
+
Returns:
T.ListSignersResponse: The API response.
""" # noqa: E501
@@ -312,6 +367,8 @@ def submit_add_mac_user_output(
"""
Submit Add Mac User Output.
+ Submits the output archive produced by the offline signer fleet for an add-mac-user operation.
+
Args:
store_id: Path parameter.
body: Request body.
@@ -337,6 +394,8 @@ def submit_clone_output(
"""
Submit Clone Output.
+ Submits the output archive produced by the offline signer fleet for a clone operation.
+
Args:
store_id: Path parameter.
body: Request body.
@@ -362,6 +421,8 @@ def submit_genesis_output(
"""
Submit Genesis Output.
+ Submits the output archive produced by the offline signer fleet for a genesis operation.
+
Args:
store_id: Path parameter.
body: Request body.
@@ -381,12 +442,39 @@ def submit_genesis_output(
)
return cast(T.SubmitGenesisOutputResponse, response)
+ def submit_key_harvest_output(
+ self, store_id: str, body: T.SubmitKeyHarvestOutputRequest, file: bytes
+ ) -> T.SubmitKeyHarvestOutputResponse:
+ """
+ Submit Key Harvest Output.
+
+ Args:
+ store_id: Path parameter.
+ body: Request body.
+ file: The file bytes to upload.
+
+ Returns:
+ T.SubmitKeyHarvestOutputResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="POST",
+ path="/key-stores/{storeId}/key-harvest/output",
+ path_params={"storeId": store_id},
+ query_params=None,
+ body=body,
+ file=file,
+ requires_signature=True,
+ )
+ return cast(T.SubmitKeyHarvestOutputResponse, response)
+
def submit_onchain_sign_output(
self, store_id: str, body: T.SubmitOnchainSignOutputRequest, file: bytes
) -> T.SubmitOnchainSignOutputResponse:
"""
Submit Onchain Sign Output.
+ Submits the output archive produced by the offline signer fleet for an onchain-sign operation.
+
Args:
store_id: Path parameter.
body: Request body.
@@ -412,6 +500,8 @@ def submit_proof_of_control_output(
"""
Submit Proof Of Control Output.
+ Submits the output archive produced by the offline signer fleet for a proof-of-control operation.
+
Args:
store_id: Path parameter.
body: Request body.
diff --git a/dfns_sdk/generated/signers/types.py b/dfns_sdk/generated/signers/types.py
index f74aff6..3cfa187 100644
--- a/dfns_sdk/generated/signers/types.py
+++ b/dfns_sdk/generated/signers/types.py
@@ -32,6 +32,18 @@ class CreateGenesisInputRequest(TypedDict, total=False):
hsm_genesis_serial: str
mac_genesis_serial: NotRequired[str]
hsm_genesis_firmware_version: NotRequired[Literal["2.2", "2.4"]]
+ debug_options: NotRequired[dict[str, dict[str, Any]]]
+
+
+class CreateKeyHarvestInputRequest(TypedDict, total=False):
+ """createKeyHarvestInput request body."""
+
+ kind: Literal["KeyHarvest"]
+ hsm_target_serial: str
+ mac_target_serial: str
+ mac_target_username: str
+ num_secp256k1: NotRequired[int]
+ num_ed25519: NotRequired[int]
class CreateOnchainSignInputRequest(TypedDict, total=False):
@@ -97,6 +109,19 @@ class SubmitGenesisOutputResponse(TypedDict, total=False):
message: str
+class SubmitKeyHarvestOutputRequest(TypedDict, total=False):
+ """submitKeyHarvestOutput request body."""
+
+ file_checksum: str
+ output_json: dict[str, Any]
+
+
+class SubmitKeyHarvestOutputResponse(TypedDict, total=False):
+ """submitKeyHarvestOutput response."""
+
+ message: str
+
+
class SubmitOnchainSignOutputRequest(TypedDict, total=False):
"""submitOnchainSignOutput request body."""
diff --git a/dfns_sdk/generated/swaps/types.py b/dfns_sdk/generated/swaps/types.py
index 33d83dd..e55525d 100644
--- a/dfns_sdk/generated/swaps/types.py
+++ b/dfns_sdk/generated/swaps/types.py
@@ -29,6 +29,7 @@ class CreateSwapResponse(TypedDict, total=False):
target_wallet_id: str
status: Literal["PendingPolicyApproval", "InProgress", "Completed", "Failed", "Rejected"]
provider: Literal["UniswapX", "UniswapClassic", "CircleCctp"]
+ fee_sponsor_id: NotRequired[str]
quoted_source_asset: dict[str, Any]
quoted_target_asset: dict[str, Any]
slippage_bps: float
@@ -65,6 +66,7 @@ class GetSwapResponse(TypedDict, total=False):
target_wallet_id: str
status: Literal["PendingPolicyApproval", "InProgress", "Completed", "Failed", "Rejected"]
provider: Literal["UniswapX", "UniswapClassic", "CircleCctp"]
+ fee_sponsor_id: NotRequired[str]
quoted_source_asset: dict[str, Any]
quoted_target_asset: dict[str, Any]
slippage_bps: float
diff --git a/dfns_sdk/generated/vaults/__init__.py b/dfns_sdk/generated/vaults/__init__.py
new file mode 100644
index 0000000..6f85ad3
--- /dev/null
+++ b/dfns_sdk/generated/vaults/__init__.py
@@ -0,0 +1,7 @@
+"""Vaults domain module."""
+
+from . import types
+from .client import VaultsClient
+from .delegated_client import DelegatedVaultsClient
+
+__all__ = ["VaultsClient", "DelegatedVaultsClient", "types"]
diff --git a/dfns_sdk/generated/vaults/client.py b/dfns_sdk/generated/vaults/client.py
new file mode 100644
index 0000000..baa9e5d
--- /dev/null
+++ b/dfns_sdk/generated/vaults/client.py
@@ -0,0 +1,268 @@
+"""Client for the vaults domain."""
+
+from typing import cast
+
+from ..._internal import HttpClient
+from . import types as T
+
+
+class VaultsClient:
+ """Client for vaults operations."""
+
+ def __init__(self, http_client: HttpClient):
+ self._http = http_client
+
+ def list_vaults(self, query: T.ListVaultsQuery | None = None) -> T.ListVaultsResponse:
+ """
+ List Vaults.
+
+ Retrieves the list of Vaults in your organization.
+
+ Args:
+ query: Query parameters.
+
+ Returns:
+ T.ListVaultsResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="GET",
+ path="/vaults",
+ path_params={},
+ query_params=query,
+ body=None,
+ requires_signature=False,
+ )
+ return cast(T.ListVaultsResponse, response)
+
+ def create_vault(self, body: T.CreateVaultRequest) -> T.CreateVaultResponse:
+ """
+ Create Vault.
+
+ Creates a new Vault.
+
+ Args:
+ body: Request body.
+
+ Returns:
+ T.CreateVaultResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="POST",
+ path="/vaults",
+ path_params={},
+ query_params=None,
+ body=body,
+ requires_signature=True,
+ )
+ return cast(T.CreateVaultResponse, response)
+
+ def create_vault_address(self, vault_id: str, body: T.CreateVaultAddressRequest) -> T.CreateVaultAddressResponse:
+ """
+ Create Vault Address.
+
+ Creates a vault address (managed wallet) on an EVM network.
+
+ Args:
+ vault_id: Vault id.
+ body: Request body.
+
+ Returns:
+ T.CreateVaultAddressResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="POST",
+ path="/vaults/{vaultId}/addresses",
+ path_params={"vaultId": vault_id},
+ query_params=None,
+ body=body,
+ requires_signature=True,
+ )
+ return cast(T.CreateVaultAddressResponse, response)
+
+ def create_vault_transfer(self, vault_id: str, body: T.CreateVaultTransferRequest) -> T.CreateVaultTransferResponse:
+ """
+ Create Vault Transfer.
+
+ Creates a transfer out of a vault, reserving the amount and estimated fee from the vault's available balance.
+
+ Args:
+ vault_id: Vault id.
+ body: Request body.
+
+ Returns:
+ T.CreateVaultTransferResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="POST",
+ path="/vaults/{vaultId}/transfers",
+ path_params={"vaultId": vault_id},
+ query_params=None,
+ body=body,
+ requires_signature=True,
+ )
+ return cast(T.CreateVaultTransferResponse, response)
+
+ def get_vault(self, vault_id: str) -> T.GetVaultResponse:
+ """
+ Get Vault.
+
+ Retrieves a Vault by its ID.
+
+ Args:
+ vault_id: The vault to retrieve.
+
+ Returns:
+ T.GetVaultResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="GET",
+ path="/vaults/{vaultId}",
+ path_params={"vaultId": vault_id},
+ query_params=None,
+ body=None,
+ requires_signature=False,
+ )
+ return cast(T.GetVaultResponse, response)
+
+ def update_vault(self, vault_id: str, body: T.UpdateVaultRequest) -> T.UpdateVaultResponse:
+ """
+ Update Vault.
+
+ Updates an existing Vault.
+
+ Args:
+ vault_id: Vault id.
+ body: Request body.
+
+ Returns:
+ T.UpdateVaultResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="PUT",
+ path="/vaults/{vaultId}",
+ path_params={"vaultId": vault_id},
+ query_params=None,
+ body=body,
+ requires_signature=True,
+ )
+ return cast(T.UpdateVaultResponse, response)
+
+ def list_vault_assets(
+ self, vault_id: str, query: T.ListVaultAssetsQuery | None = None
+ ) -> T.ListVaultAssetsResponse:
+ """
+ List Vault Assets.
+
+ Lists a vault's assets with balances (available/quarantined/locked) and USD valuation.
+
+ Args:
+ vault_id: Vault id.
+ query: Query parameters.
+
+ Returns:
+ T.ListVaultAssetsResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="GET",
+ path="/vaults/{vaultId}/assets",
+ path_params={"vaultId": vault_id},
+ query_params=query,
+ body=None,
+ requires_signature=False,
+ )
+ return cast(T.ListVaultAssetsResponse, response)
+
+ def list_vault_balances(
+ self, vault_id: str, query: T.ListVaultBalancesQuery | None = None
+ ) -> T.ListVaultBalancesResponse:
+ """
+ List Vault Balances.
+
+ Lists a vault's balance entries.
+
+ Args:
+ vault_id: Vault id.
+ query: Query parameters.
+
+ Returns:
+ T.ListVaultBalancesResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="GET",
+ path="/vaults/{vaultId}/balances",
+ path_params={"vaultId": vault_id},
+ query_params=query,
+ body=None,
+ requires_signature=False,
+ )
+ return cast(T.ListVaultBalancesResponse, response)
+
+ def tag_vault(self, vault_id: str, body: T.TagVaultRequest) -> T.TagVaultResponse:
+ """
+ Tag Vault.
+
+ Add tags to a vault.
+
+ Args:
+ vault_id: Vault id.
+ body: Request body.
+
+ Returns:
+ T.TagVaultResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="PUT",
+ path="/vaults/{vaultId}/tags",
+ path_params={"vaultId": vault_id},
+ query_params=None,
+ body=body,
+ requires_signature=True,
+ )
+ return cast(T.TagVaultResponse, response)
+
+ def untag_vault(self, vault_id: str, body: T.UntagVaultRequest) -> T.UntagVaultResponse:
+ """
+ Untag Vault.
+
+ Removes the specified tags from a vault.
+
+ Args:
+ vault_id: Vault id.
+ body: Request body.
+
+ Returns:
+ T.UntagVaultResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="DELETE",
+ path="/vaults/{vaultId}/tags",
+ path_params={"vaultId": vault_id},
+ query_params=None,
+ body=body,
+ requires_signature=True,
+ )
+ return cast(T.UntagVaultResponse, response)
+
+ def unquarantine(self, vault_id: str, quarantine_id: str, body: T.UnquarantineRequest) -> T.UnquarantineResponse:
+ """
+ Unquarantine.
+
+ Releases quarantined funds into the available balance.
+
+ Args:
+ vault_id: Vault id.
+ quarantine_id: Vault quarantine id.
+ body: Request body.
+
+ Returns:
+ T.UnquarantineResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="DELETE",
+ path="/vaults/{vaultId}/quarantines/{quarantineId}",
+ path_params={"vaultId": vault_id, "quarantineId": quarantine_id},
+ query_params=None,
+ body=body,
+ requires_signature=True,
+ )
+ return cast(T.UnquarantineResponse, response)
diff --git a/dfns_sdk/generated/vaults/delegated_client.py b/dfns_sdk/generated/vaults/delegated_client.py
new file mode 100644
index 0000000..0fab481
--- /dev/null
+++ b/dfns_sdk/generated/vaults/delegated_client.py
@@ -0,0 +1,495 @@
+"""Delegated client for the vaults domain."""
+
+import json
+from typing import cast
+
+from ..._internal import HttpClient
+from ...base_auth_api import BaseAuthApi, SignUserActionChallengeRequest, UserActionChallengeResponse
+from . import types as T
+
+
+class DelegatedVaultsClient:
+ """
+ Delegated client for vaults operations.
+
+ This client separates user action signing into _init() and _complete() method pairs,
+ allowing external systems to handle the signing process.
+ """
+
+ def __init__(self, http_client: HttpClient):
+ self._http = http_client
+
+ def list_vaults(self, query: T.ListVaultsQuery | None = None) -> T.ListVaultsResponse:
+ """
+ List Vaults.
+
+ Retrieves the list of Vaults in your organization.
+
+ Args:
+ query: Query parameters.
+
+ Returns:
+ T.ListVaultsResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="GET",
+ path="/vaults",
+ path_params={},
+ query_params=query,
+ body=None,
+ requires_signature=False,
+ )
+ return cast(T.ListVaultsResponse, response)
+
+ def create_vault_init(self, body: T.CreateVaultRequest) -> UserActionChallengeResponse:
+ """
+ Initialize Create Vault.
+
+ Creates a user action challenge for external signing.
+
+ Args:
+ body: Request body.
+
+ Returns:
+ UserActionChallengeResponse: The challenge to sign externally.
+ """ # noqa: E501
+ path = "/vaults"
+ payload = json.dumps(body, separators=(",", ":")) if body else ""
+
+ return BaseAuthApi.create_user_action_challenge(
+ self._http,
+ user_action_http_method="POST",
+ user_action_http_path=path,
+ user_action_payload=payload,
+ )
+
+ def create_vault_complete(
+ self, body: T.CreateVaultRequest, signed_challenge: SignUserActionChallengeRequest
+ ) -> T.CreateVaultResponse:
+ """
+ Complete Create Vault.
+
+ Submits the signed challenge and makes the API request.
+
+ Args:
+ body: Request body.
+ signed_challenge: The signed challenge from external signing.
+
+ Returns:
+ T.CreateVaultResponse: The API response.
+ """ # noqa: E501
+ user_action_result = BaseAuthApi.sign_user_action_challenge(self._http, signed_challenge)
+ user_action_token = user_action_result["userAction"]
+
+ response = self._http.request_with_user_action(
+ method="POST",
+ path="/vaults",
+ path_params={},
+ query_params=None,
+ body=body,
+ user_action=user_action_token,
+ )
+ return cast(T.CreateVaultResponse, response)
+
+ def create_vault_address_init(
+ self, vault_id: str, body: T.CreateVaultAddressRequest
+ ) -> UserActionChallengeResponse:
+ """
+ Initialize Create Vault Address.
+
+ Creates a user action challenge for external signing.
+
+ Args:
+ vault_id: Vault id.
+ body: Request body.
+
+ Returns:
+ UserActionChallengeResponse: The challenge to sign externally.
+ """ # noqa: E501
+ path = "/vaults/{vaultId}/addresses"
+ path = path.replace("{vaultId}", str(vault_id))
+ payload = json.dumps(body, separators=(",", ":")) if body else ""
+
+ return BaseAuthApi.create_user_action_challenge(
+ self._http,
+ user_action_http_method="POST",
+ user_action_http_path=path,
+ user_action_payload=payload,
+ )
+
+ def create_vault_address_complete(
+ self, vault_id: str, body: T.CreateVaultAddressRequest, signed_challenge: SignUserActionChallengeRequest
+ ) -> T.CreateVaultAddressResponse:
+ """
+ Complete Create Vault Address.
+
+ Submits the signed challenge and makes the API request.
+
+ Args:
+ vault_id: Vault id.
+ body: Request body.
+ signed_challenge: The signed challenge from external signing.
+
+ Returns:
+ T.CreateVaultAddressResponse: The API response.
+ """ # noqa: E501
+ user_action_result = BaseAuthApi.sign_user_action_challenge(self._http, signed_challenge)
+ user_action_token = user_action_result["userAction"]
+
+ response = self._http.request_with_user_action(
+ method="POST",
+ path="/vaults/{vaultId}/addresses",
+ path_params={"vaultId": vault_id},
+ query_params=None,
+ body=body,
+ user_action=user_action_token,
+ )
+ return cast(T.CreateVaultAddressResponse, response)
+
+ def create_vault_transfer_init(
+ self, vault_id: str, body: T.CreateVaultTransferRequest
+ ) -> UserActionChallengeResponse:
+ """
+ Initialize Create Vault Transfer.
+
+ Creates a user action challenge for external signing.
+
+ Args:
+ vault_id: Vault id.
+ body: Request body.
+
+ Returns:
+ UserActionChallengeResponse: The challenge to sign externally.
+ """ # noqa: E501
+ path = "/vaults/{vaultId}/transfers"
+ path = path.replace("{vaultId}", str(vault_id))
+ payload = json.dumps(body, separators=(",", ":")) if body else ""
+
+ return BaseAuthApi.create_user_action_challenge(
+ self._http,
+ user_action_http_method="POST",
+ user_action_http_path=path,
+ user_action_payload=payload,
+ )
+
+ def create_vault_transfer_complete(
+ self, vault_id: str, body: T.CreateVaultTransferRequest, signed_challenge: SignUserActionChallengeRequest
+ ) -> T.CreateVaultTransferResponse:
+ """
+ Complete Create Vault Transfer.
+
+ Submits the signed challenge and makes the API request.
+
+ Args:
+ vault_id: Vault id.
+ body: Request body.
+ signed_challenge: The signed challenge from external signing.
+
+ Returns:
+ T.CreateVaultTransferResponse: The API response.
+ """ # noqa: E501
+ user_action_result = BaseAuthApi.sign_user_action_challenge(self._http, signed_challenge)
+ user_action_token = user_action_result["userAction"]
+
+ response = self._http.request_with_user_action(
+ method="POST",
+ path="/vaults/{vaultId}/transfers",
+ path_params={"vaultId": vault_id},
+ query_params=None,
+ body=body,
+ user_action=user_action_token,
+ )
+ return cast(T.CreateVaultTransferResponse, response)
+
+ def get_vault(self, vault_id: str) -> T.GetVaultResponse:
+ """
+ Get Vault.
+
+ Retrieves a Vault by its ID.
+
+ Args:
+ vault_id: The vault to retrieve.
+
+ Returns:
+ T.GetVaultResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="GET",
+ path="/vaults/{vaultId}",
+ path_params={"vaultId": vault_id},
+ query_params=None,
+ body=None,
+ requires_signature=False,
+ )
+ return cast(T.GetVaultResponse, response)
+
+ def update_vault_init(self, vault_id: str, body: T.UpdateVaultRequest) -> UserActionChallengeResponse:
+ """
+ Initialize Update Vault.
+
+ Creates a user action challenge for external signing.
+
+ Args:
+ vault_id: Vault id.
+ body: Request body.
+
+ Returns:
+ UserActionChallengeResponse: The challenge to sign externally.
+ """ # noqa: E501
+ path = "/vaults/{vaultId}"
+ path = path.replace("{vaultId}", str(vault_id))
+ payload = json.dumps(body, separators=(",", ":")) if body else ""
+
+ return BaseAuthApi.create_user_action_challenge(
+ self._http,
+ user_action_http_method="PUT",
+ user_action_http_path=path,
+ user_action_payload=payload,
+ )
+
+ def update_vault_complete(
+ self, vault_id: str, body: T.UpdateVaultRequest, signed_challenge: SignUserActionChallengeRequest
+ ) -> T.UpdateVaultResponse:
+ """
+ Complete Update Vault.
+
+ Submits the signed challenge and makes the API request.
+
+ Args:
+ vault_id: Vault id.
+ body: Request body.
+ signed_challenge: The signed challenge from external signing.
+
+ Returns:
+ T.UpdateVaultResponse: The API response.
+ """ # noqa: E501
+ user_action_result = BaseAuthApi.sign_user_action_challenge(self._http, signed_challenge)
+ user_action_token = user_action_result["userAction"]
+
+ response = self._http.request_with_user_action(
+ method="PUT",
+ path="/vaults/{vaultId}",
+ path_params={"vaultId": vault_id},
+ query_params=None,
+ body=body,
+ user_action=user_action_token,
+ )
+ return cast(T.UpdateVaultResponse, response)
+
+ def list_vault_assets(
+ self, vault_id: str, query: T.ListVaultAssetsQuery | None = None
+ ) -> T.ListVaultAssetsResponse:
+ """
+ List Vault Assets.
+
+ Lists a vault's assets with balances (available/quarantined/locked) and USD valuation.
+
+ Args:
+ vault_id: Vault id.
+ query: Query parameters.
+
+ Returns:
+ T.ListVaultAssetsResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="GET",
+ path="/vaults/{vaultId}/assets",
+ path_params={"vaultId": vault_id},
+ query_params=query,
+ body=None,
+ requires_signature=False,
+ )
+ return cast(T.ListVaultAssetsResponse, response)
+
+ def list_vault_balances(
+ self, vault_id: str, query: T.ListVaultBalancesQuery | None = None
+ ) -> T.ListVaultBalancesResponse:
+ """
+ List Vault Balances.
+
+ Lists a vault's balance entries.
+
+ Args:
+ vault_id: Vault id.
+ query: Query parameters.
+
+ Returns:
+ T.ListVaultBalancesResponse: The API response.
+ """ # noqa: E501
+ response = self._http.request(
+ method="GET",
+ path="/vaults/{vaultId}/balances",
+ path_params={"vaultId": vault_id},
+ query_params=query,
+ body=None,
+ requires_signature=False,
+ )
+ return cast(T.ListVaultBalancesResponse, response)
+
+ def tag_vault_init(self, vault_id: str, body: T.TagVaultRequest) -> UserActionChallengeResponse:
+ """
+ Initialize Tag Vault.
+
+ Creates a user action challenge for external signing.
+
+ Args:
+ vault_id: Vault id.
+ body: Request body.
+
+ Returns:
+ UserActionChallengeResponse: The challenge to sign externally.
+ """ # noqa: E501
+ path = "/vaults/{vaultId}/tags"
+ path = path.replace("{vaultId}", str(vault_id))
+ payload = json.dumps(body, separators=(",", ":")) if body else ""
+
+ return BaseAuthApi.create_user_action_challenge(
+ self._http,
+ user_action_http_method="PUT",
+ user_action_http_path=path,
+ user_action_payload=payload,
+ )
+
+ def tag_vault_complete(
+ self, vault_id: str, body: T.TagVaultRequest, signed_challenge: SignUserActionChallengeRequest
+ ) -> T.TagVaultResponse:
+ """
+ Complete Tag Vault.
+
+ Submits the signed challenge and makes the API request.
+
+ Args:
+ vault_id: Vault id.
+ body: Request body.
+ signed_challenge: The signed challenge from external signing.
+
+ Returns:
+ T.TagVaultResponse: The API response.
+ """ # noqa: E501
+ user_action_result = BaseAuthApi.sign_user_action_challenge(self._http, signed_challenge)
+ user_action_token = user_action_result["userAction"]
+
+ response = self._http.request_with_user_action(
+ method="PUT",
+ path="/vaults/{vaultId}/tags",
+ path_params={"vaultId": vault_id},
+ query_params=None,
+ body=body,
+ user_action=user_action_token,
+ )
+ return cast(T.TagVaultResponse, response)
+
+ def untag_vault_init(self, vault_id: str, body: T.UntagVaultRequest) -> UserActionChallengeResponse:
+ """
+ Initialize Untag Vault.
+
+ Creates a user action challenge for external signing.
+
+ Args:
+ vault_id: Vault id.
+ body: Request body.
+
+ Returns:
+ UserActionChallengeResponse: The challenge to sign externally.
+ """ # noqa: E501
+ path = "/vaults/{vaultId}/tags"
+ path = path.replace("{vaultId}", str(vault_id))
+ payload = json.dumps(body, separators=(",", ":")) if body else ""
+
+ return BaseAuthApi.create_user_action_challenge(
+ self._http,
+ user_action_http_method="DELETE",
+ user_action_http_path=path,
+ user_action_payload=payload,
+ )
+
+ def untag_vault_complete(
+ self, vault_id: str, body: T.UntagVaultRequest, signed_challenge: SignUserActionChallengeRequest
+ ) -> T.UntagVaultResponse:
+ """
+ Complete Untag Vault.
+
+ Submits the signed challenge and makes the API request.
+
+ Args:
+ vault_id: Vault id.
+ body: Request body.
+ signed_challenge: The signed challenge from external signing.
+
+ Returns:
+ T.UntagVaultResponse: The API response.
+ """ # noqa: E501
+ user_action_result = BaseAuthApi.sign_user_action_challenge(self._http, signed_challenge)
+ user_action_token = user_action_result["userAction"]
+
+ response = self._http.request_with_user_action(
+ method="DELETE",
+ path="/vaults/{vaultId}/tags",
+ path_params={"vaultId": vault_id},
+ query_params=None,
+ body=body,
+ user_action=user_action_token,
+ )
+ return cast(T.UntagVaultResponse, response)
+
+ def unquarantine_init(
+ self, vault_id: str, quarantine_id: str, body: T.UnquarantineRequest
+ ) -> UserActionChallengeResponse:
+ """
+ Initialize Unquarantine.
+
+ Creates a user action challenge for external signing.
+
+ Args:
+ vault_id: Vault id.
+ quarantine_id: Vault quarantine id.
+ body: Request body.
+
+ Returns:
+ UserActionChallengeResponse: The challenge to sign externally.
+ """ # noqa: E501
+ path = "/vaults/{vaultId}/quarantines/{quarantineId}"
+ path = path.replace("{vaultId}", str(vault_id))
+ path = path.replace("{quarantineId}", str(quarantine_id))
+ payload = json.dumps(body, separators=(",", ":")) if body else ""
+
+ return BaseAuthApi.create_user_action_challenge(
+ self._http,
+ user_action_http_method="DELETE",
+ user_action_http_path=path,
+ user_action_payload=payload,
+ )
+
+ def unquarantine_complete(
+ self,
+ vault_id: str,
+ quarantine_id: str,
+ body: T.UnquarantineRequest,
+ signed_challenge: SignUserActionChallengeRequest,
+ ) -> T.UnquarantineResponse:
+ """
+ Complete Unquarantine.
+
+ Submits the signed challenge and makes the API request.
+
+ Args:
+ vault_id: Vault id.
+ quarantine_id: Vault quarantine id.
+ body: Request body.
+ signed_challenge: The signed challenge from external signing.
+
+ Returns:
+ T.UnquarantineResponse: The API response.
+ """ # noqa: E501
+ user_action_result = BaseAuthApi.sign_user_action_challenge(self._http, signed_challenge)
+ user_action_token = user_action_result["userAction"]
+
+ response = self._http.request_with_user_action(
+ method="DELETE",
+ path="/vaults/{vaultId}/quarantines/{quarantineId}",
+ path_params={"vaultId": vault_id, "quarantineId": quarantine_id},
+ query_params=None,
+ body=body,
+ user_action=user_action_token,
+ )
+ return cast(T.UnquarantineResponse, response)
diff --git a/dfns_sdk/generated/vaults/types.py b/dfns_sdk/generated/vaults/types.py
new file mode 100644
index 0000000..99cfd97
--- /dev/null
+++ b/dfns_sdk/generated/vaults/types.py
@@ -0,0 +1,298 @@
+"""Types for the vaults domain."""
+
+from typing import Any, Literal, TypedDict
+
+from typing_extensions import NotRequired
+
+
+class ListVaultsResponse(TypedDict, total=False):
+ """listVaults response."""
+
+ items: list[dict[str, Any]]
+ next_page_token: NotRequired[str]
+
+
+class ListVaultsQuery(TypedDict, total=False):
+ """listVaults query parameters."""
+
+ limit: NotRequired[int]
+ pagination_token: NotRequired[str]
+
+
+class CreateVaultRequest(TypedDict, total=False):
+ """createVault request body."""
+
+ name: NotRequired[str]
+ tags: NotRequired[list[str]]
+ external_id: NotRequired[str]
+
+
+class CreateVaultResponse(TypedDict, total=False):
+ """createVault response."""
+
+ id: str
+ org_id: str
+ name: NotRequired[str]
+ tags: list[str]
+ external_id: NotRequired[str]
+ date_created: str
+ date_updated: str
+ addresses: NotRequired[list[dict[str, Any]]]
+
+
+class CreateVaultAddressRequest(TypedDict, total=False):
+ """createVaultAddress request body."""
+
+ network: Literal[
+ "ArbitrumOne",
+ "ArbitrumSepolia",
+ "ArcTestnet",
+ "AvalancheC",
+ "AvalancheCFuji",
+ "Base",
+ "BaseSepolia",
+ "Bob",
+ "BobSepolia",
+ "Bsc",
+ "BscTestnet",
+ "Berachain",
+ "BerachainBepolia",
+ "Celo",
+ "CeloAlfajores",
+ "Codex",
+ "CodexSepolia",
+ "Ethereum",
+ "EthereumClassic",
+ "EthereumClassicMordor",
+ "EthereumSepolia",
+ "EthereumHoodi",
+ "FlareC",
+ "FlareCCoston2",
+ "FlowEvm",
+ "FlowEvmTestnet",
+ "Ink",
+ "InkSepolia",
+ "Optimism",
+ "OptimismSepolia",
+ "Plasma",
+ "PlasmaTestnet",
+ "Plume",
+ "PlumeSepolia",
+ "Polygon",
+ "PolygonAmoy",
+ "Race",
+ "RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
+ "Robinhood",
+ "RobinhoodSepolia",
+ "SeiPacific1",
+ "SeiAtlantic2",
+ "Sonic",
+ "SonicTestnet",
+ "Tempo",
+ "TempoModerato",
+ "Tsc",
+ "TscTestnet1",
+ "Xdc",
+ "XdcApothem",
+ "XLayer",
+ "XLayerSepolia",
+ ]
+
+
+class CreateVaultAddressResponse(TypedDict, total=False):
+ """createVaultAddress response."""
+
+ wallet_id: str
+ network: str
+ address: str
+
+
+class CreateVaultTransferRequest(TypedDict, total=False):
+ """createVaultTransfer request body."""
+
+ network: Literal[
+ "ArbitrumOne",
+ "ArbitrumSepolia",
+ "ArcTestnet",
+ "AvalancheC",
+ "AvalancheCFuji",
+ "Base",
+ "BaseSepolia",
+ "Bob",
+ "BobSepolia",
+ "Bsc",
+ "BscTestnet",
+ "Berachain",
+ "BerachainBepolia",
+ "Celo",
+ "CeloAlfajores",
+ "Codex",
+ "CodexSepolia",
+ "Ethereum",
+ "EthereumClassic",
+ "EthereumClassicMordor",
+ "EthereumSepolia",
+ "EthereumHoodi",
+ "FlareC",
+ "FlareCCoston2",
+ "FlowEvm",
+ "FlowEvmTestnet",
+ "Ink",
+ "InkSepolia",
+ "Optimism",
+ "OptimismSepolia",
+ "Plasma",
+ "PlasmaTestnet",
+ "Plume",
+ "PlumeSepolia",
+ "Polygon",
+ "PolygonAmoy",
+ "Race",
+ "RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
+ "Robinhood",
+ "RobinhoodSepolia",
+ "SeiPacific1",
+ "SeiAtlantic2",
+ "Sonic",
+ "SonicTestnet",
+ "Tempo",
+ "TempoModerato",
+ "Tsc",
+ "TscTestnet1",
+ "Xdc",
+ "XdcApothem",
+ "XLayer",
+ "XLayerSepolia",
+ ]
+ tid: str
+ to: str
+ amount: str
+ external_id: NotRequired[str]
+
+
+class CreateVaultTransferResponse(TypedDict, total=False):
+ """createVaultTransfer response."""
+
+ id: str
+ wallet_id: str
+ network: dict[str, Any]
+ requester: dict[str, Any]
+ request_body: dict[str, Any]
+ metadata: dict[str, Any]
+ status: Literal["Pending", "Executing", "Broadcasted", "Confirmed", "Failed", "Rejected"]
+ reason: NotRequired[str]
+ tx_hash: NotRequired[str]
+ fee: NotRequired[str]
+ date_requested: str
+ date_policy_resolved: NotRequired[str]
+ date_broadcasted: NotRequired[str]
+ date_confirmed: NotRequired[str]
+ approval_id: NotRequired[str]
+ external_id: NotRequired[str]
+ fee_sponsor_id: NotRequired[str]
+ replacement_id: NotRequired[str]
+ details: NotRequired[dict[str, dict[str, Any]]]
+
+
+class GetVaultResponse(TypedDict, total=False):
+ """getVault response."""
+
+ id: str
+ org_id: str
+ name: NotRequired[str]
+ tags: list[str]
+ external_id: NotRequired[str]
+ date_created: str
+ date_updated: str
+ addresses: NotRequired[list[dict[str, Any]]]
+
+
+class UpdateVaultRequest(TypedDict, total=False):
+ """updateVault request body."""
+
+ name: NotRequired[str]
+ external_id: NotRequired[str]
+
+
+class UpdateVaultResponse(TypedDict, total=False):
+ """updateVault response."""
+
+ id: str
+ org_id: str
+ name: NotRequired[str]
+ tags: list[str]
+ external_id: NotRequired[str]
+ date_created: str
+ date_updated: str
+ addresses: NotRequired[list[dict[str, Any]]]
+
+
+class ListVaultAssetsResponse(TypedDict, total=False):
+ """listVaultAssets response."""
+
+ items: list[dict[str, Any]]
+ net_worth: dict[str, Any]
+
+
+class ListVaultAssetsQuery(TypedDict, total=False):
+ """listVaultAssets query parameters."""
+
+ show_unverified: NotRequired[Any]
+ network: NotRequired[str]
+
+
+class ListVaultBalancesResponse(TypedDict, total=False):
+ """listVaultBalances response."""
+
+ items: list[dict[str, Any]]
+ next_page_token: NotRequired[str]
+
+
+class ListVaultBalancesQuery(TypedDict, total=False):
+ """listVaultBalances query parameters."""
+
+ limit: NotRequired[int]
+ pagination_token: NotRequired[str]
+ kind: NotRequired[Literal["Available", "Outgoing", "Fee", "Incoming", "Locked", "Quarantined"]]
+ network: NotRequired[str]
+ tid: NotRequired[str]
+
+
+class TagVaultRequest(TypedDict, total=False):
+ """tagVault request body."""
+
+ tags: list[str]
+
+
+class TagVaultResponse(TypedDict, total=False):
+ """tagVault response."""
+
+ pass
+
+
+class UntagVaultRequest(TypedDict, total=False):
+ """untagVault request body."""
+
+ tags: list[str]
+
+
+class UntagVaultResponse(TypedDict, total=False):
+ """untagVault response."""
+
+ pass
+
+
+class UnquarantineRequest(TypedDict, total=False):
+ """unquarantine request body."""
+
+ reason: NotRequired[str]
+
+
+class UnquarantineResponse(TypedDict, total=False):
+ """unquarantine response."""
+
+ status: Literal["OK"]
diff --git a/dfns_sdk/generated/wallets/client.py b/dfns_sdk/generated/wallets/client.py
index 8345a3d..6fc65bd 100644
--- a/dfns_sdk/generated/wallets/client.py
+++ b/dfns_sdk/generated/wallets/client.py
@@ -140,7 +140,7 @@ def sign_and_broadcast_transaction(
- for reading from a "view" function on EVM chains, please use [Read Contract](https://docs.dfns.co/api-reference/networks/read-contract) endpoint.
+ for reading from a "view" function on EVM chains, please use [Read Contract](https://docs.dfns.co/api-reference/networks/call-function) endpoint.
Args:
diff --git a/dfns_sdk/generated/wallets/types.py b/dfns_sdk/generated/wallets/types.py
index dbed6ca..9223e07 100644
--- a/dfns_sdk/generated/wallets/types.py
+++ b/dfns_sdk/generated/wallets/types.py
@@ -91,6 +91,8 @@ class AbortTransactionResponse(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
@@ -251,6 +253,8 @@ class ActivateWalletResponse(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
@@ -402,6 +406,8 @@ class SignAndBroadcastTransactionResponse(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
@@ -538,6 +544,8 @@ class CancelTransactionResponse(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
@@ -674,6 +682,8 @@ class CancelTransferResponse(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
@@ -818,6 +828,8 @@ class SpeedUpTransactionResponse(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
@@ -954,6 +966,8 @@ class SpeedUpTransferResponse(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
@@ -1105,6 +1119,8 @@ class CreateWalletRequest(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
@@ -1232,6 +1248,8 @@ class CreateWalletResponse(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
@@ -1364,6 +1382,8 @@ class GetTransactionResponse(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
@@ -1523,6 +1543,8 @@ class GetWalletResponse(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
@@ -1661,6 +1683,8 @@ class UpdateWalletResponse(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
@@ -1792,6 +1816,8 @@ class GetWalletAssetsResponse(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
@@ -1923,6 +1949,8 @@ class GetWalletHistoryResponse(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
@@ -1995,6 +2023,7 @@ class GetWalletHistoryQuery(TypedDict, total=False):
"Trc721Transfer",
"UtxoTransfer",
"Xls33Transfer",
+ "SmartContractEvent",
]
]
contract: NotRequired[str]
@@ -2085,6 +2114,8 @@ class GetWalletNftsResponse(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
@@ -2211,6 +2242,8 @@ class ImportWalletRequest(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
@@ -2333,6 +2366,8 @@ class ImportWalletResponse(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
@@ -2529,6 +2564,8 @@ class GetOfferResponse(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
@@ -2703,6 +2740,8 @@ class AcceptOfferResponse(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
@@ -2863,6 +2902,8 @@ class RejectOfferResponse(TypedDict, total=False):
"PolymeshTestnet",
"Race",
"RaceSepolia",
+ "Rayls",
+ "RaylsTestnet",
"Robinhood",
"RobinhoodSepolia",
"SeiAtlantic2",
diff --git a/dfns_sdk/generated/webhooks/types.py b/dfns_sdk/generated/webhooks/types.py
index b627aa7..07d58b0 100644
--- a/dfns_sdk/generated/webhooks/types.py
+++ b/dfns_sdk/generated/webhooks/types.py
@@ -59,6 +59,10 @@ class CreateWebhookRequest(TypedDict, total=False):
"wallet.offer.rejected",
"wallet.offer.withdrawn",
"wallet.tags.modified",
+ "vault.created",
+ "vault.updated",
+ "vault.tags.modified",
+ "vault.event.created",
"payout.action.required",
]
| Literal["*"]
@@ -104,6 +108,10 @@ class CreateWebhookResponse(TypedDict, total=False):
"wallet.offer.rejected",
"wallet.offer.withdrawn",
"wallet.tags.modified",
+ "vault.created",
+ "vault.updated",
+ "vault.tags.modified",
+ "vault.event.created",
"payout.action.required",
]
| Literal["*"]
@@ -154,6 +162,10 @@ class GetWebhookResponse(TypedDict, total=False):
"wallet.offer.rejected",
"wallet.offer.withdrawn",
"wallet.tags.modified",
+ "vault.created",
+ "vault.updated",
+ "vault.tags.modified",
+ "vault.event.created",
"payout.action.required",
]
| Literal["*"]
@@ -204,6 +216,10 @@ class UpdateWebhookRequest(TypedDict, total=False):
"wallet.offer.rejected",
"wallet.offer.withdrawn",
"wallet.tags.modified",
+ "vault.created",
+ "vault.updated",
+ "vault.tags.modified",
+ "vault.event.created",
"payout.action.required",
]
| Literal["*"]
@@ -251,6 +267,10 @@ class UpdateWebhookResponse(TypedDict, total=False):
"wallet.offer.rejected",
"wallet.offer.withdrawn",
"wallet.tags.modified",
+ "vault.created",
+ "vault.updated",
+ "vault.tags.modified",
+ "vault.event.created",
"payout.action.required",
]
| Literal["*"]
@@ -312,6 +332,10 @@ class GetWebhookEventResponse(TypedDict, total=False):
"wallet.offer.rejected",
"wallet.offer.withdrawn",
"wallet.tags.modified",
+ "vault.created",
+ "vault.updated",
+ "vault.tags.modified",
+ "vault.event.created",
"payout.action.required",
]
data: dict[str, dict[str, Any]]
@@ -364,6 +388,10 @@ class ListWebhookEventsQuery(TypedDict, total=False):
"wallet.offer.rejected",
"wallet.offer.withdrawn",
"wallet.tags.modified",
+ "vault.created",
+ "vault.updated",
+ "vault.tags.modified",
+ "vault.event.created",
"payout.action.required",
]
]