# GET /v2/tickers

**Symbol catalog**

Every symbol we track, active or delisted, as one identity row each. Use [`/v2/tickers/{ticker}`](/docs/endpoints/tickers/state) for the full row.

## Query / path parameters

| Name | In | Type | Required | Description |
|------|----|----|----------|-------------|
| `search` | query | string | no | Case-insensitive match on `ticker` or `name`, max 64 characters (longer is a 400). Results are ranked: an exact ticker match first, then symbols that start with the term, then name matches — alphabetical within each rank. The cursor carries the rank, so paging a search never repeats or skips. Example: `apple`. |
| `asset_class` | query | string[] | no | Filter by asset class — `stocks`, `rates`, `crypto`, `fx`, or a comma-separated list (the live classes today; validated for shape, not against a fixed list, so a well-formed class we don't track simply matches nothing — same contract as scan). Omit for every class. This is the class of INSTRUMENT, distinct from `asset_type` below (the instrument type within equities). Every row carries its `asset_class`, so a non-equity row identifies itself. Example: `stocks`. |
| `asset_type` | query | string | no | Filter by instrument type WITHIN equities — the stored `asset_type` value (`CS`, `ETF`, `ADRC`, `PFD`, `FUND`, `UNIT`, `SP`, `ETS`, `WARRANT`, `RIGHT`, `ETN`, `ETV`), matched case-insensitively. `equity` is a convenience value expanding to the equity-like set. This is NOT an asset class: `asset_type=crypto` is rejected — use `asset_class=crypto`. Enum: `CS`, `ETF`, `ADRC`, `PFD`, `FUND`, `UNIT`, `SP`, `ETS`, `WARRANT`, `RIGHT`, `ETN`, `ETV`, `equity`. Example: `ETF`. |
| `exchange` | query | string | no | Filter by exchange name — the value rows carry in their `exchange` field. MIC codes (`XNAS`, `XNYS`, `BATS`) are also accepted and match `exchange_mic`. A malformed value (non-letters, over 16 chars) is a 400. Example: `NASDAQ`. |
| `limit` | query | integer | no | Page size. Max 1000. Default: `50`. Example: `50`. |
| `cursor` | query | string | no | Opaque cursor from the previous response's `next_cursor` field. Continues the walk from after that page. A cursor minted under `search` only resumes the same search. |

## Returns

- `as_of` (string) — Server time this response was assembled (ISO 8601).
- `count` (number) — Rows in this page.
- `next_cursor` (string) — Opaque token for the next page; `null` on the last page.
- `results` (array) — One identity row per symbol — the thirteen signals named above, nothing else. `active: false` rows carry `delisted_utc`; they are still addressable on the state route with `asof`.
- `_meta` (object) — With `asset_class` only: `scope.asset_class` lists the classes the page was filtered to.

## Status codes

- **200** — Success — the response shape is documented under Returns above.
- **400** — Invalid cursor, malformed filter, or a retired parameter (`tickers`, `universe`, `asof`, `min_market_cap`, `sector`) — the message names where each one moved.
- **401** — Missing or invalid API key.

## Sample response

```json
{
  "as_of": "2026-09-08T14:20:11.336Z",
  "count": 3,
  "next_cursor": "eyJhZnRlcl90aWNrZXIiOiJBQUEifQ",
  "results": [
    { "ticker": "A",   "name": "Agilent Technologies Inc.", "asset_class": "stocks", "asset_type": "CS",  "exchange": "NYSE",      "exchange_mic": "XNYS", "currency_name": "usd", "country": "us", "cik": "0001090872", "composite_figi": "BBG000C2V3D6", "list_date": "1999-11-18", "delisted_utc": null, "active": true },
    { "ticker": "AA",  "name": "Alcoa Corporation",          "asset_class": "stocks", "asset_type": "CS",  "exchange": "NYSE",      "exchange_mic": "XNYS", "currency_name": "usd", "country": "us", "cik": "0001675149", "composite_figi": "BBG00B3T3HD3", "list_date": "2016-10-18", "delisted_utc": null, "active": true },
    { "ticker": "AAA", "name": "Alternative Access First Priority CLO Bond ETF", "asset_class": "stocks", "asset_type": "ETF", "exchange": "NYSE Arca", "exchange_mic": "ARCX", "currency_name": "usd", "country": "us", "cik": null, "composite_figi": "BBG00X5FSP48", "list_date": "2020-09-09", "delisted_utc": null, "active": true }
  ]
}
```

## More examples

### Find a symbol by name

Request:

```shell
curl "https://api.tickerbot.io/v2/tickers?search=apple&limit=3" \
  -H "Authorization: Bearer YOUR_KEY"
```

Response (`200`):

```json
{
  "as_of": "2026-09-08T14:20:11.474Z",
  "count": 3,
  "next_cursor": "eyJhZnRlcl9yYW5rIjoyLCJhZnRlcl90aWNrZXIiOiJBUExFIn0",
  "results": [
    { "ticker": "AAPL", "name": "Apple Inc.",                 "asset_class": "stocks", "asset_type": "CS", "exchange": "NASDAQ", "exchange_mic": "XNAS", "currency_name": "usd", "country": "us", "cik": "0000320193", "composite_figi": "BBG000B9XRY4", "list_date": "1980-12-12", "delisted_utc": null, "active": true },
    { "ticker": "APLE", "name": "Apple Hospitality REIT, Inc.", "asset_class": "stocks", "asset_type": "CS", "exchange": "NYSE",   "exchange_mic": "XNYS", "currency_name": "usd", "country": "us", "cik": "0001418121", "composite_figi": "BBG006473V72", "list_date": "2015-05-18", "delisted_utc": null, "active": true },
    { "ticker": "PNPL", "name": "Pineapple Inc.",             "asset_class": "stocks", "asset_type": "CS", "exchange": "OTC Link", "exchange_mic": null, "currency_name": "usd", "country": "us", "cik": "0001654672", "composite_figi": "BBG00LT9HZV4", "list_date": "2019-04-16", "delisted_utc": null, "active": true }
  ]
}
```

## Notes

- Covers ~21,082 US equities plus rates, FX and crypto — see [Tickers](/docs/tickers) for how each class is spelled.
- The identity row is `ticker`, `name`, `asset_class`, `asset_type`, `exchange`, `exchange_mic`, `currency_name`, `country`, `cik`, `composite_figi`, `list_date`, `delisted_utc`, `active` — the spec's identity category. This endpoint is to symbols what [`/v2/signals`](/docs/endpoints/signals/catalog) is to signals.
- This is the catalog, not a lookup. For the full state row of one symbol use [`GET /v2/tickers/{ticker}`](/docs/endpoints/tickers/state); for several at once put the list in the path — `GET /v2/tickers/AAPL,MSFT,NVDA` (up to 50). For every member of a universe use [`/v2/scan?universe=`](/docs/endpoints/scan/state). For who held a symbol at a past date, [`GET /v2/tickers/{ticker}?asof=`](/docs/endpoints/tickers/state#as-of).
- Before 2026-09-08 this endpoint also served full rows via `?tickers=` and `?universe=`, and `?asof=` meant symbol tenure. Those parameters now return a 400 naming the replacement — see the [changelog](/docs/changelog#tickers-catalog-state-split).
- Cursors are opaque base64url tokens. Pass `next_cursor` back unchanged as `?cursor=...` to walk forward.

---

Interactive sandbox + parameter editor: https://tickerbot.io/docs/endpoints/tickers/catalog
