Skip to content

spot.sub_accounts

Public methods exposed through client.spot.sub_accounts.

api_key

Returns API keys configured for a sub-account under the signed master account.

Parameters:

Name Type Description Default
sub_account str

Sub-account name whose API keys should be returned.

required
recv_window int | None

Optional signed-request validity window in milliseconds.

None
timestamp Timestamp | None

Signed request timestamp in milliseconds.

None
validate bool | None

Validation override for this request.

None

Returns:

Type Description
ApiKeyResponse

The validated endpoint response.

References
Source code in pkg/src/mexc/spot/sub_accounts/api_key.py
async def api_key(
  self,
  *,
  sub_account: str,
  recv_window: int | None = None,
  timestamp: Timestamp | None = None,
  validate: bool | None = None
) -> ApiKeyResponse:
  """Returns API keys configured for a sub-account under the signed master account.

  Args:
    sub_account: Sub-account name whose API keys should be returned.
    recv_window: Optional signed-request validity window in milliseconds.
    timestamp: Signed request timestamp in milliseconds.
    validate: Validation override for this request.

  Returns:
    The validated endpoint response.

  References:
    - [MEXC API docs](https://mexcdevelop.github.io/apidocs/spot_v3_en/#query-the-apikey-of-a-sub-account-for-master-account)
  """
  if timestamp is None:
    timestamp = ts.now()
  params = {}
  if sub_account is not None:
    params['subAccount'] = sub_account
  if recv_window is not None:
    params['recvWindow'] = recv_window
  if timestamp is not None:
    params['timestamp'] = ts.dump_ms(timestamp)
  r = await self.signed_request('GET', '/api/v3/sub-account/apiKey', params=params)
  return self.output(r.text, adapter, validate)

asset

Returns balances for a single sub-account.

Parameters:

Name Type Description Default
sub_account str

Sub-account name to query. The official docs only support one sub-account per request.

required
account_type str

Account type to query. The docs list SPOT and FUTURES but say only SPOT is currently supported.

required
timestamp Timestamp | None

Signed request timestamp in milliseconds.

None
validate bool | None

Validation override for this request.

None

Returns:

Type Description
AssetResponse

The validated endpoint response.

References
Source code in pkg/src/mexc/spot/sub_accounts/asset.py
async def asset(
  self,
  *,
  sub_account: str,
  account_type: str,
  timestamp: Timestamp | None = None,
  validate: bool | None = None
) -> AssetResponse:
  """Returns balances for a single sub-account.

  Args:
    sub_account: Sub-account name to query. The official docs only support one sub-account per request.
    account_type: Account type to query. The docs list SPOT and FUTURES but say only SPOT is currently supported.
    timestamp: Signed request timestamp in milliseconds.
    validate: Validation override for this request.

  Returns:
    The validated endpoint response.

  References:
    - [MEXC API docs](https://mexcdevelop.github.io/apidocs/spot_v3_en/#query-sub-account-asset)
  """
  if timestamp is None:
    timestamp = ts.now()
  params = {}
  if sub_account is not None:
    params['subAccount'] = sub_account
  if account_type is not None:
    params['accountType'] = account_type
  if timestamp is not None:
    params['timestamp'] = ts.dump_ms(timestamp)
  r = await self.signed_request('GET', '/api/v3/sub-account/asset', params=params)
  return self.output(r.text, adapter, validate)

create

Creates a new sub-account under the signed master account.

Parameters:

Name Type Description Default
sub_account str

Name to assign to the new sub-account.

required
note str

Operator note stored with the sub-account.

required
recv_window int | None

Optional signed-request validity window in milliseconds.

None
timestamp Timestamp | None

Signed request timestamp in milliseconds.

None
validate bool | None

Validation override for this request.

None

Returns:

Type Description
CreateResponse

The validated endpoint response.

References
Source code in pkg/src/mexc/spot/sub_accounts/create.py
async def create(
  self,
  *,
  sub_account: str,
  note: str,
  recv_window: int | None = None,
  timestamp: Timestamp | None = None,
  validate: bool | None = None
) -> CreateResponse:
  """Creates a new sub-account under the signed master account.

  Args:
    sub_account: Name to assign to the new sub-account.
    note: Operator note stored with the sub-account.
    recv_window: Optional signed-request validity window in milliseconds.
    timestamp: Signed request timestamp in milliseconds.
    validate: Validation override for this request.

  Returns:
    The validated endpoint response.

  References:
    - [MEXC API docs](https://mexcdevelop.github.io/apidocs/spot_v3_en/#create-a-sub-account-for-master-account)
  """
  if timestamp is None:
    timestamp = ts.now()
  params = {}
  if sub_account is not None:
    params['subAccount'] = sub_account
  if note is not None:
    params['note'] = note
  if recv_window is not None:
    params['recvWindow'] = recv_window
  if timestamp is not None:
    params['timestamp'] = ts.dump_ms(timestamp)
  r = await self.signed_request('POST', '/api/v3/sub-account/virtualSubAccount', params=params)
  return self.output(r.text, adapter, validate)

