Skip to main content
The easiest way: ask your AI assistant. With Itoflow MCP connected to Claude or Codex, paste:

Open in Claude

Start this in Claude with the Itoflow plugin.

Open in ChatGPT

Start this in ChatGPT with the Itoflow plugin.
Using another client? Copy the prompt with the button on the code block.No tokens or code needed. You can also do this in the Itoflow app. The rest of this page covers the HTTP API.
An Itoflow symbol is a ticker and an exchange code joined by a dot, such as AAPL.US or ASML.AS. Every endpoint that takes an instrument expects this form. GET /symbols/exchanges lists the exchange codes.

Search by ticker or company

GET /symbols/search returns ranked matches. Pass the ticker or company name in q, and optionally an exchange code:
To check that a full symbol exists, pass it with mode=exact:

Resolve identifiers

GET /symbols/resolve turns other identifiers into an Itoflow symbol. Give it whatever you know, using these query parameters: siq_symbol (an Itoflow symbol), ticker, broker_symbol, isin, company_name, currency, exchange and mic. exchange takes an Itoflow code such as US or LSE; put a venue such as XNAS in mic (an ISO 10383 code), not in exchange. The more you give, the more it can check. If the pieces disagree, are incomplete, or name an exchange Itoflow doesn’t cover, it returns 422 with one of these codes: identifier_evidence_missing, exchange_or_mic_required, canonical_currency_missing, instrument_identifier_conflict, instrument_identity_unresolved, unsupported_exchange or unsupported_mic. The last two include the values Itoflow does support. Show that list to your user rather than guessing another exchange or currency. Both resolve routes accept common share-class spellings in ticker or an unqualified broker_symbol. With exchange: "US", BRK.B, BRK/B and BRK B resolve to BRK-B.US only when that dashed listing exists. This rule applies on every supported exchange: letters, one dot, slash or space, then one or two letters. Other shapes, such as BAC.PRL, are looked up as written. BRKB and UHALB stay unresolved; the resolver does not guess where to split them. Any supplied security identifier, currency or company name must still match the listing.

Resolve many identifiers at once

POST /symbols/resolve/batch resolves up to 3,000 instruments in one call, such as every row of a holdings file. Each item takes the same fields as the GET /symbols/resolve query:
The answer has one row per item, in the order you sent them, each with its index. A row answers as GET /symbols/resolve would: ok: true with the instrument, or ok: false with one of the codes above. One bad row does not fail the others. A row with resolution_unavailable was not finished within this call, for example because a data provider was slow; send those rows again. A fault that sending a row again would not fix, such as a database failure, fails the whole call. Search and resolve may look up a data provider. If the provider is down they can fail with 5xx; retry a few times with a growing wait.