Demat Insights

1 endpoint · WealthSync API

POST

/pfm/api/v2/demat/holdings

#

Get demat holdings for equities and ETFs.

docs.signcare.io/wealthsync/api/demat-insights/#post-pfm-api-v2-demat-holdings

This API returns consolidated demat holdings across multiple FI types (Equity, ETF, REIT, INVIT, etc.). The response includes total demat accounts, current value, one-day returns, and a per-demat breakdown with broker info, individual holdings (ISIN, units, last traded price, market cap category), and portfolio weightage.

Request Body Parameters:

→ uniqueIdentifier (required): The primary identifier added at the time of subscription. It must be the exact same value used during the initial subscription and MUST never change for this user.

→ dematFiTypes (required): Array of FI type strings to include.

Allowed(e.g., "DEPOSIT", "TERM_DEPOSIT", "RECURRING_DEPOSIT", "SIP", "CP", "GOVT_SECURITIES", "EQUITIES", "BONDS", "DEBENTURES", "MUTUAL_FUNDS", "ETF", "IDR", "CIS", "AIF", "INSURANCE_POLICIES", "GENERAL_INSURANCE", "LIFE_INSURANCE", "NPS", "INVIT", "REIT", "GSTR1_3B", "OTHER").

→ filterZeroValueAccounts (optional): String value "true" to exclude demat accounts with zero value. Send it as a string ("true" or "false"), not a JSON boolean. Default: "false".

→ filterZeroValueHoldings (optional): String value "true" to exclude holdings with zero value. Send it as a string ("true" or "false"), not a JSON boolean. Default: "false".

Headers

  • X-API-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.
  • Content-Type
    stringrequired
    application/json

Body parameters

application/json
  • uniqueIdentifier
    stringrequired
    Required. Your identifier for the user, exactly as sent when the user was subscribed. Never changes for a user. Non-empty string.
    minLength 1default user-12345
  • dematFiTypes
    array<string>required
    Required. List of FI types to include (upper case), for example EQUITIES, ETF, REIT. Allowed: DEPOSIT┃TERM_DEPOSIT┃RECURRING_DEPOSIT┃SIP┃CP┃GOVT_SECURITIES┃EQUITIES┃BONDS┃DEBENTURES┃MUTUAL_FUNDS┃ETF┃IDR┃CIS┃AIF┃INSURANCE_POLICIES┃GENERAL_INSURANCE┃LIFE_INSURANCE┃NPS┃INVIT┃REIT┃GSTR1_3B┃OTHER
    nullabledefault ["EQUITIES","ETF"]
  • filterZeroValueAccounts
    stringoptional
    Optional. Send the string "true" to exclude accounts with zero current value. Default: "false".
    nullable
  • filterZeroValueHoldings
    stringoptional
    Optional. Send the string "true" to exclude holdings with zero current value. Default: "false".
    nullable
Sample request body
{ "uniqueIdentifier": "user-12345", "dematFiTypes": [ "EQUITIES", "ETF" ] }

Responses

