Explainer
What is a ticker symbol? Stock, FX, crypto and futures symbol formats
A ticker names a listing, not a company. Hold on to that one idea and numeric Tokyo codes, share-class dots and six-letter currency pairs all start to make sense.
On this page
Key takeaways
- A ticker symbol is a short code for one traded listing, such as KO for The Coca-Cola Company shares listed in the US.
- Tickers are unique only inside one market, so global APIs add a market prefix: US:KO, DE:SAP, JP:7203.
- Forex pairs join two ISO currency codes (EURUSD), crypto pairs join a coin and a quote currency (BTCUSD), and gold uses its ISO code, XAU.
- Leading zeros and share-class suffixes are part of the ticker: 0700 is not 700, and BRK.B is not BRK.
- Store your own stable ID next to every ticker, because tickers change after mergers and old ones are reused.
A ticker symbol is a short code that identifies one traded listing. KO is The Coca-Cola Company's common stock on its US listing; EURUSD is the euro priced in US dollars; BTCUSD is bitcoin priced in dollars. Brokers, charting tools and every market data API use the ticker as the key for requesting a price.
One idea explains every format below: a ticker names a listing, not a company. The same company can list in several markets under different tickers, and the same ticker can mean unrelated companies in two markets. Everything else is local convention.
Where ticker symbols come from
The name comes from the stock ticker, the telegraph printer that from the late 1860s tapped trades onto a strip of paper tape. Space on the tape was scarce, so companies got the shortest codes an exchange could assign. The habit stuck: US tickers are one to five letters, and a single letter such as V, C or F is still a prized code.
Each exchange assigns its own codes, and markets chose different systems. The US uses letters. Japan, Hong Kong, South Korea, Taiwan, mainland China and Saudi Arabia use numbers. Brazil adds a digit that encodes the share type. None of these codes is unique outside its home market, which is the problem every global stock ticker format has to solve.
Ticker symbol formats by asset class
| Asset class | Format | Examples | How to read it |
|---|---|---|---|
| Stocks | CC:TICKER | US:KO, DE:SAP, JP:7203 | Two-letter market code, then the local ticker |
| Forex | Base + quote currency | EURUSD, USDJPY | The price of one unit of the first currency in the second |
| Crypto | Coin + quote currency | BTCUSD, ETHUSD, SOLUSD | The price of one coin in the quote currency |
| Precious metals | ISO metal code + currency | XAUUSD, XAGUSD | XAU is gold and XAG is silver in the ISO 4217 code list |
| Indices | Region + size code | US500, US30, DE40, JP225 | Where the benchmark is, and roughly how many companies it holds |
| ETFs | Generic alias code | US500ETF, USGOLD, WORLDETF | Unprefixed on TickerLayer |
| Government bonds | CC:TENOR | US:10Y, DE:2Y | Country, then time to maturity |
| Perpetual futures | Underlying + USDT | BTCUSDT, XAUUSDT, US500USDT | No expiry in the symbol; prices are in US dollar stablecoin terms |
Stocks: why the market prefix matters
Tickers are only unique inside one market, so a global stock API needs one more piece of information. TickerLayer puts the market first, as a two-letter country code: US:KO, DE:SAP, HK:0700. A bare KO returns 400 invalid symbol rather than a guess, because guessing is how a price for the wrong company reaches a user.
SAP shows why. Ask a symbol checker for plain SAP and it cannot choose: the same company trades in Germany as DE:SAP and in the US as US:SAP, in different currencies and at different prices. One company, two listings, and two distinct tickers once qualified.
| Market | Example | Local pattern |
|---|---|---|
| United States | US:KO, US:BRK.B | One to five letters; a dot and a letter for a share class |
| Germany | DE:SAP, DE:BMW | Short letter codes |
| Japan | JP:7203 | Four digits |
| Hong Kong | HK:0700 | Four digits with leading zeros, which you must keep |
| South Korea | KR:005930 | Six digits |
| Taiwan | TW:2330 | Four digits |
| Saudi Arabia | SA:2222 | Four digits |
| Brazil | BR:PETR4 | Four letters plus a share-type digit: 3 for common, 4 for preferred |
Share classes are the other trap. US:BRK.B and the class A shares of the same company are different securities with very different prices, and each class has its own share count and free float. The suffix is part of the ticker, though providers write it differently (BRK.B, BRK-B, BRK/B), so normalize it rather than strip it. The stock API guide covers global listings in more depth.
Currency pair, crypto and index symbols
A currency pair symbol joins two ISO 4217 codes, base first and quote second. EURUSD at 1.1370 means one euro costs 1.1370 dollars; USDJPY at 157.10 means one dollar costs 157.10 yen. Providers disagree only on the separator (EUR/USD, EUR-USD, EURUSD), and TickerLayer drops it.
ISO 4217 also lists precious metals as if they were currencies: XAU is gold, XAG silver, XPT platinum and XPD palladium. That is why gold against the dollar is XAUUSD, a symbol that reads like a currency pair because, by the standard, it is one.
Crypto has no ISO standard, so pairs join the coin's ticker with the quote currency: BTCUSD, ETHUSD. Coin tickers collide more often than stock tickers do, and some are reused after a project fades, one more reason to validate against a symbol list instead of trusting a string.
Stock indices get generic codes on TickerLayer: US500 for the US 500 large-cap benchmark, US30 for the 30-stock US benchmark, then DE40, JP225 and UK100. The code tells you the region and roughly how many companies the index holds. The indices API guide explains what each code measures.
Futures and perpetual contract symbols
Dated futures add an expiry to a root symbol, usually as a one-letter month code and a two-digit year. The December 2026 contract of a product with root XY would be written XYZ26. The month codes are a shared convention across markets:
| Month | Code | Month | Code | Month | Code |
|---|---|---|---|---|---|
| January | F | May | K | September | U |
| February | G | June | M | October | V |
| March | H | July | N | November | X |
| April | J | August | Q | December | Z |
Perpetual futures never expire, so there is no month to encode. Their symbols are the underlying plus USDT, the dollar stablecoin they are priced in: BTCUSDT, XAUUSDT for gold, and on TickerLayer also equity and index contracts such as TSMUSDT and US500USDT. The mechanics behind them are in perpetual futures explained.
Normalize symbols before they reach your code
Users, spreadsheets and other APIs will hand you KO, BRK-B, EUR/USD, 0700.HK and 7203.T. Normalize once, at the edge of your system:
- Clean the stringTrim, uppercase and collapse separators:
EUR/USDandEUR-USDbecomeEURUSD, andBTC-USDbecomesBTCUSD. - Turn suffixes into prefixesExchange suffixes such as
.HKand.Tbecome market prefixes:0700.HKisHK:0700, and7203.TisJP:7203. - Qualify bare tickers on purposeMap a bare ticker to
US:only when your users are US-focused, and ask them to choose when a ticker is ambiguous. - Validate against a listCheck every symbol against
GET /{asset}/symbolsbefore you store it, and reject anything that does not resolve. - Store an ID next to the tickerTickers change after mergers and rebrands and are reused later. Keep your own stable ID and the date you resolved the ticker.
TickerLayer does the first four steps for you. POST /symbols/coverage takes up to 100 lines of free text and returns, for each line, the resolved symbol, its REST path and its WebSocket channel, or the candidates when a ticker is ambiguous:
import os
import requests
resp = requests.post(
"https://api.tickerlayer.com/symbols/coverage",
headers={"x-api-key": os.environ["TICKERLAYER_API_KEY"]},
json={"text": "KO\nBRK.B\nEUR/USD\nBTC-USD\n0700.HK\n7203.T\nSAP"},
timeout=10,
)
resp.raise_for_status() # a successful check answers 201 Created
for row in resp.json()["rows"]:
match = row["match"] or {}
options = ", ".join(c["symbol"] for c in row["candidates"])
print(f'{row["input"]:<8} {row["kind"]:<11} {match.get("symbol") or options}')KO normalized US:KO
BRK.B normalized US:BRK.B
EUR/USD normalized EURUSD
BTC-USD normalized BTCUSD
0700.HK normalized HK:0700
7203.T normalized JP:7203
SAP ambiguous US:SAP, DE:SAPOne row of the coverage response
{
"input": "7203.T",
"kind": "normalized",1
"label": "Available",
"detail": "Format adjusted",
"match": {
"symbol": "JP:7203",
"name": "Toyota Motor Corporation",
"assetClass": "stocks",
"restPath": "/stocks/quote/JP:7203",3
"streamChannel": "stocks.quotes"4
},
"candidates": []5
}
kindexact,normalizedoraliaswhen ready;closestorambiguouswhen you should review;uncoveredorunrecognizedotherwise.match.symbolThe canonical symbol to store and send.restPathThe REST route that returns a quote for it.streamChannelThe WebSocket channel to subscribe it on.candidatesFilled when the input could mean more than one listing, as withSAP.
The same check runs in the browser, with no code, in the symbol coverage checker: paste a column from a spreadsheet and get the canonical symbols back.
Stock symbol lookup
To look up a ticker, start from the company or instrument and search a directory. The TickerLayer symbol directory lists instruments across markets, with a page per symbol such as KO. In code, GET /stocks/symbols?market=US returns the listings for one market, and every other asset class has its own list, documented in the symbols reference.
Do
- Qualify stock tickers with their market:
US:KO, notKO. - Keep leading zeros and share-class suffixes.
- Validate against a symbol list before storing.
- Store a stable ID alongside every ticker.
Avoid
- Assuming a ticker means the same company in every market.
- Parsing numeric tickers as integers:
0700becomes700. - Stripping
.Bfrom a class B share. - Hard-coding tickers that can change after a merger.
Questions
What is a ticker symbol?
A short code that identifies one traded listing, such as KO for The Coca-Cola Company shares in the US or EURUSD for the euro priced in dollars. It is the key you use to request prices.
How do I find a company's ticker symbol?
Search a symbol directory by company name, or query a symbol list by API. Check the market as well, because one company can list under different tickers in different countries.
Why do some ticker symbols have numbers?
Several markets, including Japan, Hong Kong, South Korea, Taiwan, mainland China and Saudi Arabia, assign numeric codes instead of letters. Brazil adds a digit to the letters to show the share type.
What does .B mean in a ticker symbol?
It marks a share class, usually class B. Class A and class B shares of the same company are different securities with different prices.
Can two companies have the same ticker symbol?
Yes, in different markets. Tickers are unique only within one market, which is why APIs qualify stock symbols with a market code such as US: or DE:.
Do ticker symbols change?
Yes. Companies change tickers after mergers, rebrands or moves between markets, and retired tickers can be reassigned, so store a stable identifier of your own next to the ticker.