RESTful API

Equities, options, futures, and reference data through a single endpoint

Authenticate once, query any dataset algoseek has. JSON or CSV responses, standard REST conventions, one schema across every dataset.

algoseek API Reference

v1

api.algoseek.com

Get extended minute bars

GET

/us-equity/taq-1min-ext/:ticker

Returns minute bars with up to 90 fields per bar including VWAP, trade count, buy/sell volume, spread analytics, and order flow indicators.

ticker

REQUIRED

Path parameter. Ticker symbol (e.g. AAPL)

date

REQUIRED

Trading date (YYYY-MM-DD)

aggregation_logic

OPTIONAL

Aggregation logic variant (algoseek, no_finra_trf)

columns

OPTIONAL

Field set

response_format

OPTIONAL

json, csv, csv_gzip

ColumnName.operation

OPTIONAL

Filter by a specific column, e.g. TradeDate.eq (YYYY-MM-DD)

200

403

404

422

BarDateTime

TimeStamp

Bar start timestamp (EST)

Ticker

String

Symbol name

ASID

Integer

Unique security identifier

OpenBidPrice

Decimal

NBBO bid at bar open

OpenAskPrice

Decimal

NBBO ask at bar open

LastTradePrice

Decimal

Price of last trade

TotalVolumeWeightPrice

Decimal

VWAP from exchange and off-exchange FINRA/TRF trades

TotalVolume

Integer

Shares traded during the bar, including FINRA/TRF

TotalTrades

Integer

Total number of trades

RelativeSpreadAverage

Decimal

Average per-trade bid/ask spread relative to the midpoint, per minute

Showing 10 of 90 fields

import requests

url = "https://api.algoseek.com/api/v1/data/us-equity/eq-taq-1min-ext/AAPL"

params = {
  "columns": "BarDateTime,Ticker,ASID,OpenBidPrice,OpenAskPrice,LastTradePrice,TotalVolumeWeightPrice,TotalVolume,TotalTrades,RelativeSpreadAverage",
  "aggregation_logic": "algoseek",
  "TradeDate.gt": "2024-01-01",
  "TradeDate.lt": "2024-02-01",
  "response_format": "json"
}

headers = {"X-API-KEY": "<X-API-KEY>"}

response = requests.get(url, headers=headers, params=params)

print(response.json())

Response

{
"data": [
    {
      "BarDateTime": "2024-01-02 04:30:00",
      "Ticker": "AAPL",
      "ASID": 1010000000001033,
      "OpenBidPrice": 189.9,
      "OpenAskPrice": 189.95,
      "LastTradePrice": 189.94,
      "TotalVolumeWeightPrice": 189.93098,
      "TotalVolume": 367,
      "TotalTrades": 25,
      "RelativeSpreadAverage": 0.00025
    },
    ...
  ]
}
curl -X GET "https://api.algoseek.com/api/v1/data/us-equity/eq-taq-1min-ext/AAPL" \
    -H "X-API-KEY: <X-API-KEY>" \
    --get \
    -d "columns=BarDateTime,Ticker,ASID,OpenBidPrice,OpenAskPrice,LastTradePrice,TotalVolumeWeightPrice,TotalVolume,TotalTrades,RelativeSpreadAverage" \
    -d "aggregation_logic=algoseek" \
    -d "TradeDate.gt=2024-01-01" \
    -d "TradeDate.lt=2024-02-01" \
    -d "response_format=json"

Response

{
"data": [
    {
      "BarDateTime": "2024-01-02 04:30:00",
      "Ticker": "AAPL",
      "ASID": 1010000000001033,
      "OpenBidPrice": 189.9,
      "OpenAskPrice": 189.95,
      "LastTradePrice": 189.94,
      "TotalVolumeWeightPrice": 189.93098,
      "TotalVolume": 367,
      "TotalTrades": 25,
      "RelativeSpreadAverage": 0.00025
    },
    ...
  ]
}
const ticker = "AAPL";

const url = new URL(`https://api.algoseek.com/api/v1/data/us-equity/eq-taq-1min-ext/${ticker}`);

const params = {
  "columns": "BarDateTime,Ticker,ASID,OpenBidPrice,OpenAskPrice,LastTradePrice,TotalVolumeWeightPrice,TotalVolume,TotalTrades,RelativeSpreadAverage",
  "aggregation_logic": "algoseek",
  "TradeDate.gt": "2024-01-01",
  "TradeDate.lt": "2024-02-01",
  "response_format": "json"
};

url.search = new URLSearchParams(params).toString();

const requestOptions = {
  method: "GET",
  headers: { "X-API-KEY": "<X-API-KEY>", "Accept": "application/json" },
  redirect: "follow"
};

