# Rate Limits

This page lists the rate limits for each API endpoint in both Sandbox and Production environments.

## Rate Limit Dimensions

| Dimension | Description |
|-----------|-------------|
| Per `app_key` | Most endpoints are rate-limited at the application level. All requests sharing the same `app_key` count toward a single quota. |
| Per User | Connect API endpoints are rate-limited per authorized user (`account_id`). |
| Per Endpoint | Each endpoint has its own independent rate limit counter. Hitting the limit on one endpoint does not affect others. |

## Rate Limit Exceeded Behavior

When a rate limit is exceeded:
- The API returns HTTP status **429 Too Many Requests**.
- The request is rejected — no partial processing occurs.

:::caution
Repeatedly exceeding rate limits may result in temporary IP-level blocking. Ensure your application respects the limits and implements proper retry logic.
:::

## Rate Limit Format

Limits are expressed as `N/Ts` where `N` is the maximum number of requests and `T` is the time window in seconds. For example, `10/30s` means 10 requests per 30-second window.

## Authentication

### Server-To-Server

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Create Token | POST | `/auth/tokens/create` | 10/10s | 10/10s |
| Check Token | POST | `/auth/tokens/check` | 10/10s | 10/10s |

### Client-To-Server

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Create Client Token | POST | `/auth/client-tokens/create` | 600/60s | 600/60s |
| Refresh Client Token | POST | `/auth/client-tokens/refresh` | 600/60s | 600/60s |

---

## Market Data API

### Display Solution

#### Stock — Screener

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Top Active | GET | `/market-data/screeners/top-actives/list` | 30/60s | 60/60s |
| Stock Top Gainers/Losers Rank | GET | `/market-data/screeners/gainers-losers/list` | 30/60s | 60/60s |

#### Stock — Quotes

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Snapshot | POST | `/market-data/stocks/snapshots/list` | 30/60s | 60/60s |
| Historical Bars | POST | `/market-data/stocks/bars/list` | 30/60s | 60/60s |
| Historical Bars (single symbol) | GET | `/market-data/stocks/bars/get` | 30/60s | 60/60s |
| Tick | GET | `/market-data/stocks/ticks/list` | 30/60s | 60/60s |
| Quotes Depth | GET | `/market-data/stocks/depths/list` | 30/60s | 60/60s |

#### Stock — Corporate Actions

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Corporate Actions By Market | GET | `/market-data/instruments/stocks/corporate-actions/list-by-market` | 30/60s | 60/60s |
| Corporate Actions | GET | `/market-data/instruments/stocks/corporate-actions/list` | 30/60s | 60/60s |

#### Stock — Instrument

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Get Instruments | POST | `/market-data/instruments/stocks/profiles/list` | 30/60s | 60/60s |
| Batch Get Logos | POST | `/market-data/fundamentals/logos/list` | 30/60s | 60/60s |
| Company Profile | GET | `/market-data/fundamentals/company-profiles/get` | 30/60s | 60/60s |
| Analyst Target Price | GET | `/market-data/fundamentals/analysis/target-prices/get` | 30/60s | 60/60s |
| Analyst Rating | GET | `/market-data/fundamentals/analysis/ratings/get` | 30/60s | 60/60s |

#### Event Contract — Instrument

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Sports Filter | GET | `/market-data/instruments/event-contracts/sports-filters/list` | 30/60s | 60/60s |
| Series List | GET | `/market-data/instruments/event-contracts/series/list` | 30/60s | 60/60s |
| Milestones | GET | `/market-data/instruments/event-contracts/milestones/list` | 30/60s | 60/60s |
| Event List | GET | `/market-data/instruments/event-contracts/events/list` | 30/60s | 60/60s |
| All Tags | GET | `/market-data/instruments/event-contracts/categories/tags/list` | 30/60s | 60/60s |

#### Event Contract — Quotes

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Event Contract Market Snapshot | GET | `/market-data/event-contracts/markets/snapshots/list` | 30/60s | 60/60s |
| Event Contract Market Depth | GET | `/market-data/event-contracts/markets/depths/list` | 30/60s | 60/60s |
| Event Contract Bars by Symbols | GET | `/market-data/event-contracts/markets/bars/list` | 30/60s | 60/60s |
| Event Contract Bars by Event | GET | `/market-data/event-contracts/markets/bars/list-by-event` | 30/60s | 60/60s |
| Event Contract Live Data | GET | `/market-data/event-contracts/live-data/get` | 30/60s | 60/60s |
| Event Contract Game Stats | GET | `/market-data/event-contracts/game-stats/get` | 30/60s | 60/60s |

#### Streaming (Display)

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Subscribe | POST | `/market-data/streaming/subscribe` | 30/60s | 60/60s |
| Unsubscribe | POST | `/market-data/streaming/unsubscribe` | 30/60s | 60/60s |

