Authenticate once per session
Log in through Arrow with user ID, password and TOTP. Arrow redirects back with a request-token, which you exchange for an access token by signing it with SHA-256. Both SDKs can also do this in a single auto_login call.
GET app.arrow.trade/app/login?appID=<APP_ID>
↳ redirect ?request-token=…&checksum=…
checkSum = sha256("appID:appSecret:request-token")
POST edge.arrow.trade/auth/app/authenticate-token
↳ { "status": "success", "data": { "token": … } }
Know every tradable instrument
A single call returns the full instrument list as CSV, covering NSE, BSE and MCX. The list is refreshed at 8:00 AM IST each day, so download it after that time to get the current tokens, lot sizes, price bands and expiries.
GET edge.arrow.trade/all
Exchange,Segment,Token,TradingSymbol,LotSize,TickSize,…
NSE,CM,2885,RELIANCE-EQ,1,0.10,…
NSE,CM,3045,SBIN-EQ,1,0.10,…
Send orders with one call
Place, modify and cancel regular orders with plain REST requests to edge.arrow.trade, authenticated by your appID and token headers. Margin endpoints let you check the capital an order needs before you send it.
POST /order/regular
PATCH /order/regular/{orderNo}
DELETE /order/regular/{orderNo}
GET /user/orders
POST /margin/order # margin before you send
Stream instead of polling
Three WebSocket feeds are available: one for market data, one for order updates, and an HFT-grade binary feed with a tick interval you can set as low as 50 ms. Subscribe to instruments once the socket is open.
wss://ds.arrow.trade # quotes & depth
wss://order-updates.arrow.trade # order lifecycle
wss://socket.arrow.trade # HFT binary · zstd
{ "code": "sub", "mode": "full", "latency": 200,
"symbols": ["NSE.SBIN-EQ"] }
Know exactly where you stand
Read your positions, holdings and available funds, and pull historical candles for backtesting. All of it uses the same authentication and the same response structure as the rest of the API.
GET /user/positions
GET /user/holdings
GET /user/limits
GET historical-api.arrow.trade/candle/nse/3045/day