Skip to content

GET /v1/stocks

GET /v1/stocks

Returns paged listings from the canonical instrument universe. Useful for seeding a local catalog, building a screener pre-filter, or auditing coverage in a region you care about.

Request

GET /v1/stocks?exchange=NASDAQ&type=Common%20Stock HTTP/1.1
Host: api.oneapi.finance
Authorization: Bearer oa_live_<your_key>

Query parameters

ParamTypeRequiredNotes
exchangestringnoCanonical exchange code. See exchanges.
countrystringnoISO 3166 alpha-2.
typestringnoCommon Stock | ETF | Mutual Fund | Index | Crypto | FX | Bond.
statusstringnoactive (default) | delisted | unknown | all.
outputsizeintnoDefault 100. Cap 1,000.
cursorstringnoContinuation cursor from a prior response.

Response

{
"instruments": [
{
"symbol": "AAPL",
"name": "Apple Inc.",
"exchange": "NASDAQ",
"mic": "XNAS",
"type": "Common Stock",
"country": "US",
"currency": "USD",
"isin": "US0378331005",
"figi": "BBG000B9XRY4",
"cik": "0000320193",
"status": "active"
}
],
"next_cursor": "eyJsYXN0X3N5bWJvbCI6IkFBUEwifQ=="
}

Field reference

Top level:

FieldTypeNotes
instrumentsarrayPage of instrument rows. Order is stable across paginated calls.
next_cursorstring | nullPass back as cursor= to retrieve the next page. null when exhausted.

Each instrument row mirrors the columns of the instruments table in our schema. See the migration file for the authoritative shape.

Pagination

Unlike the time-series endpoints, /v1/stocks uses cursor pagination because the underlying universe is large enough that windowed queries do not make sense. The cursor is opaque (do not parse it). Loop until next_cursor is null:

def all_us_common_stock(api_key: str):
cursor = None
while True:
params = {"exchange": "NASDAQ", "type": "Common Stock", "outputsize": 1000}
if cursor:
params["cursor"] = cursor
r = httpx.get(
"https://api.oneapi.finance/v1/stocks",
params=params,
headers={"Authorization": f"Bearer {api_key}"},
timeout=30.0,
)
r.raise_for_status()
body = r.json()
yield from body["instruments"]
cursor = body.get("next_cursor")
if cursor is None:
break

Examples

Terminal window
# First page of NASDAQ common stock
curl -H "Authorization: Bearer oa_live_..." \
"https://api.oneapi.finance/v1/stocks?exchange=NASDAQ&type=Common%20Stock&outputsize=1000"
# All German listings
curl -H "Authorization: Bearer oa_live_..." \
"https://api.oneapi.finance/v1/stocks?country=DE&outputsize=1000"
# Including delisted
curl -H "Authorization: Bearer oa_live_..." \
"https://api.oneapi.finance/v1/stocks?exchange=NASDAQ&status=all"

Errors

StatuscodeWhen
400bad_requestUnknown type or status.
401unauthenticatedMissing or invalid API key.
429rate_limitSee rate limits.

See also