### Non-Display Solution

#### Stock

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Tick | GET | `/market-data/stocks/ticks/list` | 30/60s | 60/60s |
| Snapshot | GET | `/market-data/stocks/snapshots/list` | 30/60s | 60/60s |
| Quotes | GET | `/market-data/stocks/depths/list` | 30/60s | 60/60s |
| Footprint | GET | `/market-data/stocks/footprints/list` | 30/60s | 60/60s |
| Historical Bars | POST | `/market-data/stocks/bars/list` | 30/60s | 60/60s |
| NOII Bars | GET | `/market-data/stocks/noii-bars/list` | 30/60s | 60/60s |
| NOII Snapshot | GET | `/market-data/stocks/noii-snapshots/list` | 30/60s | 60/60s |

#### Options

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Tick | GET | `/market-data/options/ticks/list` | 30/60s | 60/60s |
| Snapshot | GET | `/market-data/options/snapshots/list` | 30/60s | 60/60s |
| Historical Bars | GET | `/market-data/options/bars/list` | 30/60s | 60/60s |

#### Futures

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Tick | GET | `/market-data/futures/ticks/list` | 30/60s | 60/60s |
| Snapshot | GET | `/market-data/futures/snapshots/list` | 30/60s | 60/60s |
| Footprint | GET | `/market-data/futures/footprints/list` | 30/60s | 60/60s |
| Quotes | GET | `/market-data/futures/depths/list` | 30/60s | 60/60s |
| Historical Bars | GET | `/market-data/futures/bars/list` | 30/60s | 60/60s |

#### Crypto

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Snapshot | GET | `/market-data/crypto/snapshots/list` | 30/60s | 60/60s |
| Historical Bars | GET | `/market-data/crypto/bars/list` | 30/60s | 60/60s |

#### Event

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Snapshot | GET | `/market-data/event-contracts/snapshots/list` | 30/60s | 60/60s |
| Depth | GET | `/market-data/event-contracts/depths/list` | 30/60s | 60/60s |
| Bars | GET | `/market-data/event-contracts/bars/list` | 30/60s | 60/60s |
| Tick | GET | `/market-data/event-contracts/ticks/list` | 30/60s | 60/60s |

#### Streaming (Non-Display)

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Subscribe | POST | `/market-data/streaming/subscribe` | 30/60s | 60/60s |
| Unsubscribe | POST | `/market-data/streaming/unsubscribe` | 30/60s | 60/60s |

#### News

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| News Summary | POST | `/market-data/news/summaries/get` | 30/60s | 60/60s |

#### Screeners

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Stock Top Gainers/Losers Rank | GET | `/market-data/screeners/gainers-losers/list` | 30/60s | 60/60s |
| Top Active | GET | `/market-data/screeners/top-actives/list` | 30/60s | 60/60s |
| Market Sectors | GET | `/market-data/screeners/market-sectors/list` | 30/60s | 60/60s |
| Market Sectors Detail | GET | `/market-data/screeners/market-sectors/get` | 30/60s | 60/60s |
| High Dividend Rank | GET | `/market-data/screeners/high-dividend-ranks/list` | 30/60s | 60/60s |
| 52 Week High/Low | GET | `/market-data/screeners/week52-high-low/list` | 30/60s | 60/60s |

#### Watchlist

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Get Watchlist | GET | `/market-data/watchlists/list` | 30/60s | 60/60s |
| Create Watchlist | POST | `/market-data/watchlists/create` | 30/60s | 60/60s |
| Update Watchlist | POST | `/market-data/watchlists/update` | 30/60s | 60/60s |
| Delete Watchlist | POST | `/market-data/watchlists/delete` | 30/60s | 60/60s |
| Get Watchlist Instruments | GET | `/market-data/watchlists/instruments/list` | 30/60s | 60/60s |
| Add Instruments to Watchlist | POST | `/market-data/watchlists/instruments/add` | 30/60s | 60/60s |
| Remove Instruments from Watchlist | POST | `/market-data/watchlists/instruments/remove` | 30/60s | 60/60s |
| Update Instruments Sort Order | POST | `/market-data/watchlists/instruments/update` | 30/60s | 60/60s |

