Skip to content

Tradeboard API Documentation

This directory documents the registered Tradeboard v1 REST API and the separate WebSocket protocol. The source of truth for REST registration is restx_api/__init__.py; request validation is defined in restx_api/schemas.py, restx_api/data_schemas.py, restx_api/account_schema.py, and restx_api/strategy_schema.py.

Base URLs

text
REST API:  http://127.0.0.1:5000/api/v1
WebSocket: ws://127.0.0.1:8765

Replace the local host with the configured HTTPS/WSS domain in a remote deployment.

Authentication

Most POST endpoints accept the Tradeboard API key as apikey in a JSON object. GET endpoints accept it as the apikey query parameter. Telegram and WhatsApp management endpoints may also accept X-API-KEY; the Telegram webhook authenticates with X-Telegram-Bot-Api-Secret-Token instead of an Tradeboard key.

json
{
  "apikey": "<your_app_apikey>"
}

Never put broker credentials or broker access tokens in these requests. The Tradeboard API key resolves the active broker session server-side.

Strict Request Validation

POST bodies are deserialized by marshmallow schemas that do not set Meta.unknown, so marshmallow's default of RAISE applies: a field the schema does not declare makes the whole request fail with HTTP 400, even when every other field is valid. Treat each endpoint page's request-body table as the exact allowed field set rather than a summary. The GTT place and modify schemas set unknown = EXCLUDE and silently drop extras instead; chart preferences sets unknown = INCLUDE because arbitrary preference keys are the point of that resource.

