Broker APIs

Etrade API | How to Get Keys, Use OAuth and Stay Within Limits

FullStack Alpha Editorial Team 22 min read
  • Tested on Live and Paper Accounts
  • Ranked by Score, Never by Commission
  • Fresh AI Trading News
AI Stock Trading Bots
Cover illustration for a guide to the E*TRADE API covering keys, OAuth and limits.
F
FullStack Alpha Editorial Team

The FullStack Alpha research desk tests AI trading bots on paper and live accounts. Reviewed and edited by Jay Rocco, Founder and Editor.

Published: Updated:

By FullStack Alpha Editorial Team | Reviewed by Jay Rocco, Chief Editor

Yes, the Etrade API is real, free to use with an ETRADE brokerage account, and it covers accounts, balances, quotes, option chains and order placement. You get a sandbox key the moment you request it, and a live individual key once you finish ETRADE’s API User Intent Survey and API Developer Agreement. Authentication is OAuth 1.0a with HMAC-SHA1 signatures on every request, and the access token dies at midnight US Eastern time and goes inactive after two hours without a call. E*TRADE does not publish a per-minute rate limit on the pages we checked in 2026, so the limits that bite are the token clock, the 25-symbol quote cap and the agreement’s rule that an unused key can be terminated.

Key insights

  • Two keys, two worlds. Sandbox and production use separate consumer keys, and a sandbox token only works on the sandbox, per E*TRADE’s developer guides.
  • The token clock is the real constraint. Request tokens expire after 5 minutes. Access tokens expire at midnight ET and go inactive after 2 hours of no requests, fixed with the Renew Access Token call.
  • Every order is two calls. You preview an order, then place it; the Place Order API submits “after it has been successfully previewed.”
  • Quotes cap at 25 symbols per call, or 50 with overrideSymbolCount=true. Real-time quotes need the Market Data Agreement; otherwise you get delayed data.
  • Keys can lapse. The API Developer License Agreement ends automatically if you skip the annual attestation, stop being a customer, or the key “is not actively utilized.”

What Can You Do With the Etrade API?

The Etrade API is a REST interface for ETRADE account holders. Per ETRADE’s Getting Started page, a client app can authenticate customers, place, modify and cancel orders, check order status, read balances and positions, retrieve price data for stocks, indexes and options, and receive system messages.

Mockup of the E*TRADE developer portal in teal and blue with callouts for account, order, quote and options chain endpoints.

Here is the module map from the API reference, with the live paths:

ModuleWhat it doesExample path (live)
AccountsList accounts, balances, transactions, portfolioGET /v1/accounts/list
AlertsList, read and delete account alertsGET /v1/user/alerts
MarketQuotes, product lookup, option chains, option expiration datesGET /v1/market/quote/{symbols}
OptionsChains for one underlying, by expiry month and calls, puts or bothGET /v1/market/optionchains?symbol={symbol}
OrderList, preview, place, cancel, change previewed ordersPOST /v1/accounts/{accountIdKey}/orders/preview

Production calls go to https://api.etrade.com/v1/{module}/{endpoint}. Sandbox calls go to https://apisb.etrade.com/v1/{module}/{endpoint}. Most reads are simple GET requests; orders use POST with XML or JSON bodies. Dates and times are US Eastern, and most timestamps in responses are epoch seconds.

What it does not do

It is not a backtesting engine, it does not stream tick data, and it is not built for high-frequency anything. It is a reliable pickup truck: it hauls account data and order flow if you stay inside the lines, and it does not win style points.

Two details shape how you build:

  • Quotes come in batches of 25. The Get Quotes API accepts up to 25 comma-separated symbols, or 50 if you pass overrideSymbolCount=true. Option symbols use a colon format: underlier:year:month:day:optionType:strikePrice.
  • Real-time data is gated. The quote docs say you must sign the Market Data Agreement and use the API through OAuth to get real-time data. Otherwise you receive delayed data.

If you are choosing a broker for a bot before you write a line of code, our comparison of the best API for stock trading puts Alpaca, Tradier and IBKR side by side.

How Do You Get Etrade API Keys Step by Step?

Getting Etrade API keys takes an ETRADE brokerage account, a sandbox key request, and then two short forms for a live key: the API User Intent Survey and the API Developer Agreement. Individual live keys appear on the page as soon as you finish both. Vendor keys appear too, but stay inactive until ETRADE approves you after a demo.

Four-step flow: create developer profile, generate sandbox key, complete API agreement, receive production key.

Step 1: Have an E*TRADE account. E*TRADE says it can be a personal, professional or corporate account. For development you do not need to fund it. Actual trading needs funds.

