---
title: "Archive a sub-account"
method: DELETE
path: "/account/subaccounts/{address}"
tags: ["Account"]
---

# Archive a sub-account

`DELETE /account/subaccounts/{address}`

## Request

- Base URL: `https://api.prod.paradex.trade/v1`
- URL: `https://api.prod.paradex.trade/v1/account/subaccounts/{address}`
- Auth: API key in header `Authorization`
- TypeScript: <https://skmtc.dev/tradeparadex/apis/paradex-rest-api-2/docs/account/subaccounts/:address/delete.ts> (a function with typed inputs; its response is checked against the schema)

Archives one of the authenticated main account's sub-accounts.

Archiving only marks the sub-account as archived so clients can hide it:
nothing is deleted, its keys keep working and its on-chain account is
untouched. `GET /account/subaccounts` keeps listing it, with `archived_at`
set. Only a session authenticated with the main account's own key is
accepted.

`address` must be a sub-account onboarded under the authenticated account,
matched regardless of case and leading zeros; any other address answers
`404 ACCOUNT_NOT_FOUND`. Only an account of kind `subaccount` can be archived:
an isolated or vault account answers `400 INVALID_REQUEST_PARAMETER`.

The sub-account must hold nothing: its account value and total collateral
must both be zero, every token balance must have a size of zero (a token
with no price adds nothing to the account value), it must hold no shares of
any vault, and it must have no open position and no open order (stop orders
included). Otherwise the request is refused with `400 SUBACCOUNT_HAS_FUNDS`,
whose message says which. When any of these cannot be read, the request
fails rather than archiving a sub-account that may still hold something.

An archived sub-account frees its place in the main account's sub-account
limit (`SUBACCOUNTS_LIMIT_EXCEEDED` at onboarding), but archived sub-accounts
still count towards a total of twice that limit.

Archiving is idempotent: archiving a sub-account already archived answers
`200` with its first `archived_at`, without checking its funds again.

Responds with the archived sub-account; `archived_at` is in milliseconds
since epoch.

## Path parameters

- `address` string, required

## Response `200`

OK

- ResponsesAccountInfoResponse
  - `account` string: Starknet address of the account
  - `archived_at` integer: Time the main account archived this sub-account, in unix milliseconds; absent when not archived
  - `created_at` integer: Account creation time
  - `derivation_path` string: Account derivation path used to derive the account, if a sub-account
  - `fees` ResponsesFees
    - `commission_rate` string: deprecated, always zero
    - `dated_option_maker_rate` string
    - `dated_option_taker_rate` string
    - `discount_rate` string: deprecated, always zero
    - `maker_rate` string
    - `perp_option_maker_rate` string
    - `perp_option_taker_rate` string
    - `spot_maker_rate` string
    - `spot_taker_rate` string
    - `taker_rate` string
  - `has_ecosystem_nft` boolean: True if account owns an ecosystem NFT (Money Badgers / ShizoPunk) — qualifies for the lower retail tier thresholds
  - `isolated_market` string: Isolated market for the account
  - `kind` '' | 'main' | 'subaccount' | 'vault_operator' | 'vault_sub_operator'
  - `parent_account` string: Starknet address of the parent account
  - `public_key` string: Starknet public key
  - `username` string: Username of the account
  - `volume_tiers` object: Volume tier info by kind

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Requires the account's main key
- `404`: Not Found

## Changes

- **2026-11-03** `9769e4cd455a`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/tradeparadex/apis/paradex-rest-api-2/changes/account/subaccounts/:address/delete.md)

---

[API](https://skmtc.dev/tradeparadex/apis/paradex-rest-api-2.md) - [All operations](https://skmtc.dev/tradeparadex/apis/paradex-rest-api-2/llms.txt) - [OpenAPI document](https://skmtc.dev/tradeparadex/apis/paradex-rest-api-2/revisions/9769e4cd455a?raw)
