Migrate from Finnhub
This guide is for developers who call the Finnhub 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 Finnhub.
Before you start
- Sign up and copy your API key from the dashboard.
- Pick a plan for each market you use on the pricing page.
- Read the REST quickstart for the response shape that every endpoint shares.
Using AI?
Paste this into Claude Code, Cursor, Codex, or any coding agent that can read files and fetch a URL:
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
Finnhub takes the range as Unix seconds in query parameters:
Massive takes dates in the path. Both dates are inclusive:
- Long ranges. Finnhub returns at most one month of intraday candles per call. Massive returns a next_url when there is more data. The Python client follows it for you.
- Rate limits. Paid Massive plans have no per-minute limit, so you can remove code that backs off on HTTP 429.
The response
Finnhub returns one array per field:
Massive returns one object per bar:
| Finnhub | Massive | Note |
|---|---|---|
| t[] | t | Finnhub uses Unix seconds. Massive uses Unix milliseconds |
| o[] | o | |
| h[] | h | |
| l[] | l | |
| c[] | c | |
| v[] | v | |
| None | vw | Volume-weighted average price |
| None | n | Number of trades |
| "s": "no_data" | No results | An empty range returns resultsCount of 0 |
Code that zips the arrays by index needs to loop over results instead.
Symbols
Stock tickers stay the same. Forex and crypto drop the venue.
| Finnhub | Massive |
|---|---|
| AAPL | AAPL |
| ^GSPC | I:SPX |
| OANDA:EUR_USD | C:EURUSD |
| BINANCE:BTCUSDT | X:BTCUSD. Massive crypto tickers quote in USD, not USDT |
| A non-US ticker with an exchange suffix | Not covered. Massive stocks are US listings only |
Finnhub has no options. Massive options use the OCC symbol with an O: prefix, such as O:SPY251219C00650000.
Prices
- Daily candles are split adjusted on both, so daily prices match.
- Finnhub intraday candles are as traded. Massive adjusts every timespan for splits by default, so set adjusted=false on minute bars to match.
Sources: Finnhub API documentation, Finnhub rate limits.
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.
| Finnhub endpoint | Massive endpoint |
|---|---|
| /stock/candle | Custom Bars |
| /quote | Single Ticker Snapshot |
| /stock/tick | Trades |
| /stock/bbo | Quotes |
| /search, /stock/symbol | All Tickers |
| /stock/profile2 | Ticker Overview |
| /stock/peers | Related Tickers |
| /stock/split, /stock/dividend | Splits, Dividends |
| /stock/financials, /stock/financials-reported | Massive statements are standardized, not as reported. Income Statements, Balance Sheets, Cash Flow Statements |
| /stock/metric | Ratios, for the latest trading day only. Compute history from the statements and bars |
| /company-news, /news | News |
| /stock/insider-transactions | Form 4 |
| /calendar/ipo | IPOs |
| /stock/earnings, /calendar/earnings | Benzinga Earnings, a paid add-on |
| /stock/recommendation, /stock/price-target | Benzinga Consensus Ratings, Analyst Ratings, paid add-ons |
| /indicator | SMA, EMA, RSI, MACD. Compute other indicators from bars |
| /forex/candle, /crypto/candle | Forex Custom Bars, Crypto Custom Bars |
| /forex/rates | Forex Full Market Snapshot, or Currency Conversion for one pair |
| /stock/market-status | Market Status |
| /stock/market-holiday | Market Holidays |
Massive currently doesn't have an equivalent for Finnhub's ESG scores, congressional trading, lobbying, patents, supply chain, or non-US listings. New data and features ship often, so check the product roadmap for what's planned.
Streaming
Finnhub streams trades from wss://ws.finnhub.io after you send {"type":"subscribe","symbol":"AAPL"}. Each message holds a data array of trades with s, p, t, and v.
On Massive, connect to wss://socket.massive.com/stocks, authenticate with a message, and subscribe to trades. For forex use quotes, and for crypto use trades on their own connections. See the WebSocket quickstart.
Finnhub's subscribe-news and subscribe-pr channels have no WebSocket equivalent. Poll News instead.
Bulk history
Finnhub offers monthly bulk files from its dashboard. On Massive, use flat files. Each file holds one day of trades, quotes, minute bars, or daily bars for every US stock.
SDKs
| Language | Finnhub | Massive |
|---|---|---|
| Python | finnhub-python | client-python |
| JavaScript | finnhub | client-js |
| Go | finnhub-go | client-go |
| Kotlin | Official Kotlin client | client-jvm |
| Ruby, PHP | Official clients | None. Call the REST API directly |
Sources
Finnhub details were checked against the Finnhub API documentation on October 29, 2026. Finnhub is a trademark of its owner. Massive is not affiliated with Finnhub.