create_api_key

Creates an API key for a sub-account under the signed master account.

Parameters:

Name Type Description Default
sub_account str

Sub-account name for which to create the API key.

required
note str

API key note.

required
permissions str

Comma-separated API key permissions, such as SPOT_ACCOUNT_READ or SPOT_DEAL_WRITE.

required
ip str | None

Optional comma-separated IP allowlist. The official docs allow up to 20 addresses.

None
recv_window int | None

Optional signed-request validity window in milliseconds.

None
timestamp Timestamp | None

Signed request timestamp in milliseconds.

None
validate bool | None

Validation override for this request.

None

Returns:

Type Description
CreateApiKeyResponse

The validated endpoint response.

References
Source code in pkg/src/mexc/spot/sub_accounts/create_api_key.py
async def create_api_key(
  self,
  *,
  sub_account: str,
  note: str,
  permissions: str,
  ip: str | None = None,
  recv_window: int | None = None,
  timestamp: Timestamp | None = None,
  validate: bool | None = None
) -> CreateApiKeyResponse:
  """Creates an API key for a sub-account under the signed master account.

  Args:
    sub_account: Sub-account name for which to create the API key.
    note: API key note.
    permissions: Comma-separated API key permissions, such as SPOT_ACCOUNT_READ or SPOT_DEAL_WRITE.
    ip: Optional comma-separated IP allowlist. The official docs allow up to 20 addresses.
    recv_window: Optional signed-request validity window in milliseconds.
    timestamp: Signed request timestamp in milliseconds.
    validate: Validation override for this request.

  Returns:
    The validated endpoint response.

  References:
    - [MEXC API docs](https://mexcdevelop.github.io/apidocs/spot_v3_en/#create-an-apikey-for-a-sub-account-for-master-account)
  """
  if timestamp is None:
    timestamp = ts.now()
  params = {}
  if sub_account is not None:
    params['subAccount'] = sub_account
  if note is not None:
    params['note'] = note
  if permissions is not None:
    params['permissions'] = permissions
  if ip is not None:
    params['ip'] = ip
  if recv_window is not None:
    params['recvWindow'] = recv_window
  if timestamp is not None:
    params['timestamp'] = ts.dump_ms(timestamp)
  r = await self.signed_request('POST', '/api/v3/sub-account/apiKey', params=params)
  return self.output(r.text, adapter, validate)

delete_api_key

Deletes an API key from a sub-account under the signed master account.

Parameters:

Name Type Description Default
body DeleteApiKeyRequest

Request body.

required
sub_account str

Sub-account name whose API key should be deleted.

required
api_key str

API public key to delete.

required
recv_window int | None

Optional signed-request validity window in milliseconds.

None
timestamp Timestamp | None

Signed request timestamp in milliseconds.

None
validate bool | None

Validation override for this request.

None

Returns:

Type Description
DeleteApiKeyResponse

The validated endpoint response.

References
Source code in pkg/src/mexc/spot/sub_accounts/delete_api_key.py
async def delete_api_key(
  self,
  body: DeleteApiKeyRequest,
  *,
  sub_account: str,
  api_key: str,
  recv_window: int | None = None,
  timestamp: Timestamp | None = None,
  validate: bool | None = None
) -> DeleteApiKeyResponse:
  """Deletes an API key from a sub-account under the signed master account.

  Args:
    body: Request body.
    sub_account: Sub-account name whose API key should be deleted.
    api_key: API public key to delete.
    recv_window: Optional signed-request validity window in milliseconds.
    timestamp: Signed request timestamp in milliseconds.
    validate: Validation override for this request.

  Returns:
    The validated endpoint response.

  References:
    - [MEXC API docs](https://mexcdevelop.github.io/apidocs/spot_v3_en/#delete-the-apikey-of-a-sub-account-for-master-account)
  """
  if timestamp is None:
    timestamp = ts.now()
  params = {}
  if sub_account is not None:
    params['subAccount'] = sub_account
  if api_key is not None:
    params['apiKey'] = api_key
  if recv_window is not None:
    params['recvWindow'] = recv_window
  if timestamp is not None:
    params['timestamp'] = ts.dump_ms(timestamp)
  r = await self.signed_request('DELETE', '/api/v3/sub-account/apiKey', params=params)
  return self.output(r.text, adapter, validate)