fetch(url, requestOptions)
  .then((response) => {
    if (!response.ok) throw new Error(`HTTP error! Status: ${response.status}`);
    return response.json();
  })
  .then((result) => console.log(result))
  .catch((error) => console.error("Fetch error:", error));

Response

{
"data": [
    {
      "BarDateTime": "2024-01-02 04:30:00",
      "Ticker": "AAPL",
      "ASID": 1010000000001033,
      "OpenBidPrice": 189.9,
      "OpenAskPrice": 189.95,
      "LastTradePrice": 189.94,
      "TotalVolumeWeightPrice": 189.93098,
      "TotalVolume": 367,
      "TotalTrades": 25,
      "RelativeSpreadAverage": 0.00025
    },
    ...
  ]
}
package main

import (
  "fmt"
  "io"
  "net/http"
  "net/url"
)

func main() {
  baseURL := "https://api.algoseek.com/api/v1/data/us-equity/eq-taq-1min-ext/AAPL"
  
  // Construct parameters
  params := url.Values{}
  params.Add("columns", "BarDateTime,Ticker,ASID,OpenBidPrice,OpenAskPrice,LastTradePrice,TotalVolumeWeightPrice,TotalVolume,TotalTrades,RelativeSpreadAverage")
  params.Add("aggregation_logic", "algoseek")
  params.Add("TradeDate.gt", "2024-01-01")
  params.Add("TradeDate.lt", "2024-02-01")
  params.Add("response_format", "json")
  
  // Append params to URL
  fullURL := fmt.Sprintf("%s?%s", baseURL, params.Encode())
  req, err := http.NewRequest("GET", fullURL, nil)
  
  if err != nil { panic(err) }
  
  req.Header.Add("X-API-KEY", "<X-API-KEY>")
  
  client := &http.Client{}
  res, err := client.Do(req)
  
  if err != nil { panic(err) }
  
  defer res.Body.Close()
  
  body, _ := io.ReadAll(res.Body)
  fmt.Println(string(body))
}

Response

{
"data": [
    {
      "BarDateTime": "2024-01-02 04:30:00",
      "Ticker": "AAPL",
      "ASID": 1010000000001033,
      "OpenBidPrice": 189.9,
      "OpenAskPrice": 189.95,
      "LastTradePrice": 189.94,
      "TotalVolumeWeightPrice": 189.93098,
      "TotalVolume": 367,
      "TotalTrades": 25,
      "RelativeSpreadAverage": 0.00025
    },
    ...
  ]
}

Why One API

Every vendor you add costs weeks before you see data

Onboarding a data vendor is never just an API call: connectivity, schema, authentication, rate limits, firewalls, and at larger firms legal, procurement, and security, repeated per vendor. With algoseek you do it once: one endpoint, one authentication, one schema across every asset class.

What’s Behind the API

The data matters more than the delivery method

20+ years of history

Tick, bar, and reference data back to 2007: the 2008 crisis, the 2020 crash, every regime between. Updated daily.

Security masters via API

ASID, FIGI, and ISIN cross-referencing through the API you already use. No reconciling identifiers across vendors.

Real-time and historical

Query the archive, add real-time from the same Mercury source when you go live. Same schema throughout.

Standard REST conventions

Predictable URL structure, standard HTTP methods, pagination, and error codes. JSON or CSV response formats. No proprietary SDK required.

Institutional rate limits

Built for pipelines pulling full universes, not hobby projects. A delivery method, not a metered product.

High-touch support

Engineers from the trading side who understand the data pick up. Not a ticket queue.

Endpoints

What you can query

GET

/us-equity/taq-1min/:ticker

Minute bars with up to 90 fields

GET

/us-equity/daily-ohlc/:ticker

Daily OHLCV bars

GET

/us-equity/trades/:trade_date/:ticker

Tick-level trade data

GET

/us-equity/taq/:trade_date/:ticker

NBBO and top-of-book quotes

GET

/us-equity-ref/sec-master

Security master lookups

GET

/us-equity-ref/adj-factors-detail

Corporate actions and adjustment factors

GET

/us-equity-opt/greeks-daily/:ticker

Greeks and implied volatility

Not Just an API

Four ways to access the same data

The RESTful API is one of four access methods. Every method hits the same underlying data, so your team can use whichever fits the workflow without worrying about consistency.

RESTful API

Programmatic

ArdaDB

Cloud SQL

Jupyter

Notebook

Download

S3 flat files

Start with the data, not the integration

Explore algoseek’s full archive in the Sandbox before writing a single line of integration code. No credit card needed.