Step 2: Request a sandbox key. While logged in, use the sandbox key generator linked from the Getting Started page (us.etrade.com/etx/ris/apikey). The key and secret appear on the page right away.

Step 3: Build against the sandbox. Prove your OAuth signing, account calls and order previews against apisb.etrade.com first. More on what the sandbox can and cannot tell you below.

Step 4: Complete the API User Intent Survey. E*TRADE asks you to disclose what you plan to do with API access. This is how it sorts you into an individual or vendor key.

Step 5: Sign the API Developer Agreement. Individual live keys are then “provided immediately in page.”

Step 6: Vendor keys only: book the demo. A vendor key permits access by multiple users. E*TRADE issues it inactive, emails you to schedule a short online demo with its Product and Legal teams, and activates it after approval. Budget time for that if you plan to distribute an app.

Step 7: Sign the user agreements your app needs. The Market Data Agreement is required before the quote API returns data, and the Extended Hours Trading Agreement is required for after-hours orders.

Step 8: Put the annual attestation on your calendar. E*TRADE says developers must return once a year to complete the Market Data Attestation. The license agreement terminates automatically if you do not.

Individual key or vendor key?

Key typeWho it is forHow it activatesLimit
IndividualYour own accounts, personal non-commercial useLive key appears in page after survey and agreementWorks only with the user it was issued to, across that user’s accounts
VendorApps for multiple E*TRADE customersIssued inactive, activated after a demo with Product and LegalMust obtain an End User Acknowledgment from each user

The individual key restriction is strict. E*TRADE’s developer guides say that if any other user tries an individual key, a non-specific error appears instead of the login form and the process halts. Do not build a “share my bot with a friend” setup on an individual key.

Common errors at this stage:

  • A sandbox key pointed at api.etrade.com data URLs, or a production key pointed at apisb
  • Signing with an old secret after you regenerated a key
  • Testing an individual key from a second person’s login
  • Skipping the Market Data Agreement and then wondering why quotes look delayed

How Does Etrade API OAuth Work for a Bot?

The Etrade API uses OAuth 1.0a, and the only supported signature method is HMAC-SHA1. That means every request carries a fresh signature built from your consumer key and secret, the access token and secret, a timestamp and a nonce. If you have only worked with bearer-token APIs, this is the part that will bite.

OAuth 1.0a handshake diagram between a developer app and the E*TRADE server: request token, user authorizes, access token issued, signed requests.

The four-step flow

  1. Get Request Token. GET https://api.etrade.com/oauth/request_token, signed with your consumer key and secret. The oauth_callback header must always be set to oob, whether you use a callback or not. The request token expires after five minutes.
  2. Authorize Application. Send the user to https://us.etrade.com/e/t/etws/authorize?key={consumer_key}&token={request_token}. They log in, see your app’s name and the privileges requested, and approve. E*TRADE shows a verification code, or redirects to your callback URL with oauth_verifier appended.
  3. Get Access Token. GET https://api.etrade.com/oauth/access_token with the request token and the oauth_verifier. You get back oauth_token and oauth_token_secret.
  4. Sign every call. Attach the access token, consumer key, timestamp, nonce, signature method and signature to every request, in the Authorization header or the query string. E*TRADE does not accept OAuth credentials in the request body.

The developer guides say the sandbox uses the same OAuth procedure and the same authorization server. Only your keys change, and the resulting token works only on the sandbox.

What a signed request looks like

This is the header shape from E*TRADE’s documentation, with placeholders. Never commit real keys to a repo.

GET https://apisb.etrade.com/v1/accounts/list
Authorization: OAuth oauth_consumer_key="YOUR_CONSUMER_KEY",
  oauth_token="YOUR_ACCESS_TOKEN",
  oauth_timestamp="EPOCH_SECONDS",
  oauth_nonce="RANDOM_VALUE",
  oauth_signature_method="HMAC-SHA1",
  oauth_signature="COMPUTED_SIGNATURE"

Do not hand-roll the signature unless you have to. ETRADE recommends the libraries listed at oauth.net, and in Python, OAuth1 support in requests-oauthlib is the common choice. ETRADE’s developer guides also publish a test vector (a known key, secret, token, timestamp and nonce with the expected signature for GET /v1/accounts/list) so you can prove your signing code before you touch real data. Run it once. It saves hours.

How long do Etrade API tokens last?