enable_futures

Enables futures capability for a sub-account. The exact non-broker Spot endpoint is docs-ambiguous in the current official Spot V3 page.

Parameters:

Name Type Description Default
sub_account str

Sub-account name whose futures capability should be enabled. Parameter inferred from the requested path and official broker analogue because current Spot docs omit this exact operation.

required
timestamp Timestamp | None

Signed request timestamp in milliseconds.

None
validate bool | None

Validation override for this request.

None

Returns:

Type Description
EnableFuturesResponse

The validated endpoint response.

References
Source code in pkg/src/mexc/spot/sub_accounts/enable_futures.py
async def enable_futures(
  self,
  *,
  sub_account: str,
  timestamp: Timestamp | None = None,
  validate: bool | None = None
) -> EnableFuturesResponse:
  """Enables futures capability for a sub-account. The exact non-broker Spot endpoint is docs-ambiguous in the current official Spot V3 page.

  Args:
    sub_account: Sub-account name whose futures capability should be enabled. Parameter inferred from the requested path and official broker analogue because current Spot docs omit this exact operation.
    timestamp: Signed request timestamp in milliseconds.
    validate: Validation override for this request.

  Returns:
    The validated endpoint response.

  References:
    - [MEXC API docs](https://mexcdevelop.github.io/apidocs/spot_v3_en/#sub-account-endpoints)
  """
  if timestamp is None:
    timestamp = ts.now()
  params = {}
  if sub_account is not None:
    params['subAccount'] = sub_account
  if timestamp is not None:
    params['timestamp'] = ts.dump_ms(timestamp)
  r = await self.signed_request('POST', '/api/v3/sub-account/futures', params=params)
  return self.output(r.text, adapter, validate)

enable_margin

Enables margin capability for a sub-account. The exact endpoint is docs-ambiguous because the current official Spot V3 page omits this operation.

Parameters:

Name Type Description Default
sub_account str

Sub-account name whose margin capability should be enabled. Parameter inferred from the requested endpoint because current Spot docs omit this operation.

required
timestamp Timestamp | None

Signed request timestamp in milliseconds.

None
validate bool | None

Validation override for this request.

None

Returns:

Type Description
EnableMarginResponse

The validated endpoint response.

References
Source code in pkg/src/mexc/spot/sub_accounts/enable_margin.py
async def enable_margin(
  self,
  *,
  sub_account: str,
  timestamp: Timestamp | None = None,
  validate: bool | None = None
) -> EnableMarginResponse:
  """Enables margin capability for a sub-account. The exact endpoint is docs-ambiguous because the current official Spot V3 page omits this operation.

  Args:
    sub_account: Sub-account name whose margin capability should be enabled. Parameter inferred from the requested endpoint because current Spot docs omit this operation.
    timestamp: Signed request timestamp in milliseconds.
    validate: Validation override for this request.

  Returns:
    The validated endpoint response.

  References:
    - [MEXC API docs](https://mexcdevelop.github.io/apidocs/spot_v3_en/#sub-account-endpoints)
  """
  if timestamp is None:
    timestamp = ts.now()
  params = {}
  if sub_account is not None:
    params['subAccount'] = sub_account
  if timestamp is not None:
    params['timestamp'] = ts.dump_ms(timestamp)
  r = await self.signed_request('POST', '/api/v3/sub-account/margin', params=params)
  return self.output(r.text, adapter, validate)

list

Returns sub-account records visible to the signed master account.

Parameters:

Name Type Description Default
sub_account str | None

Optional sub-account name filter.

None
is_freeze str | None

Optional freeze-state filter, expressed as true or false.

None
page int | None

Result page number. Defaults to 1.

None
limit int | None

Maximum records to return. Defaults to 10 and may not exceed 200.

None
timestamp Timestamp | None

Signed request timestamp in milliseconds.

None
recv_window int | None

Optional signed-request validity window in milliseconds.

None
validate bool | None

Validation override for this request.

None

Returns:

Type Description
SubAccountsResponse

The validated endpoint response.