#### Fundamentals

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Company Profile | GET | `/market-data/fundamentals/company-profiles/get` | 30/60s | 60/60s |
| Analyst Target Price | GET | `/market-data/fundamentals/analysis/target-prices/get` | 30/60s | 60/60s |
| Analyst Rating | GET | `/market-data/fundamentals/analysis/ratings/get` | 30/60s | 60/60s |
| Forecast EPS | GET | `/market-data/fundamentals/forecast-eps/get` | 30/60s | 60/60s |
| Filings | GET | `/market-data/fundamentals/filings/list` | 30/60s | 60/60s |
| Earnings Calendar | GET | `/market-data/fundamentals/earnings-calendars/list` | 30/60s | 60/60s |
| Dividend Calendar | GET | `/market-data/fundamentals/dividend-calendars/list` | 30/60s | 60/60s |
| Capital Flow | GET | `/market-data/fundamentals/capital-flows/get` | 30/60s | 60/60s |
| Industry Comparison | GET | `/market-data/fundamentals/industry-comparisons/get` | 30/60s | 60/60s |
| Indicators | GET | `/market-data/fundamentals/indicators/get` | 30/60s | 60/60s |
| Income | GET | `/market-data/fundamentals/income-statements/get` | 30/60s | 60/60s |
| Cashflow | GET | `/market-data/fundamentals/cash-flows/get` | 30/60s | 60/60s |
| Balancesheet | GET | `/market-data/fundamentals/balance-sheets/get` | 30/60s | 60/60s |
| Alert | GET | `/market-data/fundamentals/financial-alerts/get` | 30/60s | 60/60s |
| Fund Brief | GET | `/market-data/fundamentals/fund-brief/get` | 30/60s | 60/60s |
| Fund Performance | GET | `/market-data/fundamentals/fund-performances/get` | 30/60s | 60/60s |
| Fund Net Value | GET | `/market-data/fundamentals/fund-net-values/get` | 30/60s | 60/60s |
| Fund Holdings | GET | `/market-data/fundamentals/fund-holdings/get` | 30/60s | 60/60s |
| Fund Dividends | GET | `/market-data/fundamentals/fund-dividends/get` | 30/60s | 60/60s |
| Fund Rating | GET | `/market-data/fundamentals/fund-ratings/get` | 30/60s | 60/60s |
| Fund Splits | GET | `/market-data/fundamentals/fund-splits/get` | 30/60s | 60/60s |
| Fund Files | GET | `/market-data/fundamentals/fund-files/get` | 30/60s | 60/60s |
| Fund Allocation | GET | `/market-data/fundamentals/fund-allocations/get` | 30/60s | 60/60s |

---

## Trading API

### Instruments

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Get Stock Instrument | GET | `/trading/instruments/stocks/profiles/list` | 30/60s | 60/60s |
| Get Crypto Instrument | GET | `/trading/instruments/crypto/profiles/list` | 30/60s | 60/60s |
| Get Futures Instrument | GET | `/trading/instruments/futures/contracts/list` | 30/60s | 60/60s |
| Get Futures Product Codes | GET | `/trading/instruments/futures/product-codes/list` | 30/60s | 60/60s |
| Get Futures Products Class | GET | `/trading/instruments/futures/product-classes/list` | 30/60s | 60/60s |
| Get Event Contract Categories | GET | `/trading/instruments/event-contracts/categories/list` | 30/60s | 60/60s |
| Get Event Contract Series | GET | `/trading/instruments/event-contracts/series/list` | 30/60s | 60/60s |
| Get Event Contract Events | GET | `/trading/instruments/event-contracts/events/list` | 30/60s | 60/60s |
| Get Event Contract Instrument | GET | `/trading/instruments/event-contracts/markets/list` | 30/60s | 60/60s |
| Get Option Contracts | GET | `/trading/instruments/options/contracts/list` | 30/60s | 60/60s |

### Accounts

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Account List | GET | `/trading/accounts/list` | 30/60s | 10/30s |

### Assets

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Account Balance | GET | `/trading/assets/balances/get` | 30/60s | 2/2s |
| Account Positions | GET | `/trading/assets/positions/list` | 30/60s | 2/2s |

### Activities

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Get Account Cash Activities By Type | GET | `/trading/activities/cash-activities/list` | 30/60s | 600/60s |

### Orders — Trading

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Preview Order | POST | `/trading/orders/preview` | 30/60s | 150/10s |
| Place Order | POST | `/trading/orders/place` | 30/60s | 600/60s |
| Batch Place Orders | POST | `/trading/orders/batch-place` | 30/60s | 150/60s |
| Replace Order | POST | `/trading/orders/replace` | 30/60s | 600/60s |
| Cancel Order | POST | `/trading/orders/cancel` | 30/60s | 600/60s |

### Orders — Query

| Endpoint | Method | Path | Sandbox | Production |
|----------|--------|------|---------|------------|
| Order History | GET | `/trading/orders/historical-orders/list` | 30/60s | 2/2s |
| Open Orders | GET | `/trading/orders/open-orders/list` | 30/60s | 2/2s |
| Order Detail | GET | `/trading/orders/get` | 30/60s | 2/2s |

---

## Notes

- Sandbox limits are typically lower than Production to encourage efficient integration patterns during development.
- Contact your account manager if your use case requires higher limits.
