"""
Binance Wallet REST API

OpenAPI Specification for the Binance Wallet REST API
The version of the OpenAPI document: 1.0.0
Generated by OpenAPI Generator (https://openapi-generator.tech)

Do not edit the class manually.
"""

import requests
from typing import Optional, TypeVar, Union
from binance_common.configuration import ConfigurationRestAPI
from binance_common.models import ApiResponse
from binance_common.signature import Signers
from binance_common.utils import send_request
from .api.account_api import AccountApi
from .api.asset_api import AssetApi
from .api.capital_api import CapitalApi
from .api.others_api import OthersApi
from .api.travel_rule_api import TravelRuleApi

from .models import AccountApiTradingStatusResponse
from .models import AccountInfoResponse
from .models import AccountStatusResponse
from .models import DailyAccountSnapshotResponse


from .models import GetApiKeyPermissionResponse
from .models import AssetDetailResponse
from .models import AssetDividendRecordResponse
from .models import DustConvertResponse
from .models import DustConvertibleAssetsResponse
from .models import DustTransferResponse
from .models import DustlogResponse
from .models import FundingWalletResponse
from .models import GetAssetsThatCanBeConvertedIntoBnbResponse
from .models import GetCloudMiningPaymentAndRefundHistoryResponse
from .models import GetOpenSymbolListResponse
from .models import QueryUserDelegationHistoryResponse
from .models import QueryUserUniversalTransferHistoryResponse
from .models import QueryUserWalletBalanceResponse
from .models import ToggleBnbBurnOnSpotTradeAndMarginInterestResponse
from .models import TradeFeeResponse
from .models import UserAssetResponse
from .models import UserUniversalTransferResponse
from .models import AllCoinsInformationResponse
from .models import DepositAddressResponse
from .models import DepositHistoryResponse
from .models import FetchDepositAddressListWithNetworkResponse
from .models import FetchWithdrawAddressListResponse
from .models import FetchWithdrawQuotaResponse
from .models import OneClickArrivalDepositApplyResponse
from .models import WithdrawResponse
from .models import WithdrawHistoryResponse
from .models import GetSymbolsDelistScheduleForSpotResponse
from .models import SystemStatusResponse
from .models import BrokerWithdrawResponse
from .models import CheckQuestionnaireRequirementsResponse
from .models import DepositHistoryTravelRuleResponse
from .models import DepositHistoryV2Response
from .models import FetchAddressVerificationListResponse
from .models import SubmitDepositQuestionnaireResponse
from .models import SubmitDepositQuestionnaireTravelRuleResponse
from .models import VaspListResponse
from .models import WithdrawHistoryV1Response
from .models import WithdrawHistoryV2Response
from .models import WithdrawTravelRuleResponse


T = TypeVar("T")