TokenLifetimeWhat to do
Request token5 minutesFinish the browser approval quickly or start over
Access token (active)Until midnight US EasternUser logs in again the next day for a new token
Access token (idle 2+ hours)Inactive, not expiredCall GET /oauth/renew_access_token
Any token you are done withRevoke itCall GET /oauth/revoke_access_token

Two details from the Get Access Token docs matter for bots. First, Renew Access Token returns an indication that the token renewed, not a new token, so keep using the one you have. Second, after midnight ET no renewal helps; the user must authorize again in a browser.

That second point is the design decision. A fully unattended bot running for days is not how this API works. Plan for a person to log in each trading day.

Why your OAuth calls keep failing

  • Clock drift. The timestamp must be within five minutes of E*TRADE’s UTC time. Sync your server clock.
  • Nonce reuse. A nonce cannot repeat with the same timestamp. Generate a random value per request.
  • Stale secret. You regenerated a key and kept signing with the old secret.
  • Idle token. Your bot sat quiet for two hours. Renew before you retry.
  • Wrong environment. Sandbox token against a production URL, or the reverse.

What Are the Etrade API Rate Limits and Sandbox Limits?

E*TRADE does not publish a single per-minute or per-day call limit on the pages we checked in 2026: the Getting Started page, the developer guides and the API reference. What it does publish are hard limits per call, token rules and agreement terms that end a key you do not use.

Stock-style photo of two monitors on a desk, one showing an exceeding-limits warning and one showing a within-limits check.

LimitValueSource
Per-minute or per-day call capNot published on the pages we checked (2026)Getting Started, developer guides, API reference
Symbols per quote call25, or 50 with overrideSymbolCount=trueGet Quotes API
Orders per List Orders pageDefaults to 25, maximum 100List Orders API
OAuth timestamp windowWithin 5 minutes of current UTCDeveloper guides
Request token life5 minutesGet Request Token API
Access token lifeMidnight ET; inactive after 2 idle hoursGet Access Token API
Annual attestationRequired, or the agreement terminatesLicense Agreement 9.1(a)
Unused keyAgreement terminates if the key “is not actively utilized”License Agreement 9.1(c)

What happens if you call too fast?

Because E*TRADE does not publish a number, engineer defensively. Add exponential backoff to every request. Cache quotes instead of re-polling every second. Never retry the order endpoint in a tight loop, because a retried place call is how you end up with two positions instead of one. If you get throttled, treat it as a design flaw, not an invitation to retry harder.

What the sandbox can and cannot tell you

The sandbox is a syntax checker, not a paper trading account. Per E*TRADE’s developer guides:

  • No real transactions are executed.
  • A request with a syntax error returns an error message.
  • A valid request returns a stored sample response, not current data. You might ask for GOOG and MSFT and get back AAPL, ORCL and CSCO.

So the sandbox proves your signing, parsing and UI. It does not prove your strategy, your fills or your timing. For practice trades with simulated money, E*TRADE’s platform paper trading is a separate product; our guide to E*TRADE paper trading walks through it.

Decision rule: if your strategy needs sub-second polling across hundreds of symbols, the Etrade API is the wrong tool whatever the unpublished ceiling is. If you check a few positions and place a handful of orders a day, you are nowhere near it.

The Token Clock Runs Your Bot
Etrade API limits that decide how a bot is built.
1
Request token
5 min
Finish the browser approval in time or start over.
2
Timestamp window
5 min
Must sit within five minutes of E*TRADE's UTC time.
3
Idle access token
2 hours
Goes inactive, not expired. Call Renew Access Token.
4
Access token ends
Midnight ET
After midnight no renewal helps. The user logs in again.
5
Quotes per call
25
Or 50 with overrideSymbolCount=true.
6
Rate limit
Not published
Not on the pages we checked in 2026.
Source: E*TRADE developer docs as cited in this article, checked October 2026 · FullStack Alpha

What Does a Trading Day Look Like for an Etrade API Bot?

A supervised bot on the Etrade API lives on a daily clock set by the token rules. Here is a realistic weekday for a bot that trades a few positions, built only from the documented token behavior:

Time (ET)What happensWhat your code should do
8:45 a.m.You run the login flow: request token, browser approval, access tokenStart the session within 5 minutes of the request token, store the token in memory
9:30 a.m. to 11:30 a.m.Bot reads quotes in batches of 25 and previews ordersLog every preview and place response
11:30 a.m. to 1:45 p.m.No calls during a quiet stretchAfter 2 idle hours the token goes inactive; call Renew Access Token before the next request
1:45 p.m. to 4:00 p.m.Normal trading resumesBack off on any error, never resend a place call blind
4:15 p.m.Bot is done for the dayRevoke the token, as E*TRADE recommends
MidnightToken expires regardlessNothing to renew; tomorrow starts with a new login

