WSS /ws/v1/quotes Live · Starter+

WebSocket Streaming — Live Quotes

Open a single connection, subscribe to a symbol list, and receive every bid/ask update push-style. No polling, no wasted requests — ideal for dashboards, alert engines, and execution bots that need quotes the instant they change.

Status: Live on the Starter plan and above. Pay-as-you-go keys cannot open the stream; on pay-as-you-go, use the REST /v1/quote endpoint for polling-based price reads.
Python websocket-client
stream.py
import websocket, json

def on_message(ws, message):
    data = json.loads(message)
    # Every server frame carries a type: authenticated, subscribed,
    # unsubscribed, quote, heartbeat, pong, error.
    if data.get("type") == "authenticated":
        ws.send(json.dumps({
            "action": "subscribe",
            "symbols": ["EURUSD", "XAUUSD", "BTCUSD"]
        }))
    elif data.get("type") == "quote":
        print(f"{data['symbol']}: bid={data['bid']} ask={data['ask']}")

def on_open(ws):
    # The first message must be auth, and it must arrive within 10
    # seconds or the server closes the socket with code 4001. The API
    # key is NOT a URL parameter — it is ignored there.
    ws.send(json.dumps({"action": "auth", "key": "YOUR_API_KEY"}))

ws = websocket.WebSocketApp(
    "wss://tickatlas.com/ws/v1/quotes",
    on_message=on_message,
    on_open=on_open,
)
ws.run_forever()
JavaScript Browser / Node.js
stream.js
const ws = new WebSocket(
  "wss://tickatlas.com/ws/v1/quotes"
);

ws.onopen = () => {
  // First message must be auth, within 10 seconds, or the server
  // closes with code 4001. The key is not accepted as a URL param.
  ws.send(JSON.stringify({ action: "auth", key: "YOUR_API_KEY" }));
};

ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  if (data.type === "authenticated") {
    ws.send(JSON.stringify({
      action: "subscribe",
      symbols: ["EURUSD", "XAUUSD", "BTCUSD"]
    }));
  } else if (data.type === "quote") {
    console.log(`${data.symbol}: ${data.bid} / ${data.ask}`);
  }
};

Connection lifecycle

  1. Connect to wss://tickatlas.com/ws/v1/quotes. The API key is not a URL parameter.
  2. Send {"action": "auth", "key": "YOUR_API_KEY"} as the first message. You have 10 seconds; after that the server closes the socket with code 4001.
  3. Wait for the authenticated frame, then send a subscribe message with the symbol list.
  4. Receive a quote message every time a subscribed symbol changes.
  5. Send unsubscribe or close the socket when done.
Quote message server → client
quote.json
{
  "type": "quote",
  "symbol": "EURUSD",
  "bid": 1.08432,
  "ask": 1.08443,
  "volume": 12345,
  "time": "2026-04-04T14:23:00Z"
}
Heads up: WebSocket streaming requires the Starter plan or higher and is unmetered: pushes do not count against your quota. See the WebSocket LP for per-plan symbol limits.