class WalletRestAPI:
    def __init__(
        self,
        configuration: ConfigurationRestAPI,
    ) -> None:
        self.configuration = configuration
        self._session = requests.Session()
        self._signer = (
            Signers.get_signer(
                configuration.private_key, configuration.private_key_passphrase
            )
            if configuration.private_key is not None
            else None
        )

        self._accountApi = AccountApi(self.configuration, self._session, self._signer)
        self._assetApi = AssetApi(self.configuration, self._session, self._signer)
        self._capitalApi = CapitalApi(self.configuration, self._session, self._signer)
        self._othersApi = OthersApi(self.configuration, self._session, self._signer)
        self._travelRuleApi = TravelRuleApi(
            self.configuration, self._session, self._signer
        )

    def send_request(
        self,
        endpoint: str,
        method: str,
        query_params: Optional[dict] = None,
        body_params: Optional[dict] = None,
    ) -> ApiResponse[T]:
        """
        Sends an request to the Binance REST API.

        Args:
            endpoint (str): The API endpoint path to send the request to.
            method (str): The HTTP method to use for the request (e.g. "GET", "POST", "PUT", "DELETE").
            query_params (Optional[dict]): The request payload as a dictionary, or None if no payload is required.
            body_params (Optional[dict]): The request body as a dictionary, or None if no body is required.

        Returns:
            ApiResponse[T]: The API response, where T is the expected response type.
        """
        return send_request[T](
            self._session,
            self.configuration,
            method,
            endpoint,
            query_params,
            body_params,
        )

    def send_signed_request(
        self,
        endpoint: str,
        method: str,
        query_params: Optional[dict] = None,
        body_params: Optional[dict] = None,
    ) -> ApiResponse[T]:
        """
        Sends a signed request to the Binance REST API.

        Args:
            endpoint (str): The API endpoint path to send the request to.
            method (str): The HTTP method to use for the request (e.g. "GET", "POST", "PUT", "DELETE").
            query_params (Optional[dict]): The request payload as a dictionary, or None if no payload is required.
            body_params (Optional[dict]): The request body as a dictionary, or None if no body is required.

        Returns:
            ApiResponse[T]: The API response, where T is the expected response type.
        """
        return send_request[T](
            self._session,
            self.configuration,
            method,
            endpoint,
            query_params,
            body_params,
            is_signed=True,
            signer=self._signer,
        )

    def account_api_trading_status(
        self,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[AccountApiTradingStatusResponse]:
        """
                Account API Trading Status (USER_DATA)

                Fetch account api trading status detail.

        Weight: 1

                Args:
                    recv_window (Optional[int] = None):

                Returns:
                    ApiResponse[AccountApiTradingStatusResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._accountApi.account_api_trading_status(recv_window)

    def account_info(
        self,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[AccountInfoResponse]:
        """
                Account info (USER_DATA)

                Fetch account info detail.

        Weight: 1

                Args:
                    recv_window (Optional[int] = None):

                Returns:
                    ApiResponse[AccountInfoResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._accountApi.account_info(recv_window)

    def account_status(
        self,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[AccountStatusResponse]:
        """
                Account Status (USER_DATA)

                Fetch account status detail.

        Weight: 1

                Args:
                    recv_window (Optional[int] = None):

                Returns:
                    ApiResponse[AccountStatusResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._accountApi.account_status(recv_window)

    def daily_account_snapshot(
        self,
        type: Union[str, None],
        start_time: Optional[int] = None,
        end_time: Optional[int] = None,
        limit: Optional[int] = None,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[DailyAccountSnapshotResponse]:
        """
                Daily Account Snapshot (USER_DATA)

                Daily account snapshot

        * The query time period must be less then 30 days
        * Support query within the last one month only
        * If startTimeand endTime not sent, return records of the last 7 days by default

        Weight: 2400

                Args:
                    type (Union[str, None]):
                    start_time (Optional[int] = None):
                    end_time (Optional[int] = None):
                    limit (Optional[int] = None): min 7, max 30, default 7
                    recv_window (Optional[int] = None):

                Returns:
                    ApiResponse[DailyAccountSnapshotResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._accountApi.daily_account_snapshot(
            type, start_time, end_time, limit, recv_window
        )

    def disable_fast_withdraw_switch(
        self,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[None]:
        """
                Disable Fast Withdraw Switch (USER_DATA)


        Weight: 1

                Args:
                    recv_window (Optional[int] = None):

                Returns:
                    ApiResponse[None]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._accountApi.disable_fast_withdraw_switch(recv_window)

    def enable_fast_withdraw_switch(
        self,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[None]:
        """
                Enable Fast Withdraw Switch (USER_DATA)

                Enable Fast Withdraw Switch (USER_DATA)

        * This request will enable fastwithdraw switch under your  account. <br></br>
        * When Fast Withdraw Switch is on, transferring funds to a Binance account will be done instantly. There is no on-chain transaction, no transaction ID and no withdrawal fee.

        Weight: 1

                Args:
                    recv_window (Optional[int] = None):

                Returns:
                    ApiResponse[None]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._accountApi.enable_fast_withdraw_switch(recv_window)

    def get_api_key_permission(
        self,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[GetApiKeyPermissionResponse]:
        """
                Get API Key Permission (USER_DATA)

                Get API Key Permission

        Weight: 1

                Args:
                    recv_window (Optional[int] = None):

                Returns:
                    ApiResponse[GetApiKeyPermissionResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._accountApi.get_api_key_permission(recv_window)

    def asset_detail(
        self,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[AssetDetailResponse]:
        """
                Asset Detail (USER_DATA)

                Fetch details of assets supported on Binance.


        * Please get network and other deposit or withdraw details from ``GET /sapi/v1/capital/config/getall``.

        Weight: 1

                Args:
                    recv_window (Optional[int] = None):

                Returns:
                    ApiResponse[AssetDetailResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._assetApi.asset_detail(recv_window)

    def asset_dividend_record(
        self,
        asset: Optional[str] = None,
        start_time: Optional[int] = None,
        end_time: Optional[int] = None,
        limit: Optional[int] = None,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[AssetDividendRecordResponse]:
        """
                Asset Dividend Record (USER_DATA)

                Query asset dividend record.


        * There cannot be more than 180 days between parameter `startTime` and `endTime`.

        Weight: 10

                Args:
                    asset (Optional[str] = None): If asset is blank, then query all positive assets user have.
                    start_time (Optional[int] = None):
                    end_time (Optional[int] = None):
                    limit (Optional[int] = None): min 7, max 30, default 7
                    recv_window (Optional[int] = None):

                Returns:
                    ApiResponse[AssetDividendRecordResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._assetApi.asset_dividend_record(
            asset, start_time, end_time, limit, recv_window
        )

    def dust_convert(
        self,
        asset: Union[str, None],
        client_id: Optional[str] = None,
        target_asset: Optional[str] = None,
        third_party_client_id: Optional[str] = None,
        dust_quota_asset_to_target_asset_price: Optional[float] = None,
    ) -> ApiResponse[DustConvertResponse]:
        """
                Dust Convert (USER_DATA)

                Convert dust assets

        Weight: 10

                Args:
                    asset (Union[str, None]):
                    client_id (Optional[str] = None): A unique id for the request
                    target_asset (Optional[str] = None):
                    third_party_client_id (Optional[str] = None):
                    dust_quota_asset_to_target_asset_price (Optional[float] = None):

                Returns:
                    ApiResponse[DustConvertResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._assetApi.dust_convert(
            asset,
            client_id,
            target_asset,
            third_party_client_id,
            dust_quota_asset_to_target_asset_price,
        )

    def dust_convertible_assets(
        self,
        target_asset: Union[str, None],
        dust_quota_asset_to_target_asset_price: Optional[float] = None,
    ) -> ApiResponse[DustConvertibleAssetsResponse]:
        """
                Dust Convertible Assets (USER_DATA)

                Query dust convertible assets

        Weight: 1

                Args:
                    target_asset (Union[str, None]):
                    dust_quota_asset_to_target_asset_price (Optional[float] = None):

                Returns:
                    ApiResponse[DustConvertibleAssetsResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._assetApi.dust_convertible_assets(
            target_asset, dust_quota_asset_to_target_asset_price
        )

    def dust_transfer(
        self,
        asset: Union[str, None],
        account_type: Optional[str] = None,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[DustTransferResponse]:
        """
                Dust Transfer (USER_DATA)

                Convert dust assets to BNB.

        * You need to open`Enable Spot & Margin Trading` permission for the API Key which requests this endpoint.

        Weight: 10

                Args:
                    asset (Union[str, None]):
                    account_type (Optional[str] = None): `SPOT` or `MARGIN`,default `SPOT`
                    recv_window (Optional[int] = None):

                Returns:
                    ApiResponse[DustTransferResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._assetApi.dust_transfer(asset, account_type, recv_window)

    def dustlog(
        self,
        start_time: Optional[int] = None,
        end_time: Optional[int] = None,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[DustlogResponse]:
        """
                DustLog(USER_DATA)

                Dustlog

        * Only return last 100 records
        * Only return records after 2020/12/01

        Weight: 1

                Args:
                    start_time (Optional[int] = None):
                    end_time (Optional[int] = None):
                    recv_window (Optional[int] = None):

                Returns:
                    ApiResponse[DustlogResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._assetApi.dustlog(start_time, end_time, recv_window)

    def funding_wallet(
        self,
        asset: Optional[str] = None,
        need_btc_valuation: Optional[str] = None,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[FundingWalletResponse]:
        """
                Funding Wallet (USER_DATA)

                Query Funding Wallet


        * Currently supports querying the following business assets：Binance Pay, Binance Card, Binance Gift Card, Stock Token

        Weight: 1

                Args:
                    asset (Optional[str] = None): If asset is blank, then query all positive assets user have.
                    need_btc_valuation (Optional[str] = None): true or false
                    recv_window (Optional[int] = None):

                Returns:
                    ApiResponse[FundingWalletResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._assetApi.funding_wallet(asset, need_btc_valuation, recv_window)

    def get_assets_that_can_be_converted_into_bnb(
        self,
        account_type: Optional[str] = None,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[GetAssetsThatCanBeConvertedIntoBnbResponse]:
        """
                Get Assets That Can Be Converted Into BNB (USER_DATA)

                Get Assets That Can Be Converted Into BNB

        Weight: 1

                Args:
                    account_type (Optional[str] = None): `SPOT` or `MARGIN`,default `SPOT`
                    recv_window (Optional[int] = None):

                Returns:
                    ApiResponse[GetAssetsThatCanBeConvertedIntoBnbResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._assetApi.get_assets_that_can_be_converted_into_bnb(
            account_type, recv_window
        )

    def get_cloud_mining_payment_and_refund_history(
        self,
        start_time: Union[int, None],
        end_time: Union[int, None],
        tran_id: Optional[int] = None,
        client_tran_id: Optional[str] = None,
        asset: Optional[str] = None,
        current: Optional[int] = None,
        size: Optional[int] = None,
    ) -> ApiResponse[GetCloudMiningPaymentAndRefundHistoryResponse]:
        """
                Get Cloud-Mining payment and refund history (USER_DATA)

                The query of Cloud-Mining payment and refund history

        * Just return the SUCCESS records of payment and refund.
        * For response, type = 248 means payment, type = 249 means refund, status =S means SUCCESS.

        Weight: 600

                Args:
                    start_time (Union[int, None]):
                    end_time (Union[int, None]):
                    tran_id (Optional[int] = None): The transaction id
                    client_tran_id (Optional[str] = None): The unique flag
                    asset (Optional[str] = None): If asset is blank, then query all positive assets user have.
                    current (Optional[int] = None): current page, default 1, the min value is 1
                    size (Optional[int] = None): page size, default 10, the max value is 100

                Returns:
                    ApiResponse[GetCloudMiningPaymentAndRefundHistoryResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._assetApi.get_cloud_mining_payment_and_refund_history(
            start_time, end_time, tran_id, client_tran_id, asset, current, size
        )

    def get_open_symbol_list(
        self,
    ) -> ApiResponse[GetOpenSymbolListResponse]:
        """
                Get Open Symbol List (MARKET_DATA)

                Get the list of symbols that are scheduled to be opened for trading in the market.

        Weight: 100

                Args:

                Returns:
                    ApiResponse[GetOpenSymbolListResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._assetApi.get_open_symbol_list()

    def query_user_delegation_history(
        self,
        email: Union[str, None],
        start_time: Union[int, None],
        end_time: Union[int, None],
        type: Optional[str] = None,
        asset: Optional[str] = None,
        current: Optional[int] = None,
        size: Optional[int] = None,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[QueryUserDelegationHistoryResponse]:
        """
                Query User Delegation History(For Master Account)(USER_DATA)

                Query User Delegation History

        * You need to open Enable Spot & Margin Trading permission for the API Key which requests this endpoint

        Weight: 60

                Args:
                    email (Union[str, None]):
                    start_time (Union[int, None]):
                    end_time (Union[int, None]):
                    type (Optional[str] = None): Delegate/Undelegate
                    asset (Optional[str] = None): If asset is blank, then query all positive assets user have.
                    current (Optional[int] = None): current page, default 1, the min value is 1
                    size (Optional[int] = None): page size, default 10, the max value is 100
                    recv_window (Optional[int] = None):

                Returns:
                    ApiResponse[QueryUserDelegationHistoryResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._assetApi.query_user_delegation_history(
            email, start_time, end_time, type, asset, current, size, recv_window
        )

    def query_user_universal_transfer_history(
        self,
        type: Union[str, None],
        start_time: Optional[int] = None,
        end_time: Optional[int] = None,
        current: Optional[int] = None,
        size: Optional[int] = None,
        from_symbol: Optional[str] = None,
        to_symbol: Optional[str] = None,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[QueryUserUniversalTransferHistoryResponse]:
        """
                Query User Universal Transfer History(USER_DATA)

                Query User Universal Transfer History


        *  `fromSymbol` must be sent when type are ISOLATEDMARGIN_MARGIN and ISOLATEDMARGIN_ISOLATEDMARGIN
        *  `toSymbol` must be sent when type are MARGIN_ISOLATEDMARGIN and ISOLATEDMARGIN_ISOLATEDMARGIN
        * Support query within the last 6 months only
        * If `startTime`and `endTime` not sent, return records of the last 7 days by default

        Weight: 1

                Args:
                    type (Union[str, None]):
                    start_time (Optional[int] = None):
                    end_time (Optional[int] = None):
                    current (Optional[int] = None): current page, default 1, the min value is 1
                    size (Optional[int] = None): page size, default 10, the max value is 100
                    from_symbol (Optional[str] = None):
                    to_symbol (Optional[str] = None):
                    recv_window (Optional[int] = None):

                Returns:
                    ApiResponse[QueryUserUniversalTransferHistoryResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._assetApi.query_user_universal_transfer_history(
            type,
            start_time,
            end_time,
            current,
            size,
            from_symbol,
            to_symbol,
            recv_window,
        )

    def query_user_wallet_balance(
        self,
        quote_asset: Optional[str] = None,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[QueryUserWalletBalanceResponse]:
        """
                Query User Wallet Balance (USER_DATA)

                Query User Wallet Balance

        Weight: 60

                Args:
                    quote_asset (Optional[str] = None): `USDT`, `ETH`, `USDC`, `BNB`, etc. default `BTC`
                    recv_window (Optional[int] = None):

                Returns:
                    ApiResponse[QueryUserWalletBalanceResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._assetApi.query_user_wallet_balance(quote_asset, recv_window)

    def toggle_bnb_burn_on_spot_trade_and_margin_interest(
        self,
        spot_bnb_burn: Optional[str] = None,
        interest_bnb_burn: Optional[str] = None,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[ToggleBnbBurnOnSpotTradeAndMarginInterestResponse]:
        """
                Toggle BNB Burn On Spot Trade And Margin Interest (USER_DATA)

                Toggle BNB Burn On Spot Trade And Margin Interest

        * "spotBNBBurn" and "interestBNBBurn" should be sent at least one.

        Weight: 1(IP)

                Args:
                    spot_bnb_burn (Optional[str] = None): "true" or "false"; Determines whether to use BNB to pay for trading fees on SPOT
                    interest_bnb_burn (Optional[str] = None): "true" or "false"; Determines whether to use BNB to pay for margin loan's interest
                    recv_window (Optional[int] = None):

                Returns:
                    ApiResponse[ToggleBnbBurnOnSpotTradeAndMarginInterestResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._assetApi.toggle_bnb_burn_on_spot_trade_and_margin_interest(
            spot_bnb_burn, interest_bnb_burn, recv_window
        )

    def trade_fee(
        self,
        symbol: Optional[str] = None,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[TradeFeeResponse]:
        """
                Trade Fee (USER_DATA)

                Fetch trade fee

        Weight: 1

                Args:
                    symbol (Optional[str] = None):
                    recv_window (Optional[int] = None):

                Returns:
                    ApiResponse[TradeFeeResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._assetApi.trade_fee(symbol, recv_window)

    def user_asset(
        self,
        asset: Optional[str] = None,
        need_btc_valuation: Optional[bool] = None,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[UserAssetResponse]:
        """
                User Asset (USER_DATA)

                Get user assets, just for positive data.

        * If asset is set, then return this asset, otherwise return all assets positive.
        * If needBtcValuation is set, then return btcValudation.

        Weight: 5

                Args:
                    asset (Optional[str] = None): If asset is blank, then query all positive assets user have.
                    need_btc_valuation (Optional[bool] = None): Whether need btc valuation or not.
                    recv_window (Optional[int] = None):

                Returns:
                    ApiResponse[UserAssetResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._assetApi.user_asset(asset, need_btc_valuation, recv_window)

    def user_universal_transfer(
        self,
        type: Union[str, None],
        asset: Union[str, None],
        amount: Union[float, None],
        from_symbol: Optional[str] = None,
        to_symbol: Optional[str] = None,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[UserUniversalTransferResponse]:
        """
                User Universal Transfer (USER_DATA)

                user universal transfer

        *  `fromSymbol` must be sent when type are ISOLATEDMARGIN_MARGIN and ISOLATEDMARGIN_ISOLATEDMARGIN
        *  `toSymbol` must be sent when type are MARGIN_ISOLATEDMARGIN and ISOLATEDMARGIN_ISOLATEDMARGIN
        * ENUM of transfer types:
        * MAIN_UMFUTURE   Spot account transfer to USDⓈ-M Futures account
        * MAIN_CMFUTURE   Spot account transfer to COIN-M Futures account
        * MAIN_MARGIN   Spot account transfer to Margin（cross）account
        * UMFUTURE_MAIN   USDⓈ-M Futures account transfer to Spot account
        * UMFUTURE_MARGIN   USDⓈ-M Futures account transfer to Margin（cross）account
        * CMFUTURE_MAIN   COIN-M Futures account transfer to Spot account
        * CMFUTURE_MARGIN   COIN-M Futures account transfer to Margin(cross) account
        * MARGIN_MAIN   Margin（cross）account transfer to Spot account
        * MARGIN_UMFUTURE   Margin（cross）account transfer to USDⓈ-M Futures
        * MARGIN_CMFUTURE   Margin（cross）account transfer to COIN-M Futures
        * ISOLATEDMARGIN_MARGIN   Isolated margin account transfer to Margin(cross) account
        * MARGIN_ISOLATEDMARGIN   Margin(cross) account transfer to Isolated margin account
        * ISOLATEDMARGIN_ISOLATEDMARGIN   Isolated margin account transfer to Isolated margin account
        * MAIN_FUNDING   Spot account transfer to Funding account
        * FUNDING_MAIN   Funding account transfer to Spot account
        * FUNDING_UMFUTURE   Funding account transfer to UMFUTURE account
        * UMFUTURE_FUNDING   UMFUTURE account transfer to Funding account
        * MARGIN_FUNDING   MARGIN account transfer to Funding account
        * FUNDING_MARGIN   Funding account transfer to Margin account
        * FUNDING_CMFUTURE   Funding account transfer to CMFUTURE account
        * CMFUTURE_FUNDING   CMFUTURE account transfer to Funding account
        * MAIN_OPTION  Spot account transfer to Options account
        * OPTION_MAIN  Options account transfer to Spot account
        * UMFUTURE_OPTION USDⓈ-M Futures account transfer to Options account
        * OPTION_UMFUTURE Options account transfer to USDⓈ-M Futures account
        * MARGIN_OPTION  Margin（cross）account transfer to Options account
        * OPTION_MARGIN  Options account transfer to Margin（cross）account
        * FUNDING_OPTION   Funding account transfer to Options account
        * OPTION_FUNDING   Options account transfer to Funding account
        * MAIN_PORTFOLIO_MARGIN  Spot account transfer to Portfolio Margin account
        * PORTFOLIO_MARGIN_MAIN  Portfolio Margin account transfer to Spot account

        Weight: 900

                Args:
                    type (Union[str, None]):
                    asset (Union[str, None]):
                    amount (Union[float, None]):
                    from_symbol (Optional[str] = None):
                    to_symbol (Optional[str] = None):
                    recv_window (Optional[int] = None):

                Returns:
                    ApiResponse[UserUniversalTransferResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._assetApi.user_universal_transfer(
            type, asset, amount, from_symbol, to_symbol, recv_window
        )

    def all_coins_information(
        self,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[AllCoinsInformationResponse]:
        """
                All Coins' Information (USER_DATA)

                Get information of coins (available for deposit and withdraw) for user.

        Weight: 10

                Args:
                    recv_window (Optional[int] = None):

                Returns:
                    ApiResponse[AllCoinsInformationResponse]

                Raises:
                    RequiredError: If a required parameter is missing.

        """

        return self._capitalApi.all_coins_information(recv_window)

    def deposit_address(
        self,
        coin: Union[str, None],
        network: Optional[str] = None,
        amount: Optional[float] = None,
        recv_window: Optional[int] = None,
    ) -> ApiResponse[DepositAddressResponse]:
        """
                Deposit Address(supporting network) (USER_DATA)

                Fetch deposit address with network.