References
Source code in pkg/src/mexc/spot/sub_accounts/list.py
async def list(
  self,
  *,
  sub_account: str | None = None,
  is_freeze: str | None = None,
  page: int | None = None,
  limit: int | None = None,
  timestamp: Timestamp | None = None,
  recv_window: int | None = None,
  validate: bool | None = None
) -> SubAccountsResponse:
  """Returns sub-account records visible to the signed master account.

  Args:
    sub_account: Optional sub-account name filter.
    is_freeze: Optional freeze-state filter, expressed as true or false.
    page: Result page number. Defaults to 1.
    limit: Maximum records to return. Defaults to 10 and may not exceed 200.
    timestamp: Signed request timestamp in milliseconds.
    recv_window: Optional signed-request validity window in milliseconds.
    validate: Validation override for this request.

  Returns:
    The validated endpoint response.

  References:
    - [MEXC API docs](https://mexcdevelop.github.io/apidocs/spot_v3_en/#query-sub-account-list-for-master-account)
  """
  if timestamp is None:
    timestamp = ts.now()
  params = {}
  if sub_account is not None:
    params['subAccount'] = sub_account
  if is_freeze is not None:
    params['isFreeze'] = is_freeze
  if page is not None:
    params['page'] = page
  if limit is not None:
    params['limit'] = limit
  if timestamp is not None:
    params['timestamp'] = ts.dump_ms(timestamp)
  if recv_window is not None:
    params['recvWindow'] = recv_window
  r = await self.signed_request('GET', '/api/v3/sub-account/list', params=params)
  return self.output(r.text, adapter, validate)

list_paged

Yield pages from list until the response reports the final page.

Source code in pkg/src/mexc/spot/sub_accounts/list.py
async def list_paged(self, *, sub_account: str | None = None, is_freeze: str | None = None, limit: int | None = None, timestamp: Timestamp | None = None, recv_window: int | None = None, max_pages: int | None = None, validate: bool | None = None) -> AsyncIterator[SubAccountsResponse]:
  """Yield pages from `list` until the response reports the final page."""
  page = 1
  while True:
    response = await self.list(sub_account=sub_account, is_freeze=is_freeze, limit=limit, timestamp=timestamp, recv_window=recv_window, page=page, validate=validate)
    yield response
    if max_pages is not None and page >= max_pages:
      break
    data = response.get('data') if isinstance(response, dict) else None
    total = None
    if isinstance(data, dict):
      total = data.get('totalPage') or data.get('totalPageNum')
    if total is None and isinstance(response, dict):
      total = response.get('totalPage') or response.get('totalPageNum')
    if total is None:
      if data == [] or response == []:
        break
      if max_pages is None:
        break
      page += 1
      continue
    if total is None or page >= total:
      break
    page += 1

transfer

Transfers an asset between the master account and a sub-account.

Parameters:

Name Type Description Default
from_account str | None

Source account name. Defaults to the master account when omitted.

None
to_account str | None

Destination account name. Defaults to the master account when omitted.

None
from_account_type str

Source account type, documented as SPOT or FUTURES.

required
to_account_type str

Destination account type, documented as SPOT or FUTURES.

required
asset str

Asset symbol to transfer.

required
amount str

Amount of the asset to transfer.

required
timestamp Timestamp | None

Signed request timestamp in milliseconds.

None
validate bool | None

Validation override for this request.

None

Returns:

Type Description
TransferResponse

The validated endpoint response.

References
Source code in pkg/src/mexc/spot/sub_accounts/transfer.py
async def transfer(
  self,
  *,
  from_account: str | None = None,
  to_account: str | None = None,
  from_account_type: str,
  to_account_type: str,
  asset: str,
  amount: str,
  timestamp: Timestamp | None = None,
  validate: bool | None = None
) -> TransferResponse:
  """Transfers an asset between the master account and a sub-account.

  Args:
    from_account: Source account name. Defaults to the master account when omitted.
    to_account: Destination account name. Defaults to the master account when omitted.
    from_account_type: Source account type, documented as SPOT or FUTURES.
    to_account_type: Destination account type, documented as SPOT or FUTURES.
    asset: Asset symbol to transfer.
    amount: Amount of the asset to transfer.
    timestamp: Signed request timestamp in milliseconds.
    validate: Validation override for this request.

  Returns:
    The validated endpoint response.

  References:
    - [MEXC API docs](https://mexcdevelop.github.io/apidocs/spot_v3_en/#universal-transfer-for-master-account)
  """
  if timestamp is None:
    timestamp = ts.now()
  params = {}
  if from_account is not None:
    params['fromAccount'] = from_account
  if to_account is not None:
    params['toAccount'] = to_account
  if from_account_type is not None:
    params['fromAccountType'] = from_account_type
  if to_account_type is not None:
    params['toAccountType'] = to_account_type
  if asset is not None:
    params['asset'] = asset
  if amount is not None:
    params['amount'] = amount
  if timestamp is not None:
    params['timestamp'] = ts.dump_ms(timestamp)
  r = await self.signed_request('POST', '/api/v3/capital/sub-account/universalTransfer', params=params)
  return self.output(r.text, adapter, validate)

