Skip to content

Learn

Exchange APIs

IBKR market data errors 354, 10089, 10090, 10186 explained

Figures on this page are as of 2026-09. Fees, limits and margin tiers change — check the venue's own docs.

The one most people search for, as it appears in IBKR’s current TWS API error table:

354: Requested market data is not subscribed. Check API status by selecting the Account menu then under Management choose Market Data Subscription Manager and/or availability of delayed data.

In one line: TWS understood your request and refused to send live data for that instrument, because the account lacks an entitlement the request needs. But 354 is one of a family of codes, and they point at different problems — no subscription, a subscription that does not extend to the API, a partial subscription, or a session conflict. This page is for TWS API users who need to tell which one they have before spending money or time on the wrong fix.

What these errors actually mean

All of these arrive through the TWS API’s EWrapper.error() callback, each carrying the request ID of the market data request that failed. That request ID is the first thing to log: it tells you which instrument and which request type was refused, and one connection can receive different codes for different instruments.

The codes in IBKR’s current table, verbatim:

CodeMessageWhat it points to
354Requested market data is not subscribed. Check API status by selecting the Account menu then under Management choose Market Data Subscription Manager and/or availability of delayed data.No live data for that instrument in your account
10089API data requires subscriptionA subscription exists, but does not extend to API use
10090Part of requested market data is not subscribed.Some requested tick types need subscriptions you do not hold
10091Part of requested market data requires additional subscription for APIPartial, and the missing part is the API entitlement
10186Requested market data is not subscribed. Delayed market data is not enabledNo subscription, and you have not asked for delayed data instead
10197No market data during competing sessionLogged into paper and live at once, requesting live data

Two wording variants you may meet in logs:

  • 354 reads “Not subscribed to requested market data.” in IBKR’s older (now deprecated) error table. Same code, older text.
  • 10089 has a longer form in IBKR’s Common Error Resolution pages: “Requested market data requires additional subscription for API. See link in ‘Market Data Connections’ dialog for more details.Delayed market data is available.” (the missing space is IBKR’s).

These are TWS API codes. The Client Portal Web API reports failures as HTTP responses, and we did not find these numbers documented for it.

The usual cause

Data you can see in TWS is not necessarily data you can get through the API. IBKR says outright that market data availability differs between TWS and the API, and its note on 10089 and 10091 is that the subscription held by the user does not extend support for API use.

That is why this error is so confusing the first time. The chart is live on your screen, the quote is updating, and the API request for the same symbol comes back refused. Nothing is wrong with your code. The entitlement is different.

The fix is on the account side, not in code: check which subscriptions cover API use through IBKR’s market data subscription pages (linked from the 10089 resolution page) and the Market Data Subscription Manager the 354 message names. What each subscription costs is on IBKR’s pricing pages and is not something to rely on from any third-party article, including this one.

Other causes, in order of likelihood

No subscription at all — 354 or 10186. The account has no live data for that instrument. 10186 adds a second fact: you have not enabled delayed data, so there was nothing to fall back to.

A partial subscription — 10090. Some of the tick types you asked for need subscriptions you do not hold. IBKR’s example: options data is subscribed but the underlying is not, so option greeks cannot be calculated. The request partly works, which makes it easy to miss.

A competing session — 10197. You are logged into the paper and live accounts at the same time and requesting live data. IBKR’s note says preference is given to the live account. This has nothing to do with subscriptions; log one of the sessions out, or accept that the paper session does not get live data while both are running.

Delayed fallback working as designed. You may see this message:

Requested market data is not subscribed. Displaying delayed market data…

This is not a failure. IBKR documents that text (on a legacy RTD troubleshooting page, as a TwsRtdServer error with no code number) as what appears when you request a live tick type while only delayed data is available. Data is flowing; it is delayed. User logs posted to the twsapi groups.io list pair this message with code 10167. That number comes from those third-party reports only — we did not find 10167 in either of IBKR’s error-code tables as of September 2026 — so treat the text as IBKR’s and the number as observed rather than documented.

A different constraint that also looks like “no data”: code 101, which concerns market data line limits. That is a capacity limit rather than an entitlement problem; the details are in IBKR’s note on it in the error-code table and in your account’s own settings.

The delayed data switch

Both 354 and 10089 point at the same alternative: ask for delayed data explicitly. Call EClient.reqMarketDataType() before requesting data:

TypeMeaning
1Live — requires a market data subscription
2Frozen
3Delayed
4Delayed Frozen
app.reqMarketDataType(3)                 # delayed if live is not available
app.reqMktData(req_id, contract, "", False, False, [])

IBKR’s description of type 3 is the useful part: TWS switches to delayed data automatically when you lack the real-time subscription, and ignores the request for delayed data if live is available. So setting type 3 is safe to leave in place — subscribed instruments stay live.

Two limits:

  • Delayed data only works with reqMktData and reqHistoricalData. IBKR states it does not function for tick data.
  • Delayed data arrives on different tick types, IDs 66 to 76. If your handler only listens for the live tick types, delayed data will arrive and be silently dropped — which looks exactly like “no data”.

How long the delay is varies and is on IBKR’s delayed market data page; we do not quote it here because it is not ours to keep current. What matters for an automated or AI-assisted setup is that delayed prices look exactly like current ones unless your code records which tick types they came from. Tag every price with its source at ingestion.

How to confirm which one you have

You seeYou haveDo this
354No live entitlement for that instrumentSubscription manager, or reqMarketDataType(3)
10186No entitlement, delayed not requestedreqMarketDataType(3) before the request
10089 / 10091Entitlement that does not cover the APICheck which subscriptions cover API use
10090Partial: some tick types not coveredCheck subscriptions for every component, e.g. the underlying
10197Paper and live logged in togetherOne session, or accept no live data on paper
“Displaying delayed market data…”Fallback workingHandle tick types 66–76; label the data as delayed
Ticks 66–76 arrivingYou are on delayed dataNothing is broken; decide whether delayed is acceptable

Also filter the informational codes. 2104 “Market data farm connection is OK” and 2106 (historical data farm connected) arrive on every healthy connect through the same callback and are not market data errors. Treating every error() call as fatal is a common way to turn a working connection into an apparently broken one — see error handling patterns for trading APIs.

FAQ

Why can I see live prices in TWS but get error 10089 from the API?

IBKR states that market data availability differs between TWS and the API. Error 10089 means the market data subscription on your account does not extend to API use, even though it displays in TWS. Check which subscriptions cover API access through IBKR’s market data subscription pages, or request delayed data with reqMarketDataType(3).

What is the difference between IBKR error 354 and 10186?

Both mean the account has no live data for the requested instrument. 10186 adds that delayed market data is not enabled either, so the request had nothing to fall back to. Calling reqMarketDataType(3) before the request tells TWS to switch to delayed data automatically when live is not available.

Is error 10167 an official IBKR error code?

Its message text is official: IBKR documents “Requested market data is not subscribed. Displaying delayed market data…” on a legacy troubleshooting page, without a code number. The number 10167 comes from user logs; we did not find it in either IBKR error-code table as of September 2026. It indicates delayed data is being delivered, not that the request failed.

Does reqMarketDataType(3) turn off live data for instruments I subscribe to?

No. IBKR documents that a delayed data request is ignored when live data is available, so subscribed instruments stay live and only unsubscribed ones fall back to delayed. Your handler must accept the delayed tick types, IDs 66 to 76, or delayed data will be dropped.