GET resources (/instruments, /ticker/<symbol>, /chart, /telegram/*) read query parameters directly and ignore unrecognized ones.

Registered REST Inventory

The current v1 surface contains 71 method/path pairs. A resource with both GET and POST counts as two endpoints.

Order Management

MethodPathDocumentation
POST/placeorderPlace order
POST/placesmartorderPlace smart order
POST/optionsorderOptions order
POST/optionsmultiorderOptions multi-order
POST/basketorderBasket order
POST/splitorderSplit order
POST/modifyorderModify order
POST/cancelorderCancel order
POST/cancelallorderCancel all orders
POST/closepositionClose positions
POST/placegttorderPlace GTT
POST/modifygttorderModify GTT
POST/cancelgttorderCancel GTT
POST/gttorderbookGTT order book

Order And Account Information

MethodPathDocumentation
POST/orderstatusOrder status
POST/openpositionOpen position
POST/fundsFunds
POST/marginMargin
POST/orderbookOrder book
POST/tradebookTrade book
POST/positionbookPosition book
POST/holdingsHoldings

Market Data And Symbols

MethodPathDocumentation
POST/quotesQuote
POST/multiquotesMultiple quotes
POST/depthMarket depth
POST/historyHistorical candles
POST/intervalsSupported intervals
GET/ticker/<string:symbol>Ticker-compatible history
POST/symbolSymbol information
POST/searchSymbol search
POST/expiryExpiry dates
GET/instrumentsInstrument master

Options Analytics

MethodPathDocumentation
POST/optionsymbolResolve option symbol
POST/optionchainOption chain
POST/syntheticfutureSynthetic future
POST/optiongreeksOption Greeks
POST/multioptiongreeksBatch option Greeks

Calendar, Analyzer, And Preferences

MethodPathDocumentation
POST/market/holidaysMarket holidays
POST/market/timingsMarket timings
POST/analyzerAnalyzer status
POST/analyzer/toggleToggle analyzer mode
POST/pnl/symbolsSandbox P&L by symbol
GET/chartRead chart preferences
POST/chartUpdate chart preferences
POST/pingAuthenticated ping

There is no public /api/v1/checkholiday endpoint. Use /market/timings for a date; its response identifies holiday/closed sessions through the returned market schedule.

Portfolio Analytics

MethodPathDocumentation
GET/portfolio/benchmarksPortfolio API
POST/portfolio/backtestPortfolio API
POST/portfolio/tearsheetPortfolio API
POST/portfolio/holdingsPortfolio API

Portfolio endpoints are authenticated and read-only. The holdings resource reads the active broker account, but none of these resources places, modifies, or cancels an order.

Strategy RMS Engine

The Strategy RMS Engine lifecycle and audit surface is under /strategy. It contains nine authenticated RESTX routes; strategy creation, editing, live enablement, token rotation, and deletion remain browser/session operations.

MethodPathDocumentation
POST/strategy/listList strategies
POST/strategy/statusStrategy status
POST/strategy/startStart run
POST/strategy/stopStop run
POST/strategy/close_allClose all legs
POST/strategy/close_legClose one leg
POST/strategy/runsRun history
POST/strategy/ordersOrder history
POST/strategy/eventsRisk event audit trail

The public alert endpoint is POST /strategy/webhook/<token>. It is deliberately outside /api/v1, uses the URL token rather than apikey, and is documented separately in Public Strategy Webhook. It is not included in the 71 RESTX route count above.

SIP Analytics

MethodPathDocumentation
GET/sip/frequenciesSIP Backtest
POST/sip/backtestSIP Backtest

/sip/backtest validates against SipBacktestSchema and requires a valid API key; source: "api" additionally requires a broker session. /sip/frequencies returns the frequency list the engine supports and is the one v1 resource that does not verify the API key. Both use SIP_API_RATE_LIMIT, default 10 per minute.

Messaging

MethodPathDocumentation
GET, POST/telegram/configTelegram REST surface
POST/telegram/startTelegram REST surface
POST/telegram/stopTelegram REST surface
POST/telegram/webhookTelegram REST surface
GET/telegram/usersTelegram REST surface
POST/telegram/broadcastTelegram REST surface
POST/telegram/notifyTelegram REST surface
GET/telegram/statsTelegram REST surface
GET, POST/telegram/preferencesTelegram REST surface
POST/whatsapp/notifyWhatsApp notification

The Telegram resource contributes 11 method/path pairs. Its webhook acknowledges validated updates but does not yet dispatch them, and the REST broadcast handler currently returns zero delivery counts. Those limitations are documented on the Telegram page.

WebSocket Protocol

WebSocket streaming is not mounted below /api/v1. Clients connect to the proxy on port 8765, authenticate, and send action messages.

ModeDocumentation
LTPLTP subscription
QuoteQuote subscription
DepthDepth subscription

Supported actions are authenticate, subscribe, unsubscribe, unsubscribe_all, subscribe_orders, unsubscribe_orders, get_broker_info, get_supported_brokers, and ping.

Order Constants

Exchanges

NSE, BSE, NFO, BFO, CDS, BCD, MCX, NCDEX, NCO, NSE_INDEX, BSE_INDEX, MCX_INDEX, GLOBAL_INDEX, and CRYPTO are recognized by the shared validation constants. Broker capability metadata determines which subset is usable for the active broker.

Products And Price Types

KindValues
ProductMIS, CNC, NRML
Price typeMARKET, LIMIT, SL, SL-M
ActionBUY, SELL (lowercase is normalized by order schemas)

Regular order, smart-order, basket, split, and modify schemas accept numeric quantities. Fractional quantities are allowed only for CRYPTO; non-crypto quantities must be whole numbers. Options order quantities remain positive integers.

Response And Status Conventions

Most JSON resources return status: "success" or status: "error", but broker payloads are normalized only at the wrapper level and some resources intentionally return CSV, plain text, or an empty webhook acknowledgement. Treat each endpoint page as authoritative for its payload.

Common status codes are:

CodeMeaning
200Request handled successfully
400Invalid JSON, schema validation failure, unsupported mode, or invalid request state
401Missing or invalid authentication on endpoints that use 401
403Invalid API key or operation blocked by mode/policy
404Broker module, symbol, order, or linked messaging user not found
429Flask-Limiter rejected the request
500Unhandled internal or broker error

Rate Limits

Defaults from .sample.env are API_RATE_LIMIT="50 per second", ORDER_RATE_LIMIT="10 per second", and SMART_ORDER_RATE_LIMIT="10 per second". Option Greeks, portfolio, SIP, Telegram, and WhatsApp resources each read their own variable, none of which appears in .sample.env, so their in-code fallbacks apply on a stock install. All values are deployment configuration and may contain compound semicolon-separated limits. See rate limiting.

Client Libraries

The Python client is available as tradeboard and is pinned by this application at 2.0.3. Go and Node.js examples in examples/ demonstrate direct REST integration; they are not declared here as separately versioned official SDK releases.