Two design choices fall out of that table. First, a cheap heartbeat call (a balance read every 90 minutes, for example) keeps the token from going idle, but it adds traffic, so many builders prefer to renew on demand. Second, the morning login is a human step. Put it on a checklist with your pre-market routine, and have the bot refuse to trade until it has a fresh token. A bot that knows it is logged out is safe. A bot that thinks it is logged in and keeps retrying is not.

How Do Orders Work in the Etrade API?

Orders here are a two-step handshake: preview, then place. The Place Order API “is used to submit an order after it has been successfully previewed,” so your code must call POST /v1/accounts/{accountIdKey}/orders/preview first, read the response, and only then call /orders/place.

That design helps a bot more than it hurts. The preview is a natural checkpoint where your code can compare the estimated cost and order details against your own risk rules before anything is submitted.

The order workflow, using paths from the Order API reference:

  1. Get your accountIdKey. Call GET /v1/accounts/list. Every account call uses this key, not the account number.
  2. Preview. POST /v1/accounts/{accountIdKey}/orders/preview with the order body.
  3. Place. POST /v1/accounts/{accountIdKey}/orders/place after a successful preview.
  4. Confirm. GET /v1/accounts/{accountIdKey}/orders. List Orders returns 25 per page by default, up to 100, with two years of history.
  5. Cancel if needed. PUT /v1/accounts/{accountIdKey}/orders/cancel.

The docs also include Change Previewed Order and Place Changed Order for edits.

What E*TRADE says about API orders

The license agreement and the developer site disclosure carry three lines every bot builder should read:

  • There may be latency between when an order is submitted from the API and when E*TRADE receives it.
  • The E*TRADE Customer Protection Guarantee does not apply to API use.
  • Orders created through the API are not vetted until E*TRADE receives them, and E*TRADE may reject any API order.

The agreement also says E*TRADE may release new API versions that “may not be compatible with previous implementations,” and that you are responsible for using the most recent version. Pin your client library and watch for change notices.

Can You Get Options Chain Data From the Etrade API?

Yes. The Get Option Chains call returns the chain for one underlying: you specify the instrument, the expiration month, and calls, puts or both. The response includes the option pair count and, per pair, the type, symbol, date and strike. A companion call, Get Option Expire Dates, returns the available expirations so you do not guess.

The live path is GET https://api.etrade.com/v1/market/optionchains?symbol={symbol}. Parameters such as noOfStrikes narrow the strikes returned.

What you get is raw chain data. You do not get strategy scoring, probability models or a volatility surface. Pull the chain, store it, and do the analysis in a tool built for it. If you want to test an options idea before you risk a dollar, our guide to options backtesting explains why most quick win rates are not real.

Practical takeaway: quote individual contracts with the Get Quotes call using the colon symbol format, in batches of 25, and cache the chain between calls instead of pulling it on every loop.

Can You Build an Etrade Trading Bot With Python?

Yes, a Python Etrade API bot is a realistic project if you respect three facts: OAuth 1.0a signing, a token that expires every night, and a preview-then-place order flow. It is not a weekend hack, but it is buildable. E*TRADE publishes sample apps in Python, Java and Node.js on its developer support downloads page.

A realistic build order:

  1. Signing first. Get request token, authorize, access token, and a signed GET /v1/accounts/list working in the sandbox. Check your signer against E*TRADE’s test vector.
  2. Token handling second. Code the 2-hour renew and the midnight re-login as first-class states, not error cases. Alert a human when a new login is needed.
  3. Reads third. Balances, positions, quotes in batches of 25.
  4. Preview before place. Make preview a required function in your order path, and log both responses.
  5. Then a funded account, small. The sandbox will not tell you how fills behave. A tiny live position will.

Safety checklist before going live:

  • Stop-loss logic is coded and tested, not just planned
  • Position size limits are hard-coded, not suggestions
  • Token expiry stops trading cleanly instead of failing silently
  • Retries never resend a place call without checking open orders first
  • You have read the current license agreement yourself, not just this summary

For the broader architecture, from data to live orders, see our Python algorithmic trading roadmap.

Does E*TRADE ban fully automated orders?

We did not find that rule. The current API Developer License Agreement we read in 2026 does not contain a clause banning automated order generation. What it does say: individual keys are for personal, non-commercial use, you accept all risk from using the API, the Customer Protection Guarantee does not apply, and E*TRADE can reject any API order or end your access “at any time, with or without notice.” The nightly re-login is the practical limit on unattended bots. Read the agreement before you automate, and keep a human able to stop the bot.

