TickAtlas
Granular Market Data

Millisecond-Resolution Tick Data

Candlesticks are summaries. Ticks are reality. Our /v1/ticks endpoint delivers every individual price change with bid, ask, and millisecond timestamps — the raw data that candles are built from.

ms

Timestamp Precision

Bid+Ask

Both Sides Captured

50+

Symbols Available

Starter+

Plan Requirement

Why Tick Data Matters

Candles hide what ticks reveal

OHLCV Candle (1 Minute)

candle
Open:  1.08432
High:  1.08456
Low:   1.08421
Close: 1.08443
Vol:   847

5 values. You know the range. You do not know the path.

Tick Data (Same Minute)

ticks
14:32:00.142   1.08432 / 1.08440
14:32:00.387   1.08435 / 1.08443
14:32:01.102   1.08421 / 1.08429
14:32:01.445   1.08425 / 1.08433
14:32:02.891   1.08456 / 1.08464
... 842 more ticks ...
14:32:59.773   1.08443 / 1.08451

847 data points. You know exactly how price got from A to B.

API Response Format

REQUEST
GET /v1/ticks?symbol=EURUSD&limit=5
200 OK
{
  "success": true,
  "data": {
    "symbol": "EURUSD",
    "ticks": [
      {
        "time": "2026-03-27T14:32:00.142Z",
        "bid": 1.08432,
        "ask": 1.0844,
        "spread": 0.8
      },
      {
        "time": "2026-03-27T14:32:00.387Z",
        "bid": 1.08435,
        "ask": 1.08443,
        "spread": 0.8
      },
      {
        "time": "2026-03-27T14:32:01.102Z",
        "bid": 1.08421,
        "ask": 1.08429,
        "spread": 0.8
      },
      {
        "time": "2026-03-27T14:32:01.445Z",
        "bid": 1.08425,
        "ask": 1.08433,
        "spread": 0.8
      },
      {
        "time": "2026-03-27T14:32:02.891Z",
        "bid": 1.08456,
        "ask": 1.08464,
        "spread": 0.8
      }
    ],
    "count": 5
  }
}

Use Cases

What you can build with tick-level resolution

  • Custom Candle Aggregation

    Build non-standard candles: tick charts (every N ticks), volume bars, range bars, Renko, or Heikin-Ashi from raw tick data. Any candle type you can imagine.

  • Spread Microstructure

    Analyze how spreads widen and narrow tick-by-tick around news events, session opens, and liquidity changes. Find patterns invisible on candle charts.

  • High-Frequency Strategies

    Market making, statistical arbitrage, and momentum-on-ticks strategies all require tick-level data. This endpoint gives you what you need.

  • Execution Quality Analysis

    Compare your fill prices against the tick stream to measure slippage. Did your broker fill you at the best available price? The tick data tells you.

  • ML Training Data

    Machine learning models trained on tick data capture patterns that candle-trained models miss. Feed raw ticks into LSTMs, transformers, or reinforcement learning agents.

  • Volume Profile / VWAP

    Calculate precise VWAP, volume-at-price profiles, and delta volume from tick data. These metrics are meaningless without tick-level granularity.

Code Examples

Python Build custom 100-tick candles
python
import requests

resp = requests.get(
    "https://tickatlas.com/v1/ticks",
    headers={"X-API-Key": "YOUR_API_KEY"},
    params={"symbol": "EURUSD", "limit": 500}
)
ticks = resp.json()["data"]["ticks"]

# Build 100-tick candles
candles = []
for i in range(0, len(ticks), 100):
    chunk = ticks[i:i+100]
    bids = [t["bid"] for t in chunk]
    candles.append({
        "open": bids[0],
        "high": max(bids),
        "low": min(bids),
        "close": bids[-1],
        "ticks": len(chunk),
        "time": chunk[0]["time"]
    })

for c in candles:
    print(f"{c['time']}: O={c['open']} "
          f"H={c['high']} L={c['low']} C={c['close']}")
JavaScript Spread analysis on every tick
javascript
const res = await fetch(
  "https://tickatlas.com/v1/ticks" +
  "?symbol=XAUUSD&limit=200",
  { headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const { data } = await res.json();

// Analyze spread distribution
const spreads = data.ticks.map(t => t.spread);
const avg = spreads.reduce((a, b) => a + b) / spreads.length;
const max = Math.max(...spreads);
const min = Math.min(...spreads);

console.log(`Spread: avg=${avg.toFixed(1)}, `
  + `min=${min}, max=${max}`);

// Detect spread spikes (>2x average)
const spikes = data.ticks.filter(
  t => t.spread > avg * 2
);
console.log(`Spread spikes: ${spikes.length}`);

Available on Starter Plan and Above

Tick data requires significant storage and bandwidth. It is available on Starter ($29/mo), Pro ($79/mo), and Enterprise ($349/mo) plans. The Trial plan includes candle and quote data but not raw ticks.

Frequently Asked Questions

How many ticks can I retrieve per call?

Up to 1,000 ticks per request via the limit parameter. For larger datasets, paginate using the from timestamp parameter.

How long is tick data retained?

Tick data is retained for the past 24 hours on Starter, 48 hours on Pro, and 7 days on Enterprise. For longer retention, download and store ticks locally.

What is the typical tick frequency?

It depends on the symbol and market session. EURUSD during London-NY overlap averages 10-30 ticks per second. During Sydney session it may drop to 1-5 ticks per second.

Does each tick request count against my quota?

Yes, each call to /v1/ticks counts as 1 request toward your plan quota regardless of how many ticks are returned (up to the 1,000 limit).

Is WebSocket streaming available for ticks?

WebSocket streaming is on our roadmap for Pro and Enterprise plans. Currently, tick data is available via REST polling. Check our changelog for updates.

See Every Price Change. Miss Nothing.

Get tick-level market data for the strategies that demand the highest resolution.

14-day free trial / Tick data on Starter+ plans / Cancel anytime