smartapi-angel-one — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited smartapi-angel-one (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
| Need | Go to section |
|---|---|
| Login & tokens | [Session Flow] |
| Place / modify / cancel | [Order Management] |
| Real-time price / quote | [Market Data] |
| OHLC candlestick history | [Historical Data] |
| Holdings & positions | [Portfolio] |
| Conditional (GTT) orders | [GTT Orders] |
| Live streaming | [WebSocket] |
| Margin / brokerage calc | [Utilities] |
| Error codes | [Error Handling] |
For full endpoint field references, read references/endpoints.md.
Current: https://apiconnect.angelone.in/rest
Legacy: https://apiconnect.angelbroking.com/rest
GTT: https://apiconnect.angelone.in/gtt-service/restAll paths below are relative to the Current base URL unless noted otherwise.
Every integration must follow this lifecycle:
1. POST /auth/angelbroking/user/v1/loginByPassword → jwtToken, refreshToken, feedToken
2. Include jwtToken in Authorization header for all secure calls
3. On JWT expiry → POST /auth/angelbroking/jwt/v1/generateTokens
4. POST /secure/angelbroking/user/v1/logout → end sessionContent-Type: application/json
Accept: application/json
Authorization: Bearer <jwtToken>
X-UserType: USER
X-SourceID: WEB
X-ClientLocalIP: 127.0.0.1
X-ClientPublicIP: <your public IP>
X-MACAddress: 00:00:00:00:00:00
X-PrivateKey: <API key from SmartAPI portal>💡X-ClientLocalIP,X-ClientPublicIP,X-MACAddresscan use placeholder values during development.
POST /auth/angelbroking/user/v1/loginByPassword{ "clientcode": "AB1234", "password": "mypassword", "totp": "123456" }Response tokens:
jwtToken → Authorization: Bearer headerrefreshToken → regenerate expired JWTfeedToken → WebSocket streamingPOST /auth/angelbroking/jwt/v1/generateTokens
{ "refreshToken": "r_ABC123..." }POST /secure/angelbroking/order/v1/placeOrder{
"variety": "NORMAL",
"tradingsymbol": "TCS-EQ",
"symboltoken": "12345",
"transactiontype": "BUY",
"exchange": "NSE",
"ordertype": "MARKET",
"producttype": "DELIVERY",
"duration": "DAY",
"quantity": 1,
"price": 0,
"triggerprice": 0,
"disclosedquantity": 0
}Returns: { "data": { "orderid": "...", "uniqueorderid": "..." } }
⚠️ Save uniqueorderid — required for tracking individual order status.Key field values:
variety: NORMAL | AMO | SLordertype: MARKET | LIMIT | SL | SL-Mproducttype: DELIVERY | CARRYFORWARD | MISduration: DAY | IOC | FILL_OR_KILLprice: Set 0 for MARKET orderstriggerprice: Required for SL and SL-MPOST /secure/angelbroking/order/v1/modifyOrder # same fields + "orderid"
POST /secure/angelbroking/order/v1/cancelOrderGET /secure/angelbroking/order/v1/details/{uniqueorderid} # preferred (10 req/s)
GET /secure/angelbroking/order/v1/getOrderBook # all orders (~1 req/s)
GET /secure/angelbroking/order/v1/getTradeBook # executed trades
GET /secure/angelbroking/order/v1/getPosition # open positions💡 Always prefer `/details/{uniqueorderid}` over polling the full order book — 10x higher rate limit.
POST /secure/angelbroking/order/v1/searchScrip
{ "exchange": "NSE", "searchscrip": "TCS" }Returns tradingsymbol, exchange, symboltoken. Always resolve symboltoken before placing orders.
POST /secure/angelbroking/order/v1/getLtpData
{ "exchange": "NSE", "symboltoken": ["2885", "26000"] }POST /secure/angelbroking/market/v1/quote
{ "mode": "snapshot", "exchangeTokens": ["12345"] }| Endpoint | Description |
|---|---|
POST /marketData/v1/optionGreek | Delta, Gamma, Theta, Vega |
POST /marketData/v1/gainersLosers | Top gainers/losers |
GET /marketData/v1/putCallRatio | NIFTY PCR |
POST /marketData/v1/OIBuildup | OI buildup for indices |
GET /marketData/v1/nseIntraday | NSE intraday data |
POST /secure/angelbroking/historical/v1/getCandleData
{
"exchange": "NSE",
"symboltoken": "12345",
"interval": "ONE_DAY",
"fromdate": "2024-01-01 09:15",
"todate": "2024-01-31 15:30"
}Intervals: ONE_MINUTE | FIVE_MINUTE | ONE_HOUR | ONE_DAY Response: Array of [timestamp, open, high, low, close, volume]
POST /secure/angelbroking/historical/v1/getOIDataSame structure as getCandleData; returns oi and changeinOi per bucket.
GET /secure/angelbroking/portfolio/v1/getHolding # equity holdings
GET /secure/angelbroking/portfolio/v1/getAllHolding # all segments⚠️ GTT endpoints use a different base URL prefix: https://apiconnect.angelone.in/gtt-service/rest/secure/angelbroking/gtt/v1/POST /gtt-service/rest/secure/angelbroking/gtt/v1/createRule
{
"tradingsymbol": "TCS-EQ", "symboltoken": "12345", "exchange": "NSE",
"transactiontype": "BUY", "ordertype": "MARKET", "producttype": "DELIVERY",
"price": 0, "quantity": 1, "triggerPrice": 2300,
"disclosedquantity": 0, "scripConsent": "yes"
}| Action | Method | Path suffix | Key Body |
|---|---|---|---|
| Modify | POST | modifyRule | same fields + "id": <rule_id> |
| Cancel | POST | cancelRule | { "id": <rule_id> } |
| Details | POST | ruleDetails | { "id": <rule_id> } |
| List | POST | ruleList | { "status": ["ACTIVE"], "page": 1, "count": 10 } |
URL: wss://smartapisocket.angelone.in/smart-stream
Auth: feedToken from login response
Topics: real-time market quotes, order status notificationsPOST /secure/angelbroking/margin/v1/batch # margin for a batch of orders
POST /secure/angelbroking/brokerage/v1/estimateCharges # brokerage + tax breakdownAll responses share this envelope:
{
"status": true,
"message": "SUCCESS",
"errorCode": "",
"data": { }
}Always check "status": true before reading data.
| Code Range | Meaning |
|---|---|
| AG8001–8005 | Auth / authorization errors |
| AG8002 | Invalid input parameters |
| AG5000 | Server-side errors |
| Operation | Limit |
|---|---|
| Place / Modify / Cancel order | 20 req/s |
| Individual order status | 10 req/s |
| Order book (full) | ~1 req/s |
| Historical / market data | Generous |
symboltoken via searchScrip before every orderuniqueorderid (not orderid) to track individual order statusprice: 0 for MARKET orders; always set triggerprice for SL/SL-MruleList results using page + countRead references/endpoints.md for complete request/response field tables for every endpoint.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.