ETF Insights

3 endpoints · WealthSync API

POST

/pfm/api/v2/etf/user-linked-accounts

#

Get user linked accounts for ETFs.

docs.signcare.io/wealthsync/api/etf-insights/#post-pfm-api-v2-etf-user-linked-accounts

This API returns all linked ETF (Exchange Traded Fund) demat accounts for a user. Each linked account includes details like demat ID, broker name, holder info, consent status, and current value.

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.

→ filterZeroValueAccounts (optional): Set to "true" to exclude accounts with zero balance. Default: "false".

→ filterZeroValueHoldings (optional): Set to "true" to exclude holdings with zero value. 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
  • filterZeroValueAccounts
    stringoptional
    Optional. Send "true" to exclude accounts with zero current value. String "true" or "false". Default: "false".
    nullabledefault false
  • filterZeroValueHoldings
    stringoptional
    Optional. Send "true" to exclude holdings with zero current value. String "true" or "false". Default: "false".
    nullabledefault false
Sample request body
{ "uniqueIdentifier": "user-12345", "filterZeroValueAccounts": "false", "filterZeroValueHoldings": "false" }

Responses

200OK
  • totalFiData
    integer (int32)optional
    No description.
    nullable
  • totalFiDataToBeFetched
    integer (int32)optional
    No description.
    nullable
  • lastFetchDate
    stringoptional
    No description.
    nullable
  • fipData
    array<object>optional
    No description.
    nullable
    Each item: 6 fields
    • fipId
      stringoptional
      No description.
      nullable
    • fipName
      stringoptional
      No description.
      nullable
    • totalFiData
      integer (int32)optional
      No description.
      nullable
    • totalFiDataToBeFetched
      integer (int32)optional
      No description.
      nullable
    • linkedAccounts
      array<object>optional
      No description.
      nullable
      Each item: 27 fields
      • fiDataId
        stringoptional
        No description.
        nullable
      • accountRefNumber
        stringoptional
        No description.
        nullable
      • dataFetched
        stringoptional
        No description.
        nullable
      • lastFetchDateTime
        string (date-time)optional
        No description.
        nullable
      • fiRequestCountOfCurrentMonth
        integer (int32)optional
        No description.
        nullable
      • fipId
        stringoptional
        No description.
        nullable
      • fipName
        stringoptional
        No description.
        nullable
      • latestConsentPurposeText
        stringoptional
        No description.
        nullable
      • latestConsentExpiryTime
        string (date-time)optional
        No description.
        nullable
      • consentPurposeVersion
        stringoptional
        No description.
        nullable
      • maskedDematId
        stringoptional
        No description.
        nullable
      • linkedAccountType
        stringoptional
        No description.
        nullable
      • holderName
        stringoptional
        No description.
        nullable
      • holderDob
        string (date-time)optional
        No description.
        nullable
      • holderMobile
        stringoptional
        No description.
        nullable
      • holderNominee
        stringoptional
        No description.
        nullable
      • holderDematId
        integer (int64)optional
        No description.
        nullable
      • holderLandline
        stringoptional
        No description.
        nullable
      • holderAddress
        stringoptional
        No description.
        nullable
      • holderEmail
        stringoptional
        No description.
        nullable
      • holderPan
        stringoptional
        No description.
        nullable
      • holderCkycCompliance
        stringoptional
        No description.
        nullable
      • equityHoldingsCount
        integer (int32)optional
        No description.
        nullable
      • accountCurrentValue
        number (double)optional
        No description.
        nullable
      • brokerId
        integer (int32)optional
        No description.
        nullable
      • brokerName
        stringoptional
        No description.
        nullable
      • brandName
        stringoptional
        No description.
        nullable
    • currentValue
      number (double)optional
      No description.
      nullable
  • currentValue
    number (double)optional
    No description.
    nullable
  • totalBrokers
    number (double)optional
    No description.
    nullable