transfer_history

Returns transfer records between the master account and sub-accounts.

Parameters:

Name Type Description Default
from_account str | None

Source account filter. Defaults to the master account when omitted.

None
to_account str | None

Destination account filter. Defaults to the master account when omitted.

None
from_account_type str

Source account type filter, documented as SPOT or FUTURES.

required
to_account_type str

Destination account type filter, documented as SPOT or FUTURES.

required
start_time Timestamp | None

Start time filter in milliseconds.

None
end_time Timestamp | None

End time filter in milliseconds.

None
page int | None

Result page number. Defaults to 1.

None
limit int | None

Maximum records to return. Defaults to 500 and may not exceed 500.

None
timestamp Timestamp | None

Signed request timestamp in milliseconds.

None
validate bool | None

Validation override for this request.

None

Returns:

Type Description
TransferHistoryResponse

The validated endpoint response.

References
Source code in pkg/src/mexc/spot/sub_accounts/transfer_history.py
async def transfer_history(
  self,
  *,
  from_account: str | None = None,
  to_account: str | None = None,
  from_account_type: str,
  to_account_type: str,
  start_time: Timestamp | None = None,
  end_time: Timestamp | None = None,
  page: int | None = None,
  limit: int | None = None,
  timestamp: Timestamp | None = None,
  validate: bool | None = None
) -> TransferHistoryResponse:
  """Returns transfer records between the master account and sub-accounts.

  Args:
    from_account: Source account filter. Defaults to the master account when omitted.
    to_account: Destination account filter. Defaults to the master account when omitted.
    from_account_type: Source account type filter, documented as SPOT or FUTURES.
    to_account_type: Destination account type filter, documented as SPOT or FUTURES.
    start_time: Start time filter in milliseconds.
    end_time: End time filter in milliseconds.
    page: Result page number. Defaults to 1.
    limit: Maximum records to return. Defaults to 500 and may not exceed 500.
    timestamp: Signed request timestamp in milliseconds.
    validate: Validation override for this request.

  Returns:
    The validated endpoint response.

  References:
    - [MEXC API docs](https://mexcdevelop.github.io/apidocs/spot_v3_en/#query-universal-transfer-history-for-master-account)
  """
  if timestamp is None:
    timestamp = ts.now()
  params = {}
  if from_account is not None:
    params['fromAccount'] = from_account
  if to_account is not None:
    params['toAccount'] = to_account
  if from_account_type is not None:
    params['fromAccountType'] = from_account_type
  if to_account_type is not None:
    params['toAccountType'] = to_account_type
  if start_time is not None:
    params['startTime'] = ts.dump_ms(start_time)
  if end_time is not None:
    params['endTime'] = ts.dump_ms(end_time)
  if page is not None:
    params['page'] = page
  if limit is not None:
    params['limit'] = limit
  if timestamp is not None:
    params['timestamp'] = ts.dump_ms(timestamp)
  r = await self.signed_request('GET', '/api/v3/capital/sub-account/universalTransfer', params=params)
  return self.output(r.text, adapter, validate)

transfer_history_paged

Yield pages from transfer_history until the response reports the final page.

Source code in pkg/src/mexc/spot/sub_accounts/transfer_history.py
async def transfer_history_paged(self, *, from_account: str | None = None, to_account: str | None = None, from_account_type: str, to_account_type: str, start_time: Timestamp | None = None, end_time: Timestamp | None = None, limit: int | None = None, timestamp: Timestamp | None = None, max_pages: int | None = None, validate: bool | None = None) -> AsyncIterator[TransferHistoryResponse]:
  """Yield pages from `transfer_history` until the response reports the final page."""
  page = 1
  while True:
    response = await self.transfer_history(from_account=from_account, to_account=to_account, from_account_type=from_account_type, to_account_type=to_account_type, start_time=start_time, end_time=end_time, limit=limit, timestamp=timestamp, page=page, validate=validate)
    yield response
    if max_pages is not None and page >= max_pages:
      break
    data = response.get('data') if isinstance(response, dict) else None
    total = None
    if isinstance(data, dict):
      total = data.get('totalPage') or data.get('totalPageNum')
    if total is None and isinstance(response, dict):
      total = response.get('totalPage') or response.get('totalPageNum')
    if total is None:
      if data == [] or response == []:
        break
      if max_pages is None:
        break
      page += 1
      continue
    if total is None or page >= total:
      break
    page += 1