Skip to content

Quickstart

This page walks you from a clean slate to a working /v1/quote call in five minutes. You will need a terminal with curl, and either Python 3.10+ or Node 18+ if you want to follow the language-specific examples.

Five steps

  1. Create an account. Go to oneapi.finance/signup and sign up with Google or email. No credit card is required for the free tier.

  2. Mint an API key. From the dashboard, click Create key, give it a name (such as local-dev), and copy the value. The key is shown exactly once. It looks like oa_live_abcd1234.... Treat it like a password.

  3. Test the key with curl. Replace oa_live_... with your key:

    Terminal window
    curl -H "Authorization: Bearer oa_live_..." \
    "https://api.oneapi.finance/v1/quote?symbol=AAPL"

    You should get back a JSON object with a quote field. If you see a 401, re-check the Authorization header. If you see a 429, you have hit the per-minute limit on the free tier and should wait a minute.

  4. Make the same call from your language of choice.

    Terminal window
    curl -H "Authorization: Bearer oa_live_..." \
    "https://api.oneapi.finance/v1/quote?symbol=AAPL"
  5. Batch up to eight symbols in one call. Use the symbols query param with a comma-separated list:

    Terminal window
    curl -H "Authorization: Bearer oa_live_..." \
    "https://api.oneapi.finance/v1/quote?symbols=AAPL,MSFT,GOOGL,AMZN"

    The response shape changes from { "quote": {...} } to { "quotes": { "AAPL": {...}, ... } }. See the batching recipe.

What you got back

A /v1/quote response for a single symbol looks like this:

{
"quote": {
"symbol": "AAPL",
"name": "Apple Inc.",
"exchange": "NASDAQ",
"currency": "USD",
"price": 175.43,
"open": 174.0,
"high": 176.1,
"low": 173.8,
"previousClose": 174.5,
"change": 0.93,
"changePercent": 0.53,
"volume": 52000000,
"avgVolume": 60000000,
"high52Week": 198.23,
"low52Week": 124.17,
"timestamp": "2026-05-04T20:00:00Z",
"meta": {
"source": "yahoo_query1",
"fetched_at": "2026-05-04T20:14:32Z"
}
}
}

Two fields deserve attention up front:

  • timestamp is the timestamp of the price tick, not when we fetched it.
  • meta.fetched_at is when our worker pulled the data from the upstream source.

The difference between those two values, plus our 15-minute delay window, tells you how fresh the price is. Read the delayed-data page to understand why this matters and how to use it.

What’s next