> For the complete documentation index, see [llms.txt](https://docs.lighter.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.lighter.xyz/developers/reference/account-types.md).

# Account Types

{% tabs %}
{% tab title="Lighter" %}
{% hint style="info" %}
Binary options fees use separate volume and LIT staking tiers. Fetch them through [feeTiers](https://docs.lighter.xyz/api/binary-options) with `filter=bo`; read the account's `bo_fee_rate` from [accountLimits](https://docs.lighter.xyz/api/account). The trading-fee tables below do not determine binary options fees. See [Binary options: Trading and fees](/developers/binary-options/trading-and-fees.md#fees).
{% endhint %}

Lighter API users can operate under a Standard, Plus or Premium/Advanced account.

#### Premium/Advanced Account (Opt-in) -- Suitable for HFT, the lowest latency on Lighter. Part of [volume quota program](/developers/reference/volume-quota.md).

Latency for maker & cancel orders is 0ms. Fee credits also count as staked LIT for the parameters described in the table.

| Staked LIT | sendTx/sendTxBatch per minute | Maker/Taker Fee Discount | Maker Fee | Taker Fee | Taker Latency | Sub-accounts |
| ---------- | ----------------------------- | ------------------------ | --------- | --------- | ------------- | ------------ |
| 0          | 4000                          |                          | 0.0040%   | 0.0280%   | 140 ms        | 64           |
| 1,000      | 5000                          | 2.5%                     | 0.0039%   | 0.0273%   | 140 ms        | 64           |
| 3,000      | 6000                          | 5%                       | 0.0038%   | 0.0266%   | 140 ms        | 64           |
| 10,000     | 7000                          | 10%                      | 0.0036%   | 0.0252%   | 140 ms        | 64           |
| 30,000     | 8000                          | 15%                      | 0.0034%   | 0.0238%   | 140 ms        | 64           |
| 100,000    | 12000                         | 20%                      | 0.0032%   | 0.0224%   | 140 ms        | 64           |
| 300,000    | 24000                         | 25%                      | 0.0030%   | 0.0210%   | 140 ms        | 64           |
| 500,000    | 72000                         | 30%                      | 0.0028%   | 0.0196%   | 140 ms        | 64           |

#### Plus Account (Opt-in) -- Suitable for latency-insensitive users, looking to get increased rate limits.

Access via the [changeAccountTier](https://docs.lighter.xyz/api/account) endpoint.

| Maker/Taker Fee | Taker Latency | Cancel/Modify Latency | Maker Latency | sendTx/sendTxBatch per minute | Read-only weighted requests per minute | Sub-accounts |
| --------------- | ------------- | --------------------- | ------------- | ----------------------------- | -------------------------------------- | ------------ |
| 0.005%          | 300 ms        | 300 ms                | 0ms           | 4000                          | 24000                                  | 16           |

#### Standard Account (Default) -- Suitable for retail and latency-insensitive traders.

| Maker Fee | Taker Fee | Taker Latency | Cancel/Modify Latency | Maker Latency | Sub-accounts |
| --------- | --------- | ------------- | --------------------- | ------------- | ------------ |
| 0%        | 0%        | 300 ms        | 300 ms                | 0ms           | 4            |

For standard accounts only, TWAP orders charge a 1bps fee.

#### Account Switch

You can change your Account Type (tied to your L1 address) using the [`/changeAccountTier`](https://docs.lighter.xyz/api/account) endpoint.

You may call that endpoint if at least 24 hours have passed since the last call. To upgrade account type, there is no cooldown.

*Python snippet to switch tiers*:

{% code title="Python: switch to Premium/Advanced" %}

```python
import asyncio
import logging
import lighter
import requests

logging.basicConfig(level=logging.DEBUG)

BASE_URL = "https://mainnet.zklighter.elliot.ai"

# You can get the values from the system_setup.py script
# API_KEY_PRIVATE_KEY =
# ACCOUNT_INDEX =
# API_KEY_INDEX =

async def main():
    client = lighter.SignerClient(
        url=BASE_URL,
        account_index=ACCOUNT_INDEX,
        api_private_keys={API_KEY_INDEX: API_KEY_PRIVATE_KEY},
    )

    err = client.check_client()
    if err is not None:
        print(f"CheckClient error: {err}")
        return

    auth, err = client.create_auth_token_with_expiry(
        lighter.SignerClient.DEFAULT_10_MIN_AUTH_EXPIRY, api_key_index=API_KEY_INDEX
    )
    if err is not None:
        print(f"Auth token error: {err}")
        return

    response = requests.post(
        f"{BASE_URL}/api/v1/changeAccountTier",
        data={"account_index": ACCOUNT_INDEX, "new_tier": "premium"},
        headers={"Authorization": auth},
    )
    if response.status_code != 200:
        print(f"Error: {response.text}")
        return
    print(response.json())

if __name__ == "__main__":
    asyncio.run(main())
```

{% endcode %}

{% code title="Python: switch to standard" %}

```python
import asyncio
import logging
import lighter
import requests

logging.basicConfig(level=logging.DEBUG)

BASE_URL = "https://mainnet.zklighter.elliot.ai"

# You can get the values from the system_setup.py script
# API_KEY_PRIVATE_KEY =
# ACCOUNT_INDEX =
# API_KEY_INDEX =

async def main():
    client = lighter.SignerClient(
        url=BASE_URL,
        account_index=ACCOUNT_INDEX,
        api_private_keys={API_KEY_INDEX: API_KEY_PRIVATE_KEY},
    )

    err = client.check_client()
    if err is not None:
        print(f"CheckClient error: {err}")
        return

    auth, err = client.create_auth_token_with_expiry(
        lighter.SignerClient.DEFAULT_10_MIN_AUTH_EXPIRY, api_key_index=API_KEY_INDEX
    )
    if err is not None:
        print(f"Auth token error: {err}")
        return

    response = requests.post(
        f"{BASE_URL}/api/v1/changeAccountTier",
        data={"account_index": ACCOUNT_INDEX, "new_tier": "standard"},
        headers={"Authorization": auth},
    )
    if response.status_code != 200:
        print(f"Error: {response.text}")
        return
    print(response.json())

if __name__ == "__main__":
    asyncio.run(main())
```

{% endcode %}

#### How fees are collected:

In isolated margin, fees are taken from the isolated position itself, but if needed, we automatically transfer from cross margin to keep the position healthy. In cross margin, fees are always deducted directly from the available cross balance.

Sub-accounts share the same tier as the main L1 address on the account.
{% endtab %}

{% tab title="Lighter on Robinhood Chain" %}

#### Premium Account (Opt-in) -- Suitable for HFT, the lowest latency on Lighter. Part of [volume quota program](/developers/reference/volume-quota.md).

Latency for maker & cancel orders is 0ms.

| Last 14D Volume | sendTx/sendTxBatch per minute | Maker/Taker Fee Discount | Maker Fee | Taker Fee | Taker Latency | Latency Improvement | Sub-accounts |
| --------------- | ----------------------------- | ------------------------ | --------- | --------- | ------------- | ------------------- | ------------ |
| `< $1M`         | 4000                          |                          | 0.0120%   | 0.0350%   | 200 ms        |                     | 8            |
| `> $1M`         | 5000                          | 2.5%                     | 0.0117%   | 0.0341%   | 195 ms        | 2.5%                | 8            |
| `> $10M`        | 6000                          | 5%                       | 0.0114%   | 0.0333%   | 190 ms        | 5%                  | 8            |
| `> $20M`        | 7000                          | 10%                      | 0.0108%   | 0.0315%   | 180 ms        | 10%                 | 8            |
| `> $50M`        | 8000                          | 15%                      | 0.0102%   | 0.0298%   | 170 ms        | 15%                 | 8            |
| `> $200M`       | 12000                         | 20%                      | 0.0096%   | 0.0280%   | 160 ms        | 20%                 | 8            |
| `> $500M`       | 24000                         | 30%                      | 0.0084%   | 0.0245%   | 150 ms        | 25%                 | 8            |

#### Plus Account (Opt-in) -- Suitable for latency-insensitive users, looking to get increased rate limits.

Access via the [changeAccountTier](https://docs.lighter.xyz/api/account) endpoint.

| Maker/Taker Fee | Taker Latency | Maker/Cancel Latency | sendTx/sendTxBatch per minute | Read-only weighted requests per minute | Sub-accounts |
| --------------- | ------------- | -------------------- | ----------------------------- | -------------------------------------- | ------------ |
| 0.015%          | 300 ms        | 200 ms               | 8000                          | 120000                                 | 8            |

#### Standard Account (Default) -- Suitable for retail and latency-insensitive traders.

| Maker Fee | Taker Fee | Taker Latency | Maker/Cancel Latency | Sub-accounts |
| --------- | --------- | ------------- | -------------------- | ------------ |
| 0%        | 0%        | 300 ms        | 200 ms               | 8            |

For standard accounts only, TWAP orders charge a 1bps fee.

#### Account Switch

You can change your Account Type (tied to your L1 address) using the [`/changeAccountTier`](https://docs.lighter.xyz/api/account) endpoint.

You may call that endpoint if at least 24 hours have passed since the last call. To upgrade account type, there is no cooldown.

*Python snippet to switch tiers*:

{% code title="Python: switch to premium" %}

```python
import asyncio
import logging
import lighter
import requests

logging.basicConfig(level=logging.DEBUG)

BASE_URL = "https://api.rh.lighter.xyz"

# You can get the values from the system_setup.py script
# API_KEY_PRIVATE_KEY =
# ACCOUNT_INDEX =
# API_KEY_INDEX =

async def main():
    client = lighter.SignerClient(
        url=BASE_URL,
        account_index=ACCOUNT_INDEX,
        api_private_keys={API_KEY_INDEX: API_KEY_PRIVATE_KEY},
    )

    err = client.check_client()
    if err is not None:
        print(f"CheckClient error: {err}")
        return

    auth, err = client.create_auth_token_with_expiry(
        lighter.SignerClient.DEFAULT_10_MIN_AUTH_EXPIRY, api_key_index=API_KEY_INDEX
    )
    if err is not None:
        print(f"Auth token error: {err}")
        return

    response = requests.post(
        f"{BASE_URL}/api/v1/changeAccountTier",
        data={"account_index": ACCOUNT_INDEX, "new_tier": "premium"},
        headers={"Authorization": auth},
    )
    if response.status_code != 200:
        print(f"Error: {response.text}")
        return
    print(response.json())

if __name__ == "__main__":
    asyncio.run(main())
```

{% endcode %}

{% code title="Python: switch to standard" %}

```python
import asyncio
import logging
import lighter
import requests

logging.basicConfig(level=logging.DEBUG)

BASE_URL = "https://api.rh.lighter.xyz"

# You can get the values from the system_setup.py script
# API_KEY_PRIVATE_KEY =
# ACCOUNT_INDEX =
# API_KEY_INDEX =

async def main():
    client = lighter.SignerClient(
        url=BASE_URL,
        account_index=ACCOUNT_INDEX,
        api_private_keys={API_KEY_INDEX: API_KEY_PRIVATE_KEY},
    )

    err = client.check_client()
    if err is not None:
        print(f"CheckClient error: {err}")
        return

    auth, err = client.create_auth_token_with_expiry(
        lighter.SignerClient.DEFAULT_10_MIN_AUTH_EXPIRY, api_key_index=API_KEY_INDEX
    )
    if err is not None:
        print(f"Auth token error: {err}")
        return

    response = requests.post(
        f"{BASE_URL}/api/v1/changeAccountTier",
        data={"account_index": ACCOUNT_INDEX, "new_tier": "standard"},
        headers={"Authorization": auth},
    )
    if response.status_code != 200:
        print(f"Error: {response.text}")
        return
    print(response.json())

if __name__ == "__main__":
    asyncio.run(main())
```

{% endcode %}

#### How fees are collected:

In isolated margin, fees are taken from the isolated position itself, but if needed, we automatically transfer from cross margin to keep the position healthy. In cross margin, fees are always deducted directly from the available cross balance.

Sub-accounts share the same tier as the main L1 address on the account.
{% endtab %}
{% endtabs %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.lighter.xyz/developers/reference/account-types.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
