Skip to main content

The short version

A Yahoo-style vendor suffix (AI.PA, AIXA.DE, BESI.AS) is not an identifier here. It resolves to nothing, because the API reads AI.PA as a US ticker literally spelled “AI.PA”. Send PAR:AI instead. When you get this wrong the error names the prefixed form to use.

Non-US listings

Non-US listings are addressed the way Google Finance writes them: an exchange prefix, a colon, then the local ticker.
URL-encode the colon (%3A) if your HTTP client needs it. Both forms work. The prefix names the listing venue when the company’s home country has no prefix of its own: a Cayman-registered company listed in Hong Kong is HKG:2020 (ANTA), and a Jersey company on the London Stock Exchange is LON:GLEN (Glencore). When the home country has one, the identifier carries it: China Shenhua’s Hong Kong H-shares are SHA:1088, and HKG:1088 reaches the same listing. The prefixes in the second table below follow the venue: Turkcell on Borsa Istanbul is IST:TCELL, while an Israeli company listed on Nasdaq keeps its bare ticker as its instrument_id (TLV: plus that ticker still reaches it). Every instrument and search response carries instrument_id, the exact string to send, so you never have to assemble one from symbol and country_code. These name the listing on that venue:

Other spellings that resolve

You do not have to learn the table. The way Google Finance writes a venue (EPA:AI, EBR:UCB, ETR:SAP, BIT:ENI, ELI:EDP), the venue’s own name or code (HKEX:0669, LSE:AZN, XETRA:SAP, NZX:FPH, BME:AMS, TWSE:2330, KOSPI:005930, BIST:THYAO, TASE:TEVA, MOEX:SBER), and a US venue written as a prefix (NASDAQ:AAPL, NYSE:JPM) all resolve to the same listing. TSE: is read as Tokyo when the ticker is numeric (TSE:7203) and as Toronto when it is not (TSE:SHOP). A Hong Kong stock code answers to any zero-padding: HKG:992, HKG:0992 and HKG:00992 all reach Lenovo. POST /screen takes the same identifiers as /instruments, prefixed or bare, up to 50 per call, and echoes each one back in upper case. Dotted share classes (BRK.B) resolve everywhere.

Cross-listings and share classes

A company is analysed once, against its canonical listing. Ask for any listing of it (an ADR, a foreign line, a second share class) and you get that company’s determination, echoed back under the symbol you asked for. So NVO and CPH:NOVO-B return the same screens, and BRK-B returns Berkshire.

Funds

Funds live on /etfs/{symbol}, not /instruments. Around 180 fund tickers also exist as equity rows for bookkeeping reasons, so /instruments/SPY/compliance answers pending forever; when it does, the response carries meta.etf naming the endpoint that has the real answer. POST /screen does the same through meta.etfs. The exception is a fund we screen under AAOIFI as a trust rather than by holdings (GLD, IAU, SLV, IBIT, USO). Those carry a real determination on /instruments, and /etfs has little to say about them. A fund’s alternate listing line, a same-ISIN ticker on another currency or exchange, resolves to the fund itself.

When an identifier does not resolve

404 not_found means we have no such instrument. The message names the likely fix when there is one: the prefixed form for a vendor-suffixed ticker, or the fund endpoint for a fund ticker. On /screen, unresolvable tickers come back in meta.not_found rather than as fabricated rows, and the fund ones are named in meta.etfs. Use GET /search when you have a name and need the identifier: every stock hit carries instrument_id, the exact string to send to /instruments, and every hit carries a type telling you whether to route it to /instruments or /etfs. GET /instruments/{symbol}/health can 404 for a listing that resolves everywhere else. Financial health is computed from SEC filings, so a company that does not file with the SEC has no health analysis yet; the message says so, and the compliance determination is unaffected.