If you are filtering a universe down to "just stocks", read this first: the type field on a ticker record distinguishes far more than common shares, and several of the codes look like equities until you check what they are. The ticker types endpoint returns the current list with descriptions, and it is the authority rather than this page.
Applies to
- Plans: reference data is included with every plan, including the free Basic tier.
- Endpoints: /v3/reference/tickers/types for the list, and type= on /v3/reference/tickers to filter.
- Asset classes: stocks. Options, futures, forex and crypto have their own identifiers rather than this type system.
The codes you will meet most
The codes you will meet most account for nearly every ticker in a normal universe:
| Code | What it is |
|---|---|
| CS | Common stock |
| PFD | Preferred stock |
| ETF | Exchange traded fund |
| ETN | Exchange traded note |
| ETV | Exchange traded vehicle |
| ADRC | American Depositary Receipt, common |
| ADRP | American Depositary Receipt, preferred |
| WARRANT | Warrant |
| RIGHT | Rights |
| FUND | Fund |
| BOND | Corporate bond |
| SP | Structured product |
How to get the full list
curl -X GET "https://api.massive.com/v3/reference/tickers/types?asset_class=stocks&apiKey=YOUR_API_KEY"
Response
{
"results": [
{ "code": "CS", "description": "Common Stock", "asset_class": "stocks", "locale": "us" },
{ "code": "PFD", "description": "Preferred Stock", "asset_class": "stocks", "locale": "us" }
],
"status": "OK"
}
Read the codes from the endpoint rather than hard-coding this table, because the list can grow.
How to filter a universe
Pass type to the tickers endpoint to build a universe of one kind:
curl -X GET "https://api.massive.com/v3/reference/tickers?type=PFD&active=true&limit=2&apiKey=YOUR_API_KEY"
Response
{
"results": [
{ "ticker": "ABRpD", "type": "PFD", "active": true, "primary_exchange": "XNYS",
"name": "Arbor Realty Trust, Inc. 6.375% Series D Cumulative Redeemable Preferred Stock, Liquidation Preference $25.00 per Share" },
{ "ticker": "ABRpE", "type": "PFD", "active": true, "primary_exchange": "XNYS",
"name": "Arbor Realty Trust, Inc. 6.25% Series E Cumulative Redeemable Preferred Stock" }
],
"status": "OK"
}
This matters more than it looks. A screen intended for operating companies that does not filter on CS will pick up ETFs, preferred shares and structured products, and most fundamental fields are null or meaningless for those, so the screen quietly returns a mixture it was never designed for.
Why the type is worth reading
The type is worth reading because it decides which other fields make sense. A CS ticker has a share count and a market cap; an ETF has neither in the same sense; a PFD trades on its dividend rather than on earnings; and a WARRANT or RIGHT expires. Filtering by type early is the cheapest way to stop those differences turning into null-handling bugs later.
If you see an error
Null fundamentals on a ticker that is not CS are expected rather than missing data.
A preferred share that disappears from your results after you normalize symbols is the lowercase p convention. Preserve the case of the ticker.
An unfamiliar code is not an error. Look it up on the types endpoint, which carries a description for every one.

