Overview

Details about how to obtain access tokens using OAuth 2.0

Fetch positions, balances and other account related details.

Place equity and complex option trades including advanced orders.

Fetch quotes, chains and historical data via REST and streaming APIs.

Stream market data and account events in real-time.

Create and update custom watchlists.

Examples, response types, property details and explanations.

Rate Limiting

We implement rate limiting to make sure the API is responsive for all customers. The rate limits are set in a way to provide substantial functionality while trying to stifle abuse. Most times, a rate limit can be subverted by implementing a different API call or leveraging other API features (i.e. instead of polling for quotes, leverage the streaming API).

How Rate Limits Work

Two pieces of information to understand as it pertains to our limits:

  • Interval - we aggregate limits over 1 minute intervals starting with the first request and reset 1 minute later
  • Limit - this can vary as outlined below, but we keep ours to 60 - 120 requests

For example: With a rate limit of 120 requests per minute, if you make a /quotes request every second for a minute, you would still have 60 requests left in that minute before hitting the limit.

Should you be concerned about rate-limits?

Probably not. Polling for data, while not the best solution, is reasonably supported by our APIs. The limits exist with enough headroom to get up-to-date data and still have room to make other requests. The best way to know if your application will hit the limits is to build it and scale back.

Limits

Each limit is enforced by the minute and on a per-access-token basis. As such, the limits are enforced on per app and per user basis.

  • Standard
    • This includes resources in /accounts, /watchlists, /users and /orders.
    • This does NOT include placing orders.
    • Production: 120 requests per minute.
    • Sandbox: 60 request per minute.
  • Market Data
    • This includes resources in /markets.
    • Production: 120 requests per minute.
    • Sandbox: 60 request per minute.
  • Trading
    • This includes all resources in the “trade” scope.
    • Production: 60 request per minute.
    • Sandbox: 60 request per minute.

Headers

With each request that has a rate limit applied a series of headers will be sent in the response. These headers should help you to gauge your usage and when to throttle your application. For example:

X-Ratelimit-Allowed: 120
X-Ratelimit-Used: 1
X-Ratelimit-Available: 119
X-Ratelimit-Expiry: 1369168800001