E*TRADE API: What Happened in January and How I Figured It Out

Posted by Michael S. on February 2, 2026

It's February 2nd. For a good chunk of January I couldn't use the E*TRADE API to place orders. OAuth worked. Account and quote endpoints were fine. But the moment I hit the order preview or place endpoint, everything fell over with a 500. Here's what actually happened—and how I figured out what to do about it.

What Was Going Wrong

I'm talking about the E*TRADE REST API: request token, authorize in the browser, exchange for an access token, then call the account and order endpoints. The flow up to "get access token" was succeeding. I could list accounts and pull quotes. As soon as I tried to preview or place an order, the server responded with HTTP 500 and an XML error body saying the requested service was not currently available.

So the problem wasn't my credentials, my OAuth library, or my request formatting for the earlier steps. Something specific to the order path was failing on their side.

How I Figured Out What to Do

I had to be methodical. First, I confirmed that only the order-related calls failed. That meant reproducing the flow: request token, authorize, access token, then one successful call (e.g. account list) and one failing call (order preview) in the same session. That way there was no doubt the failure was tied to the order endpoint, not to auth in general.

Second, I captured everything that would be useful for debugging or for a bug report: the exact URL, the request body (with sensitive bits redacted if needed), the full response body, and—importantly—the X-ET-Trace response header. E*TRADE returns that header on errors; their support can use it to look up the request on their side. Without it, you're just "someone getting a 500." With it, you're giving them a trace ID.

Third, I wrote it down. I turned the reproduction steps and the request/response details into a short, concrete bug report and also into a blog post so I had a permanent record and so anyone else hitting the same thing could see the exact error and the trace ID format. That post has the full request/response and the trace ID from my repro.

Where Things Stand

So: the issue was on E*TRADE's side—their order preview (and place) endpoint was returning 500 with code 100 and "service not currently available." My job was to prove my side was correct (OAuth, headers, payload) and to hand them something actionable. Isolating the failure to the order endpoint, capturing the trace ID, and documenting it was how I figured out what to do. If you're in the same boat, double-check your OAuth and request shape, then grab that X-ET-Trace value and include it when you report the issue.

Update (February 2)

One more thing I'm running into: does the access token expire every time I log in to E*TRADE on my phone or computer to check something? If so, how can I get around that—e.g. a separate "API-only" login, longer-lived tokens, or something else—so I don't have to re-authorize the app every time I've just looked at my account in the browser or on the app?

Enjoyed this post?

Get notified when I publish something new. No spam, unsubscribe anytime.