Migrate from Tiingo

Port Tiingo calls to the Massive API

This guide is for developers who call the Tiingo REST or WebSocket API and want to run the same app on Massive. It maps each common endpoint to the Massive endpoint that replaces it, and lists the differences that change your results. To compare the two products before you switch, see Massive vs Tiingo.

Before you start

Using AI?

Paste this into Claude Code, Cursor, Codex, or any coding agent that can read files and fetch a URL:

Find every place my project calls Tiingo.
Switch those calls to the Massive REST API.
Read https://massive.com/docs/migration/guides/tiingo.md for the endpoint map and the differences to handle.
Read https://massive.com/docs/llms.txt for the rest of the API.
Read the API key from the MASSIVE_API_KEY environment variable.
Keep my function signatures and data shapes the same, and list anything Massive does not cover.

To let the agent check real responses while it works, connect the Massive MCP server. Massive also publishes skills and plugins for coding agents.

The request

Tiingo takes the key as Authorization: Token. Massive takes it as Authorization: Bearer. Both treat the start and end dates as inclusive. Tiingo puts the dates in query parameters. Massive puts them in the path.

curl "https://api.tiingo.com/tiingo/daily/AAPL/prices?startDate=2025-10-01&endDate=2025-10-03" \
  -H "Authorization: Token YOUR_API_KEY"
Massive
curl "https://api.massive.com/v2/aggs/ticker/AAPL/range/1/day/2025-10-01/2025-10-03?adjusted=false" \
  -H "Authorization: Bearer YOUR_API_KEY"
  • Long ranges. Tiingo returns the whole range in one response. Massive returns a next_url when there is more data. The Python client follows it for you.
  • Rate limits. Paid Massive plans have no hourly or daily call limit, so you can remove code that counts requests.

The response

Tiingo returns a list, with raw prices plus adj* fields adjusted for splits and dividends:

[
  {
    "date": "2025-10-01T00:00:00.000Z",
    "open": 255.04,
    "high": 258.79,
    "low": 254.93,
    "close": 255.45,
    "divCash": 0.0,
    "splitFactor": 1.0
  }
]

Massive returns one set of prices, chosen by adjusted:

{
  "results": [
    {
      "t": 1759291200000,
      "o": 255.04,
      "h": 258.79,
      "l": 254.93,
      "c": 255.45,
      "v": 48713940,
      "vw": 256.004,
      "n": 535581
    }
  ]
}
TiingoMassiveNote
datetTiingo uses an ISO 8601 string at midnight UTC. Massive uses Unix milliseconds, with daily bars at midnight ET
open, adjOpeno
high, adjHighh
low, adjLowl
close, adjClosec
volume, adjVolumev
divCash, splitFactorNoneUse Dividends and Splits
NonevwVolume-weighted average price
NonenNumber of trades

For intraday bars:

  • Volume grows. Tiingo's IEX endpoints count IEX trades only. Massive volume counts every US exchange.
  • No padded bars. Tiingo's forceFill fills empty intervals. Massive returns no bar for an interval with no trades.
  • No default interval. Tiingo IEX prices default to 5-minute bars. Massive asks for the multiplier and timespan in every request.

Symbols

TiingoMassive
AAPLAAPL
BRK-ABRK.A
eurusdC:EURUSD
btcusdX:BTCUSD

Tiingo has no options. Massive options use the OCC symbol with an O: prefix, such as O:SPY251219C00650000.

Prices

  • Set adjusted=false on Massive to match Tiingo's raw open, high, low, close, and volume.
  • No Massive setting matches the adj* fields, because they include dividends. Mapping adjClose to Massive c changes every value before the latest ex-dividend date. To rebuild dividend-adjusted prices, use the historical adjustment factor from Dividends.

Sources: Tiingo end-of-day API, IEX API, Tiingo pricing.

Endpoint map

This map covers the most common calls. It is not a full list. To find the Massive endpoint for another call, search these docs.

Tiingo endpointMassive endpoint
/tiingo/daily/<ticker>/pricesCustom Bars with timespan=day
/tiingo/daily/<ticker>/prices with no datesPrevious Day Bar, or Single Ticker Snapshot for today
/tiingo/daily/<ticker>Ticker Overview
/iex/<ticker>/pricesCustom Bars with timespan=minute or hour
/iex?tickers=...Unified Snapshot, or Full Market Snapshot for every ticker
/tiingo/crypto/pricesCrypto Custom Bars
/tiingo/crypto/topCrypto Quotes over WebSocket. Massive has no REST crypto quotes
/tiingo/fx/<pair>/pricesForex Custom Bars
/tiingo/fx/topForex Last Quote
/tiingo/newsNews
/tiingo/corporate-actions/<ticker>/distributionsDividends
/tiingo/corporate-actions/<ticker>/splitsSplits
/tiingo/fundamentals/<ticker>/statementsIncome Statements, Balance Sheets, Cash Flow Statements
/tiingo/fundamentals/<ticker>/dailyRatios, for the latest trading day only. Compute history from the statements and bars
/tiingo/utilities/searchAll Tickers with search

Massive currently doesn't have an equivalent for Tiingo fund fees or overnight BOATS data. New data and features ship often, so check the product roadmap for what's planned. Massive adds options, indices, futures, and trades and quotes from every US exchange.

Streaming

Tiingo streams from wss://api.tiingo.com/iex, /crypto, and /fx. Each message is a positional array, and the subscribe message carries your key. Massive streams named JSON fields, with one connection per asset class:

Tiingo streamMassive
iexwss://socket.massive.com/stocks, with trades, quotes, and minute bars
cryptowss://socket.massive.com/crypto, with trades and quotes
fxwss://socket.massive.com/forex, with quotes

Massive streams carry trades from every US exchange, not only IEX. See the WebSocket quickstart.

Bulk history

Tiingo has no bulk price download. To build a local history across many symbols, use Massive flat files. Each file holds one day of daily bars or minute bars for every US stock.

SDKs

Tiingo has no official client library. Its docs list community packages such as tiingo-python and riingo. Massive has official clients for Python, JavaScript, Go, and Kotlin/JVM.

Sources

Tiingo details were checked against the Tiingo API documentation on October 29, 2026. Tiingo is a trademark of its owner. Massive is not affiliated with Tiingo.

Did you find this page helpful?
Do you still need help with something?