200OK
  • totalFiData
    integer (int32)optional
    No description.
  • totalFiDataToBeFetched
    integer (int32)optional
    No description.
  • totalEquityDematAccounts
    integer (int32)optional
    No description.
  • totalETFDematAccounts
    integer (int32)optional
    No description.
  • currentValue
    number (double)optional
    No description.
  • demat
    array<object>optional
    No description.
    nullable
    Each item: 14 fields
    • dematId
      integer (int64)optional
      No description.
      nullable
    • brokerId
      stringoptional
      No description.
      nullable
    • brokerName
      stringoptional
      No description.
      nullable
    • brandName
      stringoptional
      No description.
      nullable
    • fiDataId
      stringoptional
      No description.
      nullable
    • fipId
      stringoptional
      No description.
      nullable
    • maskedAccNumber
      stringoptional
      No description.
      nullable
    • accountRefNumber
      stringoptional
      No description.
      nullable
    • currentValue
      number (double)optional
      No description.
    • holdings
      array<object>optional
      No description.
      nullable
      Each item: 17 fields
      • issuerName
        stringoptional
        No description.
        nullable
      • schemeName
        stringoptional
        No description.
        nullable
      • isin
        stringoptional
        No description.
        nullable
      • isinDescription
        stringoptional
        No description.
        nullable
      • bseSymbol
        stringoptional
        No description.
        nullable
      • nseSymbol
        stringoptional
        No description.
        nullable
      • marketCapCategory
        stringoptional
        No description.
        nullable
      • units
        number (double)optional
        No description.
        nullable
      • lastTradedPrice
        number (double)optional
        No description.
        nullable
      • lastFetchTime
        string (date-time)optional
        No description.
        nullable
      • currentValue
        number (double)optional
        No description.
        nullable
      • prevDetails
        objectoptional
        No description.
        6 fields
        • percentageChange
          number (double)optional
          No description.
          nullable
        • priceChange
          number (double)optional
          No description.
          nullable
        • lastFetchTime
          string (date-time)optional
          No description.
          nullable
        • holdingIsin
          stringoptional
          No description.
          nullable
        • totalUnits
          number (double)optional
          No description.
          nullable
        • currentValue
          number (double)optional
          No description.
          nullable
      • portfolioWeightagePercent
        number (double)optional
        No description.
        nullable
      • fiType
        stringoptional
        No description.
        nullable
      • fiDataId
        stringoptional
        No description.
        nullable
      • oneDayReturnsPercent
        number (double)optional
        No description.
        nullable
      • oneDayReturns
        number (double)optional
        No description.
        nullable
    • oneDayReturnsPercent
      number (double)optional
      No description.
    • oneDayReturns
      number (double)optional
      No description.
    • prevDetails
      objectoptional
      No description.
      6 fields
      • percentageChange
        number (double)optional
        No description.
        nullable
      • priceChange
        number (double)optional
        No description.
        nullable
      • lastFetchTime
        string (date-time)optional
        No description.
        nullable
      • holdingIsin
        stringoptional
        No description.
        nullable
      • totalUnits
        number (double)optional
        No description.
        nullable
      • currentValue
        number (double)optional
        No description.
        nullable
    • lastFetchTime
      stringoptional
      No description.
      nullable
  • oneDayReturnsPercent
    number (double)optional
    No description.
  • oneDayReturns
    number (double)optional
    No description.
  • prevDetails
    objectoptional
    No description.
    6 fields
    • percentageChange
      number (double)optional
      No description.
      nullable
    • priceChange
      number (double)optional
      No description.
      nullable
    • lastFetchTime
      string (date-time)optional
      No description.
      nullable
    • holdingIsin
      stringoptional
      No description.
      nullable
    • totalUnits
      number (double)optional
      No description.
      nullable
    • currentValue
      number (double)optional
      No description.
      nullable
Example
{ "totalFiData": 0, "totalFiDataToBeFetched": 0, "totalEquityDematAccounts": 0, "totalETFDematAccounts": 0, "currentValue": 0, "demat": [ { "dematId": 0, "brokerId": "string", "brokerName": "string", "brandName": "string", "fiDataId": "string", "fipId": "string", "maskedAccNumber": "string", "accountRefNumber": "string", "currentValue": 0, "holdings": [ { "issuerName": "string", "schemeName": "string", "isin": "string", "isinDescription": "string", "bseSymbol": "string", "nseSymbol": "string", "marketCapCategory": "string", "units": 0, "lastTradedPrice": 0, "lastFetchTime": "2026-01-01T00:00:00Z", "currentValue": 0, "prevDetails": { "percentageChange": 0, "priceChange": 0, "lastFetchTime": "2026-01-01T00:00:00Z", "holdingIsin": "string", "totalUnits": 0, "currentValue": 0 }, "portfolioWeightagePercent": 0, "fiType": "string", "fiDataId": "string", "oneDayReturnsPercent": 0, "oneDayReturns": 0 } ], "oneDayReturnsPercent": 0, "oneDayReturns": 0, "prevDetails": { "percentageChange": 0, "priceChange": 0, "lastFetchTime": "2026-01-01T00:00:00Z", "holdingIsin": "string", "totalUnits": 0, "currentValue": 0 }, "lastFetchTime": "string" } ], "oneDayReturnsPercent": 0, "oneDayReturns": 0, "prevDetails": { "percentageChange": 0, "priceChange": 0, "lastFetchTime": "2026-01-01T00:00:00Z", "holdingIsin": "string", "totalUnits": 0, "currentValue": 0 } }
400Bad Request
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 400
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 400 }
401Unauthorized
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 401
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 401 }
500Internal Server Error
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 500
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 500 }
Code samplescurl · Node.js · Python
Stage: uat-ext.signcare.io
curl -X POST 'https://uat-ext.signcare.io/pfm/api/v2/demat/holdings' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "uniqueIdentifier": "user-12345", "dematFiTypes": [ "EQUITIES", "ETF" ] }'