Websockets

OpenAlgo WebSocket Protocol Documentation

Overview

The OpenAlgo WebSocket protocol allows clients to receive real-time market data using a standardized and broker-agnostic interface. It supports data streaming for LTP (Last Traded Price), Quotes (OHLC + Volume), and Market Depth (up to 50 levels depending on broker capability).

The protocol ensures efficient, scalable, and secure communication between client applications (such as trading bots, dashboards, or analytics tools) and the OpenAlgo platform. Authentication is handled using the OpenAlgo API key, and subscriptions are maintained per session.

Version

  • Protocol Version: 1.0

  • Last Updated: May 28, 2025

  • Platform: OpenAlgo Trading Framework

WebSocket URL

ws://<host>:8765

Replace <host> with the IP/domain of your OpenAlgo instance. For local development setups, use thee hostname as127.0.0.1

ws://127.0.0.1:8765

In the production ubuntu server if your host is https://yourdomain.com then

WebSocket url will be

wss://yourdomain.com/ws

In the production ubuntu server if your host is https://sub.yourdomain.com then

WebSocket url will be

wss://sub.yourdomain.com/ws

Authentication

All WebSocket sessions must begin with API key authentication:

{
  "action": "authenticate", 
  "api_key": "YOUR_OPENALGO_API_KEY"
}

On success, the server confirms authentication. On failure, the connection is closed or an error message is returned.

Data Modes

Clients can subscribe to different types of market data using the mode parameter. Each mode corresponds to a specific level of detail:

Mode
Description
Details

1

LTP Mode

Last traded price and timestamp only

2

Quote Mode

Includes OHLC, LTP, volume, change, etc.

3

Depth Mode

Includes buy/sell order book (5–50 levels)

Note: Mode 3 supports optional parameter depth_level to define the number of depth levels requested (e.g., 5, 20, 30, 50). Actual support depends on the broker.

Subscription Format

Basic Subscription

{
  "action": "subscribe",
  "symbol": "RELIANCE",
  "exchange": "NSE",
  "mode": 1
}

Depth Subscription (with levels)

{
  "action": "subscribe",
  "symbol": "RELIANCE",
  "exchange": "NSE",
  "mode": 3,
  "depth_level": 5
}

Unsubscription

To unsubscribe from a stream:

{
  "action": "unsubscribe",
  "symbol": "RELIANCE",
  "exchange": "NSE",
  "mode": 2
}

Error Handling

If a client requests a depth level not supported by their broker:

{
  "type": "error",
  "code": "UNSUPPORTED_DEPTH_LEVEL",
  "message": "Depth level 50 is not supported by broker Angel for exchange NSE",
  "symbol": "RELIANCE",
  "exchange": "NSE",
  "requested_mode": 3,
  "requested_depth": 50,
  "supported_depths": [5, 20]
}

Market Data Format

LTP (Mode 1)

{
  "type": "market_data",
  "mode": 1,
  "topic": "RELIANCE.NSE",
  "data": {
    "symbol": "RELIANCE",
    "exchange": "NSE",
    "ltp": 1424.0,
    "timestamp": "2025-05-28T10:30:45.123Z"
  }
}

Quote (Mode 2)

{
  "type": "market_data",
  "mode": 2,
  "topic": "RELIANCE.NSE",
  "data": {
    "symbol": "RELIANCE",
    "exchange": "NSE",
    "ltp": 1424.0,
    "change": 6.0,
    "change_percent": 0.42,
    "volume": 100000,
    "open": 1415.0,
    "high": 1432.5,
    "low": 1408.0,
    "close": 1418.0,
    "last_trade_quantity": 50,
    "avg_trade_price": 1419.35,
    "timestamp": "2025-05-28T10:30:45.123Z"
  }
}

Depth (Mode 3 with depth_level = 5)

{
  "type": "market_data",
  "mode": 3,
  "depth_level": 5,
  "topic": "RELIANCE.NSE",
  "data": {
    "symbol": "RELIANCE",
    "exchange": "NSE",
    "ltp": 1424.0,
    "depth": {
      "buy": [
        {"price": 1423.9, "quantity": 50, "orders": 3},
        {"price": 1423.5, "quantity": 35, "orders": 2},
        {"price": 1423.0, "quantity": 42, "orders": 4},
        {"price": 1422.5, "quantity": 28, "orders": 1},
        {"price": 1422.0, "quantity": 33, "orders": 5}
      ],
      "sell": [
        {"price": 1424.1, "quantity": 47, "orders": 2},
        {"price": 1424.5, "quantity": 39, "orders": 3},
        {"price": 1425.0, "quantity": 41, "orders": 4},
        {"price": 1425.5, "quantity": 32, "orders": 2},
        {"price": 1426.0, "quantity": 30, "orders": 1}
      ]
    },
    "timestamp": "2025-05-28T10:30:45.123Z",
    "broker_supported": true
  }
}

Heartbeat and Reconnection

  • Server sends ping messages every 30 seconds.

  • Clients must respond with pong or will be disconnected.

  • Upon reconnection, clients must re-authenticate and re-subscribe to streams.

  • Proxy may automatically restore prior subscriptions if supported by broker.

Security & Compliance

  • All clients must authenticate with an API key.

  • Unauthorized or malformed requests are rejected.

  • Rate limits may apply to prevent abuse.

  • TLS encryption recommended for production deployments.

The OpenAlgo WebSocket feed provides a reliable and structured method for receiving real-time trading data. Proper mode selection and parsing allow efficient integration into trading algorithms and monitoring systems.

Last updated