Holdings API
Retrieve comprehensive portfolio holdings data for authenticated users, including position details, profit/loss calculations, and collateral information.
Overview
The Holdings API provides complete visibility into a user's equity positions across multiple exchanges, enabling portfolio management and risk assessment capabilities. Holdings are consolidated by instrument, with support for multi-exchange trading symbols.
Endpoint Reference
Get User Holdings
Retrieve all current holdings for the authenticated user account.
Endpoint Details
Method: GET
URL: /user/holdings
Authentication: Required (appID + token)
Request Headers
| Header | Type | Required | Description |
|---|---|---|---|
appID |
string | ✓ | Your application identifier |
token |
string | ✓ | User authentication token |
Request Example
Response Schema
Success Response
The API returns a structured response containing an array of holding objects. Each holding represents a consolidated position across multiple exchanges where the instrument is traded.
{
"data": [
{
"symbols": [
{
"symbol": "GROWW",
"tradingSymbol": "GROWW-EQ",
"exchange": "NSE",
"token": "759806"
},
{
"symbol": "GROWW",
"tradingSymbol": "GROWW",
"exchange": "BSE",
"token": "1543603"
}
],
"avgPrice": "159.03",
"qty": "1",
"usedQty": "0",
"t1Qty": "0",
"depositoryQty": "1",
"collateralQty": "",
"brokerCollateralQty": "0.00",
"authorizedQty": "0",
"unPledgedQty": "0",
"nonPOAQty": "0",
"haircut": "16.62",
"effectiveQty": "1",
"sellableQty": "1",
"ltp": "",
"pnl": "",
"close": "157.33"
},
{
"symbols": [
{
"symbol": "IDEA",
"tradingSymbol": "IDEA-EQ",
"exchange": "NSE",
"token": "14366"
},
{
"symbol": "IDEA",
"tradingSymbol": "IDEA",
"exchange": "BSE",
"token": "1531822"
}
],
"avgPrice": "6.61",
"qty": "775",
"usedQty": "0",
"t1Qty": "4",
"depositoryQty": "771",
"collateralQty": "",
"brokerCollateralQty": "0.00",
"authorizedQty": "0",
"unPledgedQty": "0",
"nonPOAQty": "0",
"haircut": "27.07",
"effectiveQty": "775",
"sellableQty": "775",
"ltp": "",
"pnl": "",
"close": "9.93"
},
{
"symbols": [
{
"symbol": "BSE",
"tradingSymbol": "BSE-EQ",
"exchange": "NSE",
"token": "19585"
}
],
"avgPrice": "2367.66",
"qty": "2",
"usedQty": "0",
"t1Qty": "0",
"depositoryQty": "2",
"collateralQty": "",
"brokerCollateralQty": "0.00",
"authorizedQty": "0",
"unPledgedQty": "0",
"nonPOAQty": "0",
"haircut": "24.67",
"effectiveQty": "2",
"sellableQty": "2",
"ltp": "",
"pnl": "",
"close": "2886.60"
},
{
"symbols": [
{
"symbol": "GOLDETF",
"tradingSymbol": "GOLDETF-EQ",
"exchange": "NSE",
"token": "14286"
},
{
"symbol": "GOLDETF",
"tradingSymbol": "GOLDETF",
"exchange": "BSE",
"token": "1542781"
}
],
"avgPrice": "107.42",
"qty": "1",
"usedQty": "0",
"t1Qty": "0",
"depositoryQty": "1",
"collateralQty": "",
"brokerCollateralQty": "0.00",
"authorizedQty": "0",
"unPledgedQty": "0",
"nonPOAQty": "0",
"haircut": "12.50",
"effectiveQty": "1",
"sellableQty": "1",
"ltp": "",
"pnl": "",
"close": "125.03"
},
{
"symbols": [
{
"symbol": "YESBANK",
"tradingSymbol": "YESBANK-EQ",
"exchange": "NSE",
"token": "11915"
},
{
"symbol": "YESBANK",
"tradingSymbol": "YESBANK",
"exchange": "BSE",
"token": "1531648"
}
],
"avgPrice": "19.42",
"qty": "2",
"usedQty": "0",
"t1Qty": "0",
"depositoryQty": "2",
"collateralQty": "",
"brokerCollateralQty": "0.00",
"authorizedQty": "0",
"unPledgedQty": "0",
"nonPOAQty": "0",
"haircut": "16.90",
"effectiveQty": "2",
"sellableQty": "2",
"ltp": "",
"pnl": "",
"close": "22.45"
},
{
"symbols": [
{
"symbol": "SBIN",
"tradingSymbol": "SBIN-EQ",
"exchange": "NSE",
"token": "3045"
},
{
"symbol": "SBIN",
"tradingSymbol": "SBIN",
"exchange": "BSE",
"token": "1499112"
}
],
"avgPrice": "882.53",
"qty": "3",
"usedQty": "0",
"t1Qty": "0",
"depositoryQty": "3",
"collateralQty": "",
"brokerCollateralQty": "0.00",
"authorizedQty": "0",
"unPledgedQty": "0",
"nonPOAQty": "0",
"haircut": "12.50",
"effectiveQty": "3",
"sellableQty": "3",
"ltp": "",
"pnl": "",
"close": "973.10"
},
{
"symbols": [
{
"symbol": "GOLDBEES",
"tradingSymbol": "GOLDBEES-EQ",
"exchange": "NSE",
"token": "14428"
},
{
"symbol": "GOLDBEES",
"tradingSymbol": "GOLDBEES",
"exchange": "BSE",
"token": "1589095"
}
],
"avgPrice": "91.35",
"qty": "1",
"usedQty": "0",
"t1Qty": "0",
"depositoryQty": "1",
"collateralQty": "",
"brokerCollateralQty": "0.00",
"authorizedQty": "0",
"unPledgedQty": "0",
"nonPOAQty": "0",
"haircut": "12.50",
"effectiveQty": "1",
"sellableQty": "1",
"ltp": "",
"pnl": "",
"close": "106.72"
},
{
"symbols": [
{
"symbol": "NSDL",
"tradingSymbol": "NSDL",
"exchange": "BSE",
"token": "1543467"
}
],
"avgPrice": "1284.18",
"qty": "6",
"usedQty": "0",
"t1Qty": "0",
"depositoryQty": "6",
"collateralQty": "",
"brokerCollateralQty": "0.00",
"authorizedQty": "0",
"unPledgedQty": "0",
"nonPOAQty": "0",
"haircut": "14.46",
"effectiveQty": "6",
"sellableQty": "6",
"ltp": "",
"pnl": "",
"close": "1096.00"
}
],
"status": "success"
}
Response Fields
Root Object
| Field | Type | Description |
|---|---|---|
data |
array | Array of consolidated holding objects |
status |
string | Response status indicator |
Holding Object
| Field | Type | Description |
|---|---|---|
symbols |
array | Array of symbol objects representing the instrument across different exchanges |
avgPrice |
string | Average acquisition price across all positions |
qty |
string | Total quantity held across all exchanges |
effectiveQty |
string | Effective tradeable quantity |
sellableQty |
string | Quantity available for sale |
usedQty |
string | Quantity currently utilized |
t1Qty |
string | T+1 settlement quantity |
depositoryQty |
string | Quantity held in depository |
collateralQty |
string | Quantity pledged as collateral |
brokerCollateralQty |
string | Broker-pledged quantity |
authorizedQty |
string | Authorized quantity for trading |
unPledgedQty |
string | Unpledged quantity |
nonPOAQty |
string | Non-POA (Power of Attorney) quantity |
haircut |
string | Risk haircut percentage |
ltp |
string | Last traded price (may be empty) |
pnl |
string | Unrealized profit/loss amount (may be empty) |
close |
string | Previous day's closing price (may be empty) |
Symbol Object
Each holding contains a symbols array with objects representing the instrument on different exchanges:
| Field | Type | Description |
|---|---|---|
symbol |
string | Exchange-specific trading symbol |
exchange |
string | Exchange identifier (NSE, BSE, etc.) |
token |
string | Unique instrument token for the exchange |
Sample Portfolio Analysis
Based on the example response, here's a portfolio breakdown:
Portfolio Summary
Total Holdings: 2 consolidated positions
Exchanges: NSE, BSE (multi-exchange support)
P&L Status: Market data pending
Individual Holdings
- Exchanges: NSE (IDEA-EQ), BSE (IDEA)
- Total Quantity: 752 shares
- Avg Price: ₹6.53
- Haircut: 26.97%
- Status: Fully sellable
- Exchanges: NSE (YESBANK-EQ), BSE (YESBANK)
- Total Quantity: 2 shares
- Avg Price: ₹19.42
- Haircut: 17.88%
- Status: Fully sellable
Error Handling
The API follows standard HTTP status codes and returns structured error responses:
Common Issues
- 401 Unauthorized: Invalid or expired token
- 403 Forbidden: Insufficient permissions
- 429 Too Many Requests: Rate limit exceeded
- 500 Internal Server Error: Server-side processing error
Integration Notes
Best Practices
- Holdings are consolidated across exchanges - use the
symbolsarray to identify specific exchange tokens - Handle empty market data fields (
ltp,pnl,close) gracefully - Cache holdings data appropriately to minimize API calls
- Implement proper error handling and retry logic
- Use the
haircutfield for risk assessment calculations
Data Freshness
Holdings data is updated in real-time during market hours. Market data fields may be empty outside trading hours or during system maintenance. Position quantities and average prices are always available.