# Rate limits ## Overview * Nado uses a weight-based rate-limiting system across queries and executes. We limit based on `IP address`, `Wallet address`, and a global `max # of orders per subaccount per market`. * These limits equally apply to both `http` requests and `Websocket` messages. * Limits are applied on a `1 minute` and `10 seconds` basis. ## Limits * IP addresses have a max weight limit of `2400` per minute or `400` every 10 seconds applied only to queries. * Wallet addresses have a max weight limit of `600` per minute or `100` every 10 seconds applied only to executes. * Users can have up to `500` open orders per subaccount per market. * Orders have the following additional limits: * Place orders (with spot leverage): up to `600` per minute or `100` every 10 seconds across all markets. * Place orders (without spot leverage): up to `30` per minute or `5` every 10 seconds across all markets. **Note**: orders without spot leverage are `20x` more expensive to place due to additional health checks needed. * Order cancellations: up to `600` per minute or `100` every 10 seconds. ## Query Weights Queries are rate-limited based on IP. The following weights are applied per query: * [**Status**](https://docs.nado.xyz/developer-resources/api/gateway/queries/status): `IP weight = 1` * [**Contracts**](https://docs.nado.xyz/developer-resources/api/gateway/queries/contracts): `IP weight = 1` * [**Nonces**](https://docs.nado.xyz/developer-resources/api/gateway/queries/nonces): `IP weight = 2` * [**Order**](https://docs.nado.xyz/developer-resources/api/gateway/queries/order)**:** `IP weight = 1` * [**Orders**](https://docs.nado.xyz/developer-resources/api/gateway/queries/orders): `IP weight = 2 * product_ids.length` * [**Subaccount Info**](https://docs.nado.xyz/developer-resources/api/gateway/queries/subaccount-info): `IP weight = 2` (or `10` with `txns`, or `15` with `txns` + `pre_state="true"`) * [**Isolated Positions**](https://docs.nado.xyz/developer-resources/api/gateway/queries/isolated-positions): `IP weight = 10` * [**Market Liquidity**](https://docs.nado.xyz/developer-resources/api/gateway/queries/market-liquidity): `IP weight = 1` * [**Symbols**](https://docs.nado.xyz/developer-resources/api/gateway/queries/symbols): `IP weight = 2` * [**All Products**](https://docs.nado.xyz/developer-resources/api/gateway/queries/all-products): `IP weight = 5` * [**Edge All Products**](https://docs.nado.xyz/developer-resources/api/gateway/queries/edge-all-products): `IP weight = 5` * [**Market Prices**](https://docs.nado.xyz/developer-resources/api/gateway/queries/market-prices)**:** `IP weight = product_ids.length` * [**Max Order Size**](https://docs.nado.xyz/developer-resources/api/gateway/queries/max-order-size)**:** `IP weight = 5` * [**Max Withdrawable**](https://docs.nado.xyz/developer-resources/api/gateway/queries/max-withdrawable)**:** `IP weight = 5` * [**Max NLP Mintable**](https://docs.nado.xyz/developer-resources/api/gateway/queries/max-nlp-mintable)**:** `IP weight = 20` * [**Max NLP Burnable**](https://docs.nado.xyz/developer-resources/api/gateway/queries/max-nlp-burnable)**:** `IP weight = 20` * [**NLP Pool Info**](https://docs.nado.xyz/developer-resources/api/gateway/queries/nlp-pool-info)**:** `IP weight = 20` * [**NLP Locked Balances**](https://docs.nado.xyz/developer-resources/api/gateway/queries/nlp-locked-balances)**:** `IP weight = 20` * [**Health Groups**](https://docs.nado.xyz/developer-resources/api/gateway/queries/health-groups)**:** `IP weight = 2` * [**Linked Signer**](https://docs.nado.xyz/developer-resources/api/gateway/queries/linked-signer)**:** `IP weight = 5` * [**Insurance**](https://docs.nado.xyz/developer-resources/api/gateway/queries/insurance): `IP weight = 2` * [**Fee Rates**](https://docs.nado.xyz/developer-resources/api/gateway/queries/fee-rates)**:** `IP weight = 2` * [**Assets**](https://docs.nado.xyz/developer-resources/api/v2/assets): `IP weight = 2` * [**Orderbook**](https://docs.nado.xyz/developer-resources/api/v2/orderbook): `IP weight = 1` ## Archive (indexer) Weights * Archive (indexer) queries are rate-limited based on IP. * IP addresses have a max weight limit of `2400` per minute or `400` every 10 seconds. The following weights are applied per query: * [**Orders**](https://docs.nado.xyz/developer-resources/api/archive-indexer/orders)**:** `IP Weight = 2 + (limit * subaccounts.length / 20)`; where `limit` and `subaccounts` are query params. * [**Matches**](https://docs.nado.xyz/developer-resources/api/archive-indexer/matches)**:** `IP Weight = 2 + (limit * subaccounts.length / 10)`; where `limit` and `subaccounts` are query params. * [**Events**](https://docs.nado.xyz/developer-resources/api/archive-indexer/events)**:** `IP Weight = 2 + (limit * subaccounts.length / 10)`; where `limit` and `subaccounts` are query params. * [**Candlesticks**](https://docs.nado.xyz/developer-resources/api/archive-indexer/candlesticks)**:** `IP Weight = 1 + limit / 20`; where `limit` is a query param. * [**Edge Candlesticks**](https://docs.nado.xyz/developer-resources/api/archive-indexer/edge-candlesticks): `IP Weight = 1 + limit / 20`; where `limit` is a query param. * [**Product Snapshots**](https://docs.nado.xyz/developer-resources/api/archive-indexer/product-snapshots)**:** `IP Weight = 10` for single `products` query, or `10 * timestamps.length` for multiple `product_snapshots` query with max\_time parameter * [**Funding Rate**](https://docs.nado.xyz/developer-resources/api/archive-indexer/funding-rate)**:** `IP Weight = 2` * [**Interest & funding payments**](https://docs.nado.xyz/developer-resources/api/archive-indexer/interest-and-funding-payments)**:** `IP Weight = 5` * [**Oracle Price**](https://docs.nado.xyz/developer-resources/api/archive-indexer/oracle-price)**:** `IP Weight = 2` * [**Oracle Snapshots**](https://docs.nado.xyz/developer-resources/api/archive-indexer/oracle-snapshots): `IP Weight = max((snapshot_count * product_ids.length / 100), 2)`; where snapshot\_count is `interval.count.min(500)` * [**Perp Prices**](https://docs.nado.xyz/developer-resources/api/archive-indexer/perp-prices)**:** `IP Weight = 2` (includes both single `price` and multiple `perp_prices` queries) * [**Market Snapshots**](https://docs.nado.xyz/developer-resources/api/archive-indexer/market-snapshots)**:** `IP Weight = max((snapshot_count * product_ids.length / 100), 2)`; where snapshot\_count is `interval.count.min(500)` * [**Edge Market Snapshots**](https://docs.nado.xyz/developer-resources/api/archive-indexer/edge-market-snapshots): `IP weight = (interval.count.min(500) / 20) + (interval.count.clamp(2, 20) * 2)` * [**Subaccounts**](https://docs.nado.xyz/developer-resources/api/archive-indexer/subaccounts)**:** `IP Weight = 2` * [**Subaccount Snapshots**](https://docs.nado.xyz/developer-resources/api/archive-indexer/subaccount-snapshots): `IP Weight = 2 + (limit * subaccounts.length / 10)`; where `limit` and `subaccounts` are query params. * [**Linked Signers**](https://docs.nado.xyz/developer-resources/api/archive-indexer/linked-signers): `IP Weight = 2` * [**Linked Signer Rate Limit**](https://docs.nado.xyz/developer-resources/api/archive-indexer/linked-signer-rate-limit)**:** `IP Weight = 2` * [**Isolated Subaccounts**](https://docs.nado.xyz/developer-resources/api/archive-indexer/isolated-subaccounts): `IP Weight = 2` * [**Signatures**](https://docs.nado.xyz/developer-resources/api/archive-indexer/signatures): `IP Weight = 2 + len(digests) / 10`; where `digests` is a query param. * [**Fast Withdrawal Signature**](https://docs.nado.xyz/developer-resources/api/archive-indexer/fast-withdrawal-signature): `IP Weight = 10` * [**NLP Funding Payments**](https://docs.nado.xyz/developer-resources/api/archive-indexer/nlp-funding-payments): `IP Weight = 5` * [**NLP Interest Payments**](https://docs.nado.xyz/developer-resources/api/archive-indexer/nlp-interest-payments): `IP Weight = 5` * [**NLP Snapshots**](https://docs.nado.xyz/developer-resources/api/archive-indexer/nlp-snapshots): `IP Weight = limit.min(500) / 100`; where `limit` is a query param. * [**Tx Hashes**](https://docs.nado.xyz/developer-resources/api/archive-indexer/tx-hashes): `IP Weight = idxs.length * 2`; where `idxs` is an array of submission indices (max 100). * [**Liquidation Feed**](https://docs.nado.xyz/developer-resources/api/archive-indexer/liquidation-feed)**:** `IP Weight = 2` * [**Sequencer Backlog**](https://docs.nado.xyz/developer-resources/api/archive-indexer/sequencer-backlog): `IP Weight = 1` * [**Direct Deposit Address**](https://docs.nado.xyz/developer-resources/api/archive-indexer/direct-deposit-address): `IP Weight = 10` * [**Quote Price**](https://docs.nado.xyz/developer-resources/api/archive-indexer/quote-price): `IP Weight = 2` * [**Ink Airdrop**](https://docs.nado.xyz/developer-resources/api/archive-indexer/ink-airdrop): `IP Weight = 2` ## Execute Weights Executes are rate-limited based on Wallet address. The following weights are applied per execute: * [**Place order**](https://docs.nado.xyz/developer-resources/api/gateway/executes/place-order)**:** * With spot leverage: `Wallet weight = 1` * Without spot leverage: `Wallet weight = 20` * [**Place orders**](https://docs.nado.xyz/developer-resources/api/gateway/executes/place-orders)**:** * With spot leverage: `Wallet weight = 1 per order` * Without spot leverage: `Wallet weight = 20 per order` * **Note**: 50ms processing penalty per request * [**Cancel orders**](https://docs.nado.xyz/developer-resources/api/gateway/executes/cancel-orders)**:** * When no **digests** are provided: `Wallet weight = 1` * When **digests** are provided: `Wallet weight = total digests` * [**Cancel Product Orders**](https://docs.nado.xyz/developer-resources/api/gateway/executes/cancel-product-orders)**:** * When no **productIds** are provided**:** `Wallet weight = 50` * When **productIds** are provided: `Wallet weight = 5 * total productIds` * [**Cancel And Place**](https://docs.nado.xyz/developer-resources/api/gateway/executes/cancel-and-place): * The sum of [Cancel orders](https://docs.nado.xyz/developer-resources/api/gateway/executes/cancel-orders) + [Place order](https://docs.nado.xyz/developer-resources/api/gateway/executes/place-order) limits * [**Withdraw Collateral**](https://docs.nado.xyz/developer-resources/api/gateway/executes/withdraw-collateral)**:** * With spot leverage: `Wallet weight = 10` * Without spot leverage: `Wallet weight = 20` * [**Liquidate Subaccount**](https://docs.nado.xyz/developer-resources/api/gateway/executes/liquidate-subaccount): `Wallet weight = 20` * [**Mint NLP**](https://docs.nado.xyz/developer-resources/api/gateway/executes/mint-nlp): `Wallet weight = 10` * [**Burn NLP**](https://docs.nado.xyz/developer-resources/api/gateway/executes/burn-nlp): `Wallet weight = 10` * [**Link Signer**](https://docs.nado.xyz/developer-resources/api/gateway/executes/link-signer): `Wallet weight = 30` * Can only perform a max of 50 link signer requests every 7 days per subaccount. * [**Transfer Quote:**](https://docs.nado.xyz/developer-resources/api/gateway/executes/transfer-quote) `Wallet weight = 10` * Can only transfer to a max of 5 new recipients within 24hrs. ## Trigger Service Limits The trigger service has additional limits specific to conditional orders: * **Pending trigger orders**: Max of `25` pending trigger orders per product per subaccount * **TWAP orders**: Must use IOC execution type and cannot be combined with isolated margin