What Are the Alternatives to the Etrade API?

If OAuth 1.0a and nightly logins do not fit your project, four broker APIs trade off differently on auth, cost and automation.

BrokerAuth modelTesting environmentNotable for
E*TRADEOAuth 1.0a, HMAC-SHA1, daily tokenSandbox with stored sample dataOptions chains, preview-then-place orders
AlpacaKey and secret headers (APCA-API-KEY-ID, APCA-API-SECRET-KEY)Paper account, $100,000 default balanceBuilt for bots, free IEX data
TradierAPI token from account settings for your own account; OAuth 2.0 for partner appsPaper trading sandbox included with every accountOptions-first, API access included at no extra charge
Charles SchwabOAuth 2.0 with about 30-minute access tokens and a 7-day refresh tokenNo API paper environment on the pages we checkedFormer TD Ameritrade API users
Interactive BrokersTWS API through TWS or IB GatewayPaper trading accountGlobal markets, steeper setup

The Alpaca and Tradier rows come from their own docs; the Schwab token model is covered in our Schwab API guide, and IBKR in our TWS API guide. For a directory profile of Schwab’s tools, see the Charles Schwab listing on our sister site.

Decision rule: choose E*TRADE if you already bank there, trade options, and are fine with a daily login. Choose Alpaca if unattended automation is the goal from day one; start with our Alpaca API beginner guide. Choose Tradier if you want a simple token and an options focus. Choose Interactive Brokers if you need global reach and accept a steeper learning curve.

Frequently Asked Questions

Is the Etrade API free?

Yes, the Etrade API has no separate fee in ETRADE’s developer documentation. You need an ETRADE brokerage account, and normal commissions and any exchange market data fees still apply to what you trade and view. The account does not need funding for sandbox development.

How do I get an Etrade API key?

Request a sandbox key from the Getting Started page while logged in to your ETRADE account, and it appears immediately. For a live key, complete the API User Intent Survey and sign the API Developer Agreement. Individual live keys appear in the page right away; vendor keys stay inactive until ETRADE approves you after a short demo.

How long does an Etrade API access token last?

An Etrade API access token expires at midnight US Eastern time by default. If your app makes no requests for two hours, the token goes inactive and must be reactivated with the Renew Access Token API. After midnight the user must log in again to get a new token.

What are the Etrade API rate limits?

E*TRADE does not publish a per-minute or per-day call limit on the Getting Started page, developer guides or API reference we checked in 2026. It does cap quote requests at 25 symbols, or 50 with overrideSymbolCount, and List Orders at 100 per page. Build with backoff and caching rather than guessing a ceiling.

Does E*TRADE have paper trading for the API?

Not in the usual sense. The Etrade API sandbox returns stored sample responses, so it checks your syntax and parsing, not your fills, and you may ask for one symbol and get others back. For simulated trades, use E*TRADE’s platform paper trading, which is a separate product.

Can the Etrade API place options orders?

Yes, the Order API handles equity and options orders, and the Market API returns option chains and expiration dates. Every order must be previewed with the Preview Order call before you call Place Order. The Customer Protection Guarantee does not apply to orders placed through the API.

Can a fully automated bot run on the Etrade API?

Only for one trading day at a time. The access token expires at midnight Eastern and a person must log in through a browser to get a new one, so unattended multi-day bots do not fit the design. We found no clause banning automated orders in the current license agreement, but E*TRADE can reject API orders or end access at any time.

Our Take

The Etrade API is a workhorse, not a showpiece. It does accounts, quotes, option chains and orders reliably, and access is free with a brokerage account. But it taxes your time: OAuth 1.0a signing, a token that dies at midnight Eastern, a preview call before every order, and no published rate limit to design against.

That makes it a good fit for a supervised bot that a person logs into each morning, and a poor fit for anything meant to run unattended for a week. If you already trade at E*TRADE, build the token handling first and the strategy second. If you are starting fresh and want hands-off automation, another broker will get you there faster. For more broker API breakdowns, start at AI Stock Trading Bots.

Built something on E*TRADE’s API and want a second set of eyes before you size it up? Send it to us.

Stay alpha.

F
Written by FullStack Alpha Editorial Team

The FullStack Alpha research desk tests AI trading bots on paper and live accounts. Reviewed and edited by Jay Rocco, Founder and Editor.

AI Stock Trading Bots

Ready to Connect?

Get in touch — we'd love to hear from you.

The FullStack Alpha network

Three sites, one standard: tested tools, no paid rankings.