Example
{ "totalFiData": 0, "totalFiDataToBeFetched": 0, "lastFetchDate": "string", "fipData": [ { "fipId": "string", "fipName": "string", "totalFiData": 0, "totalFiDataToBeFetched": 0, "linkedAccounts": [ { "fiDataId": "string", "accountRefNumber": "string", "dataFetched": "string", "lastFetchDateTime": "2026-01-01T00:00:00Z", "fiRequestCountOfCurrentMonth": 0, "fipId": "string", "fipName": "string", "latestConsentPurposeText": "string", "latestConsentExpiryTime": "2026-01-01T00:00:00Z", "consentPurposeVersion": "string", "maskedDematId": "string", "linkedAccountType": "string", "holderName": "string", "holderDob": "2026-01-01T00:00:00Z", "holderMobile": "string", "holderNominee": "string", "holderDematId": 0, "holderLandline": "string", "holderAddress": "string", "holderEmail": "string", "holderPan": "string", "holderCkycCompliance": "string", "equityHoldingsCount": 0, "accountCurrentValue": 0, "brokerId": 0, "brokerName": "string", "brandName": "string" } ], "currentValue": 0 } ], "currentValue": 0, "totalBrokers": 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/etf/user-linked-accounts' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "uniqueIdentifier": "user-12345", "filterZeroValueAccounts": "false", "filterZeroValueHoldings": "false" }'
POST

/pfm/api/v2/etf/user-account-statement

#

Get user account statement for ETFs.

docs.signcare.io/wealthsync/api/etf-insights/#post-pfm-api-v2-etf-user-account-statement

This API returns the transaction history for a specific ETF account. Each transaction includes ISIN, units, type (BUY/SELL), NAV, trade value, and broker details.

Prerequisites:

→ First call POST etf/user-linked-accounts to get the list of linked ETF accounts.

→ From the response, pick the fiDataId of the desired account.

→ Pass that fiDataId as the "accountId" parameter in this API.

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.

→ accountId (required): The fiDataId of the specific account.

→ dateRangeFrom (optional): Start date for filtering transactions. Format: yyyy-MM-dd.

→ dateRangeTo (optional): End date for filtering transactions. Format: yyyy-MM-dd.

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
  • accountId
    stringrequired
    Required. The fiDataId of the linked ETF account, taken from the linked-accounts response.
    minLength 1default YOUR_FI_DATA_ID
  • dateRangeFrom
    stringoptional
    Optional. Start date to filter transactions, in yyyy-MM-dd format.
    nullabledefault 2024-01-01
  • dateRangeTo
    stringoptional
    Optional. End date to filter transactions, in yyyy-MM-dd format.
    nullabledefault 2024-12-31
Sample request body
{ "uniqueIdentifier": "user-12345", "accountId": "YOUR_FI_DATA_ID", "dateRangeFrom": "2024-01-01", "dateRangeTo": "2024-12-31" }

Responses

200OK
  • transactions
    array<object>optional
    No description.
    nullable
    Each item: 13 fields
    • accountId
      stringoptional
      No description.
      nullable
    • brokerId
      integer (int32)optional
      No description.
      nullable
    • txnId
      integer (int64)optional
      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
    • transactionDateTime
      string (date-time)optional
      No description.
      nullable
    • units
      number (double)optional
      No description.
      nullable
    • type
      stringoptional
      No description.
      nullable
    • narration
      stringoptional
      No description.
      nullable
    • nav
      number (double)optional
      No description.
      nullable
Example
{ "transactions": [ { "accountId": "string", "brokerId": 0, "txnId": 0, "isin": "string", "isinDescription": "string", "bseSymbol": "string", "nseSymbol": "string", "marketCapCategory": "string", "transactionDateTime": "2026-01-01T00:00:00Z", "units": 0, "type": "string", "narration": "string", "nav": 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/etf/user-account-statement' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "uniqueIdentifier": "user-12345", "accountId": "YOUR_FI_DATA_ID", "dateRangeFrom": "2024-01-01", "dateRangeTo": "2024-12-31" }'
POST

/pfm/api/v2/etf/insights

#

Get ETF insights.

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

This API returns ETF portfolio insights including current value, total holdings, returns summary (daily returns, absolute return, XIRR), and demat-wise distribution with category/AMC/sector breakdowns.

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.

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
Sample request body
{ "uniqueIdentifier": "user-12345" }

Responses

200OK
  • currentValue
    number (double)optional
    No description.
    nullable
  • totalHoldings
    integer (int32)optional
    No description.
    nullable
  • returnsSummary
    objectoptional
    No description.
    5 fields
    • dailyReturns
      number (double)optional
      No description.
      nullable
    • dailyReturnsPercentage
      number (double)optional
      No description.
      nullable
    • absoluteReturn
      number (double)optional
      No description.
      nullable
    • absoluteReturnPercentage
      number (double)optional
      No description.
      nullable
    • xirr
      number (double)optional
      No description.
      nullable
  • totalDemats
    integer (int32)optional
    No description.
    nullable
  • dematWiseDistribution
    array<object>optional
    No description.
    nullable
    Each item: 14 fields
    • dematId
      integer (int64)optional
      No description.
      nullable
    • brokerName
      stringoptional
      No description.
      nullable
    • brandName
      stringoptional
      No description.
      nullable
    • brokerCode
      integer (int32)optional
      No description.
      nullable
    • totalHoldings
      integer (int32)optional
      No description.
      nullable
    • currentValue
      number (double)optional
      No description.
      nullable
    • dematValuePercentage
      number (double)optional
      No description.
      nullable
    • returnsSummary
      objectoptional
      No description.
      5 fields
      • dailyReturns
        number (double)optional
        No description.
        nullable
      • dailyReturnsPercentage
        number (double)optional
        No description.
        nullable
      • absoluteReturn
        number (double)optional
        No description.
        nullable
      • absoluteReturnPercentage
        number (double)optional
        No description.
        nullable
      • xirr
        number (double)optional
        No description.
        nullable
    • holdingsInsights
      array<object>optional
      No description.
      nullable
      Each item: 11 fields
      • schemeName
        stringoptional
        No description.
        nullable
      • isin
        stringoptional
        No description.
        nullable
      • currentValue
        number (double)optional
        No description.
        nullable
      • investedValue
        number (double)optional
        No description.
        nullable
      • totalUnits
        number (double)optional
        No description.
        nullable
      • currentNAV
        number (double)optional
        No description.
        nullable
      • currentNAVDate
        string (date-time)optional
        No description.
        nullable
      • returnsSummary
        objectoptional
        No description.
        5 fields
        • dailyReturns
          number (double)optional
          No description.
          nullable
        • dailyReturnsPercentage
          number (double)optional
          No description.
          nullable
        • absoluteReturn
          number (double)optional
          No description.
          nullable
        • absoluteReturnPercentage
          number (double)optional
          No description.
          nullable
        • xirr
          number (double)optional
          No description.
          nullable
      • trailingReturns
        objectoptional
        No description.
        12 fields
        • asOfDate
          string (date-time)optional
          No description.
          nullable
        • oneDay
          number (double)optional
          No description.
          nullable
        • oneMonth
          number (double)optional
          No description.
          nullable
        • threeMonths
          number (double)optional
          No description.
          nullable
        • sixMonths
          number (double)optional
          No description.
          nullable
        • nineMonths
          number (double)optional
          No description.
          nullable
        • oneYear
          number (double)optional
          No description.
          nullable
        • twoYears
          number (double)optional
          No description.
          nullable
        • threeYears
          number (double)optional
          No description.
          nullable
        • fiveYears
          number (double)optional
          No description.
          nullable
        • sevenYears
          number (double)optional
          No description.
          nullable
        • tenYears
          number (double)optional
          No description.
          nullable
      • benchmark
        objectoptional
        No description.
        2 fields
        • benchmarkName
          stringoptional
          No description.
          nullable
        • benchmarkReturnPercentage
          number (double)optional
          No description.
          nullable
      • fundHoldings
        objectoptional
        No description.
        2 fields
        • totalHoldings
          integer (int32)optional
          No description.
          nullable
        • holdings
          array<object>optional
          No description.
          nullable
          Each item: 9 fields
          • holdingName
            stringoptional
            No description.
            nullable
          • holdingType
            stringoptional
            No description.
            nullable
          • name
            stringoptional
            No description.
            nullable
          • holdingIsin
            stringoptional
            No description.
            nullable
          • weighting
            number (double)optional
            No description.
            nullable
          • numberOfShare
            number (double)optional
            No description.
            nullable
          • marketValue
            number (double)optional
            No description.
            nullable
          • sector
            stringoptional
            No description.
            nullable
          • coupon
            number (double)optional
            No description.
            nullable
    • etfCategoryDistribution
      array<object>optional
      No description.
      nullable
      Each item: 4 fields
      • category
        stringoptional
        No description.
        nullable
      • totalFunds
        integer (int32)optional
        No description.
        nullable
      • totalCurrentValue
        number (double)optional
        No description.
        nullable
      • percentage
        number (double)optional
        No description.
        nullable
    • etfSubCategoryDistribution
      array<object>optional
      No description.
      nullable
      Each item: 4 fields
      • category
        stringoptional
        No description.
        nullable
      • totalFunds
        integer (int32)optional
        No description.
        nullable
      • totalCurrentValue
        number (double)optional
        No description.
        nullable
      • percentage
        number (double)optional
        No description.
        nullable
    • etfMarketCapDistribution
      array<object>optional
      No description.
      nullable
      Each item: 4 fields
      • category
        stringoptional
        No description.
        nullable
      • totalFunds
        integer (int32)optional
        No description.
        nullable
      • totalCurrentValue
        number (double)optional
        No description.
        nullable
      • percentage
        number (double)optional
        No description.
        nullable
    • etfAmcDistribution
      array<object>optional
      No description.
      nullable
      Each item: 4 fields
      • category
        stringoptional
        No description.
        nullable
      • totalFunds
        integer (int32)optional
        No description.
        nullable
      • totalCurrentValue
        number (double)optional
        No description.
        nullable
      • percentage
        number (double)optional
        No description.
        nullable
    • etfSectorDistribution
      array<object>optional
      No description.
      nullable
      Each item: 4 fields
      • category
        stringoptional
        No description.
        nullable
      • totalFunds
        integer (int32)optional
        No description.
        nullable
      • totalCurrentValue
        number (double)optional
        No description.
        nullable
      • percentage
        number (double)optional
        No description.
        nullable
Example
{ "currentValue": 0, "totalHoldings": 0, "returnsSummary": { "dailyReturns": 0, "dailyReturnsPercentage": 0, "absoluteReturn": 0, "absoluteReturnPercentage": 0, "xirr": 0 }, "totalDemats": 0, "dematWiseDistribution": [ { "dematId": 0, "brokerName": "string", "brandName": "string", "brokerCode": 0, "totalHoldings": 0, "currentValue": 0, "dematValuePercentage": 0, "returnsSummary": { "dailyReturns": 0, "dailyReturnsPercentage": 0, "absoluteReturn": 0, "absoluteReturnPercentage": 0, "xirr": 0 }, "holdingsInsights": [ { "schemeName": "string", "isin": "string", "currentValue": 0, "investedValue": 0, "totalUnits": 0, "currentNAV": 0, "currentNAVDate": "2026-01-01T00:00:00Z", "returnsSummary": { "dailyReturns": 0, "dailyReturnsPercentage": 0, "absoluteReturn": 0, "absoluteReturnPercentage": 0, "xirr": 0 }, "trailingReturns": { "asOfDate": "2026-01-01T00:00:00Z", "oneDay": 0, "oneMonth": 0, "threeMonths": 0, "sixMonths": 0, "nineMonths": 0, "oneYear": 0, "twoYears": 0, "threeYears": 0, "fiveYears": 0, "sevenYears": 0, "tenYears": 0 }, "benchmark": { "benchmarkName": "string", "benchmarkReturnPercentage": 0 }, "fundHoldings": { "totalHoldings": 0, "holdings": [] } } ], "etfCategoryDistribution": [ { "category": "string", "totalFunds": 0, "totalCurrentValue": 0, "percentage": 0 } ], "etfSubCategoryDistribution": [ { "category": "string", "totalFunds": 0, "totalCurrentValue": 0, "percentage": 0 } ], "etfMarketCapDistribution": [ { "category": "string", "totalFunds": 0, "totalCurrentValue": 0, "percentage": 0 } ], "etfAmcDistribution": [ { "category": "string", "totalFunds": 0, "totalCurrentValue": 0, "percentage": 0 } ], "etfSectorDistribution": [ { "category": "string", "totalFunds": 0, "totalCurrentValue": 0, "percentage": 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/etf/insights' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "uniqueIdentifier": "user-12345" }'