Pre-Calculated, Redis-Cached
Indicator values are computed server-side on every new candle. Your app queries the result — no TA library, no candle history needed.
wss://tickatlas.com/ws/v1/quotes streams M1 bid/ask data for subscribed symbols. Authenticate, subscribe, receive — no polling, no rate-limit gymnastics.
Indicator values are computed server-side on every new candle. Your app queries the result — no TA library, no candle history needed.
M1, M5, M15, M30, H1, H4, D1 — the same endpoint serves scalpers and position traders alike.
EURUSD, GBPUSD, XAUUSD, BTCUSD, USDJPY — data available for every symbol in our data.
const ws = new WebSocket("wss://tickatlas.com/ws/v1/quotes");
ws.onopen = () => {
ws.send(JSON.stringify({ action: "auth", key: "YOUR_API_KEY" }));
};
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
if (msg.type === "authenticated") {
ws.send(JSON.stringify({ action: "subscribe", symbols: ["EURUSD", "XAUUSD"] }));
} else if (msg.type === "quote") {
console.log(msg.symbol, "bid=" + msg.bid, "ask=" + msg.ask);
}
}; WebSocket pushes are unmetered on every plan: the server sends quotes without deducting anything from your daily quota. What the plan sets is how many symbols a connection can subscribe to:
Pushes never count against your quota. If your REST usage for the day goes over your plan's daily quota with overage off, the server closes the stream with code 4029 until the quota resets at midnight UTC.
import json, websocket
def on_open(ws):
ws.send(json.dumps({"action": "auth", "key": "YOUR_API_KEY"}))
def on_message(ws, raw):
msg = json.loads(raw)
if msg["type"] == "authenticated":
ws.send(json.dumps({"action": "subscribe",
"symbols": ["EURUSD", "XAUUSD"]}))
elif msg["type"] == "quote":
print(msg["symbol"], "bid", msg["bid"], "ask", msg["ask"])
ws = websocket.WebSocketApp(
"wss://tickatlas.com/ws/v1/quotes",
on_open=on_open, on_message=on_message,
)
ws.run_forever()
const ws = new WebSocket("wss://tickatlas.com/ws/v1/quotes");
ws.onopen = () => {
ws.send(JSON.stringify({ action: "auth", key: "YOUR_API_KEY" }));
};
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
if (msg.type === "authenticated") {
ws.send(JSON.stringify({
action: "subscribe",
symbols: ["EURUSD", "XAUUSD"],
}));
} else if (msg.type === "quote") {
console.log(msg.symbol, "bid=" + msg.bid, "ask=" + msg.ask);
}
};
| Plan | Price | WebSocket | Max Symbols | Credits / Push | Connections |
|---|---|---|---|---|---|
| Pay-As-You-Go | $0 + from $0.005/call | REST only | — | — | — |
| Starter | $29/mo | ✓ Included | 5 | 0 | 2 |
| Pro | $79/mo | ✓ Included | 20 | 0 | 2 |
| Enterprise | $349/mo | ✓ Included | unlimited | 0 | 2 |
Free / Pay-As-You-Go accounts can use the REST /v1/quotes endpoint for polling. WebSocket requires Starter or higher.
WebSocket access is included with all subscription plans. Choose the one that fits your symbol count and volume.
WebSocket streaming for up to 5 symbols; live price streaming spends no credits. Perfect for monitoring a focused watchlist.
Get StartedUp to 20 symbols; live price streaming spends no credits. Better economics for multi-pair strategies and dashboards.
Get StartedUnlimited symbols; live price streaming spends no credits. Dedicated support. Built for production trading systems.
Get StartedPlug into any stack
Every new account starts with $2.50 of pay-as-you-go credit and no card. Monthly plans add a flat monthly price, WebSocket streaming and support.
Landing pages convert; documentation closes the loop. These are the routes a developer usually needs next.
Start from the developer portal and map the API families your product needs.
Open docsMake the first authenticated request and validate the setup end to end.
Read quickstartRequest and response contracts for quote, indicator, summary and calendar.
Browse referenceHow the API drops into ChatGPT, Claude, Discord, n8n, Zapier and Sheets.
See integrationsStraight answers on limits, coverage and how the endpoint behaves in production.
M1 (1-minute) candle closes give you reliable OHLCV snapshots without the noise and bandwidth cost of raw ticks. For most algorithmic strategies, M1 is the fastest actionable timeframe. If you need tick-level data between candles, the REST /v1/ticks endpoint is available on the Pro and Enterprise plans.
You stop receiving data. When you reconnect, authenticate again and resubscribe. There is no message replay — you pick up from the next available quote.
Pushes never count against your quota. But if your REST usage for the day goes over your plan's daily quota with overage off, the server sends a quota_exceeded error and closes the connection with code 4029. It closes again on reconnect until the quota resets at midnight UTC, or you upgrade for a higher daily quota.
Yes, up to 2 concurrent WebSocket connections per account. If you try to open a third, the server rejects it with a connection_limit error.
Streaming is unmetered: pushed quotes cost no credits and do not count against your daily quota on any plan. What the plan sets is the symbol cap — 5 on Starter, 20 on Pro, unlimited on Enterprise. You pay only for REST calls.
Yes. The /v1/quotes REST endpoint returns the same data. If your WebSocket connection is unavailable, poll the REST endpoint at your desired interval. Many users keep a REST fallback in their reconnection logic.
Sign up, grab your API key, make your first request.
Every new account starts with $2.50 of pay-as-you-go credit. No card required.