Price doesn’t tell
the whole story.

Behind every candle, buyers and sellers leave a footprint. Fathom Charts makes it readable.
10 order flow indicators on futures, computed for you, delivered to your tools.

An API built for speed. Your indicators pushed over WebSocket on every trade, and the same calculations on historical data.

Market explorer DEMOFATHOM / NQ
NQZ6Nasdaq-100 futures
Loading the session…/ buy sell

Bubbles: traded volume · Footprint: bid / ask · Frame: most traded price (POC) · Prices in points

THE MARKET MOVES. YOUR TOOLS FOLLOW.

We compute your indicators and push them over WebSocket. No polling: the stream comes to you.
  1. CalculationServer-side, on every trade
  2. WebSocket APIupsert →
  3. Your toolsUpdated instantly
Delivery diagram · illustrative animationConnect my app ↗
messages replayed
0
Fathom Trades ≥ 20
0
contracts traded
0
demo
real session, replayed

Real trades, read by Fathom.

Replay of a real session · September 24, 2026

Less noise.
More context.

Not every trade matters. Move the Fathom Trades threshold to keep only the biggest ones. The chart follows, and so does your API request.

30
big trades kept
—
per hour (projected)
—
total contracts
—
data received (bytes)
—
FATHOM TRADES / 25 MIN≥ 30 CONTRACTS

Buy Sell · size = volume · grey dots = below the threshold

The same setting, on the API side
{
  "t": "subscribe",
  "sub": "bt",
  "instrument": "NQ.front",
  "indicator": "big-trades",
  "params": {
    "minimum": 30
  },
  "mode": "confirmed",
  "from": "live"
}

The stream keeps flowing.
Into your tools.

No more polling. The API pushes every update of your indicators over WebSocket, as it happens. The TypeScript SDK handles reconnection and resumes the stream right where it left off.

  • wss Your indicators in real time, over a single connection
  • REST The same calculations on historical data
  • NDJSON Compressed exports for your backtests
Connect my first stream
stream.ts
import { FathomChartsStream } from '@fathom-charts/sdk';
import type { BigTradesData } from './fathom-charts-types.js';

const stream = new FathomChartsStream({
  url: 'wss://stream.fathomcharts.com/v1',
  apiKey: process.env.FATHOM_CHARTS_API_KEY!,
});

const bigTrades = stream.subscribe<BigTradesData>({
  instrument: 'NQ.front',
  indicator: 'big-trades',
  params: { minimum: 30 },
  mode: 'confirmed',
});

for await (const event of bigTrades) {
  if (event.type === 'upsert') {
    console.log(event.data.side, event.data.volume, event.data.price);
  }
}

Start for free.
Go real time whenever you want.

Test your integration on the Sandbox, no credit card needed. Then add real time, historical data, or both: plans stack.

Scroll the table to see all three plans →

Fathom Charts plans and the limits enforced by the API
YOUR ACCESS

One engine.
At your pace.

01

Sandbox

Free

Your first integration, no commitment.

02

Live

Monthly subscription

Your indicators in real time, in your tools.

03

Historical

One-time purchase, lifetime access

The full history for your research and backtests.

WebSocket stream10-min delayReal time10-min delay
Concurrent connections151
Concurrent subscriptions2502
Custom configurations1251
Historical APILast 7 daysNot includedFull available history
Exports per monthNot includedNot included20 GB
REST requests per minute603001,200

Live + Historical: real time and the full history, with the higher limits of both plans.

Prices include tax: in euros in France and the rest of Europe, in US dollars elsewhere.

Create my free account Compute budget, quotas and technical details: Limits.

Before you
get started.

Where does the data come from?

Our indicators are computed from market trades delivered by Databento, a licensed distributor. If the source is delayed or down, the stream tells you: no data is ever made up or filled in.

How can I try it for free?

Create an account with your email address: you start on the Sandbox, no credit card needed. 10-minute delayed stream, 7 days of history, the same calculations as in real time. When you move to Live, just create a real-time key: your code stays the same.

How does payment work?

Live is a monthly subscription, Historical a one-time purchase with lifetime access. Prices include tax, in euros in France and the rest of Europe, in US dollars elsewhere. Customers billed in France pay through Stripe; everyone else pays through Creem, our merchant of record. Details in Plans and billing.

Can I redistribute the streams?

No. The indicators are derived from market data: they are for the account holder only, under the market data license terms included in our terms of use. Any distribution to third parties (public app, resale, display to your clients) requires a specific license agreement.

Does historical data match the real-time stream?

Yes. Both use the same trades and the same calculation engine, and we compare results field by field on real sessions. If a period is not covered, the API answers NOT_COVERED instead of returning partial data.

Which instruments are covered?

The futures streamed by the service, listed with their tick size by GET /v1/instruments. An alias such as NQ.front follows the active contract and switches at rollover, announced by a reset message.

What if my app reads too slowly?

The API merges pending provisional updates and never drops a final result. If your app stays stuck, the connection is closed and you resume from the last cursor received. Thresholds and resumption are covered in the WebSocket protocol.

Does Fathom Charts place orders?

No. Fathom Charts provides indicators to feed your analysis: it does not connect to your broker, never places orders and gives no investment advice.

Look beyond
the candles.

Volume. Pressure. The levels taking shape.
Plug them into your tools today, for free.