AA Connect

8 endpoints · WealthSync API

POST

/pfm/api/v2/submit-multi-consent-request

#

Submit multi-consent request — initiates consent requests for multiple financial data types in a single API call.

docs.signcare.io/wealthsync/api/aa-connect/#post-pfm-api-v2-submit-multi-consent-request

This API is used when the same user needs more than one active consent, each for a different use-case. For example: Consent 1: Personal Finance Management (PFM) and Consent 2: F&O (for trading behavior insights). Both consents are created separately, but can be initiated in one single call using 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.

→ aaCustId (optional): The user's Account Aggregator customer ID. Not needed when the customer ID is the user's mobile number followed by the AA handle; send it only when the AA customer ID must differ from the mobile number.

→ redirectUrl (required): URL where the customer is redirected after completing the consent journey. Send a full URL, for example "https://example.com/consent-done".

→ userSessionId (optional): Free-form session ID from your app, used to track the session that started the consent request.

→ consentTemplates (required): Array of strings. Names of the consent templates registered for you, for example ["YOUR_TEMPLATE_NAME"]. The field must be present with at least one template name.

Q. What is a consent template?

A consent template is a predefined configuration that specifies what financial data will be shared, why, and how often. It simplifies and standardizes the consent process for all users. This will be shared with FIU by the Wealthsync team.

Q. How is a consent template decided?

The consent template is created as per Sahamati guidelines and contains values as specified by ReBIT. Refer to the Sahamati templates here: https://sahamati.org.in/aa-fair-use-template-library/consent-template-id-ct008-personal-finance-management/

Q. What does the redirectUrl do?

The redirectUrl field will redirect the user to land on the URL provided in the value of this field after the consent journey has been completed.

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
  • aaCustId
    stringoptional
    Optional. The user's Account Aggregator customer ID. Not needed when the customer ID is the mobile number followed by the AA handle; send it only when it must differ from the mobile number.
    nullable
  • userSessionId
    stringoptional
    Optional. Free-form session ID from your app, used to track the session that started the consent request.
    nullable
  • redirectUrl
    stringrequired
    Required. Full URL where the customer is redirected after completing the consent journey.
    minLength 1default https://example.com/consent-done
  • consentTemplates
    array<string>required
    Required. Names of the consent templates registered for you. Provide at least one name.
    default ["YOUR_TEMPLATE_NAME"]
Sample request body
{ "uniqueIdentifier": "user-12345", "redirectUrl": "https://example.com/consent-done", "consentTemplates": [ "YOUR_TEMPLATE_NAME" ] }

Responses

200OK
  • url
    stringoptional
    No description.
    nullable
  • consentHandles
    objectoptional
    No description.
    nullable
Example
{ "url": "string", "consentHandles": {} }
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/submit-multi-consent-request' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "uniqueIdentifier": "user-12345", "redirectUrl": "https://example.com/consent-done", "consentTemplates": [ "YOUR_TEMPLATE_NAME" ] }'
POST

/pfm/api/v2/submit-consent-revoke-request

#

Submit consent revoke request.

docs.signcare.io/wealthsync/api/aa-connect/#post-pfm-api-v2-submit-consent-revoke-request

Request Body Parameters:

         → <b>uniqueIdentifier</b> (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.

         → <b>consentIds</b> (optional): Array of consent IDs (strings) to revoke. When omitted or empty, all existing consents of the user are included in the revoke request.

         → <b>redirectUrl</b> (optional): Full URL where the user is sent after the revoke is processed, for example "https://example.com/revoke-done".


        
         Q. What is consentId?
         
         The consentId uniquely identifies each consent given by the user to the Account Aggregator.
         A consent may hold multiple accounts, so all accounts within the consent will be considered for revocation.
         List of consent IDs to revoke. When consent IDs are not provided, all existing consents of the user will be included in revoke request to AA
         
         Q. Where do you get the consentId from?
         
         You receive consentId in the /webhook/consent notification and by calling 
         /pfm/api/v2/account-consents-latest API.
         A consent may hold multiple accounts, so all accounts within the consent will be considered for revocation.
         
         Q. What does the submit consent revoke request API do? 
         Will it stop sending the data associated with that account?
         
         The submit consent revoke request API returns a URL where the user has to go and confirm revocation.
         
         Once a consent is revoked:

         -> No new data will be fetched for accounts associated with that consent(s).

         -> Daily refresh for accounts associated with that consent(s) stops.

         -> Any new analytics or insights will not include this account.

         -> FIUs can expect to receive the /webhook/consent with status as "REVOKED" once the user confirms on AA.

         -> We support an optional configuration in Wealthsync to delete the data immediately after revoke.

            By default this is turned off, i.e., data is NOT deleted on revoke.

         -> Currently the revoke journey is supported only for consents created through some Account Aggregators.

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
  • consentIds
    array<string>optional
    Optional. Consent IDs to revoke. When omitted or empty, all existing consents of the user are included in the revoke request.
    nullable
  • redirectUrl
    stringoptional
    Optional. Full URL where the user is redirected after the revoke is processed.
    nullable
Sample request body
{ "uniqueIdentifier": "user-12345" }

Responses

200OK
  • encryptedRequest
    stringoptional
    No description.
    nullable
  • requestDate
    stringoptional
    No description.
    nullable
  • encryptedFiuId
    stringoptional
    No description.
    nullable
  • url
    stringoptional
    No description.
    nullable
Example
{ "encryptedRequest": "string", "requestDate": "string", "encryptedFiuId": "string", "url": "string" }
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/submit-consent-revoke-request' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "uniqueIdentifier": "user-12345" }'
POST

/pfm/api/v2/submit-consent-request-plus

#

Submit consent request plus (AA Connect).

docs.signcare.io/wealthsync/api/aa-connect/#post-pfm-api-v2-submit-consent-request-plus

This API initiates a single consent request with flexible parameters. Unlike submit-multi-consent-request, this is for creating one consent at a time with fine-grained control. After calling this API, the user is redirected to the AA (Account Aggregator) to approve the consent.

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.

→ aaCustId (required): The user's Account Aggregator customer ID in the format: 10-digit mobile number + "@" + the AA handle.

Example: "9999999999@your-aa-handle"

→ templateName (required): The consent template name as configured in Wealthsync.

Example values: "BANK_STATEMENT_INSURANCE", "FNO_Activation", "BANK_STATEMENT_PERIODIC".

→ userSessionId (optional): A free-form session tracking ID from your app to track which user session

initiated the consent flow. Example: "sessionid123".

→ redirectUrl (required): The URL where the user will be redirected after completing the consent journey on AA.

→ pan (required): The user's 10-character PAN in the format AAAAA9999A.

→ consentDetails (required): Object with a required "fiTypes" array of strings — the list of financial information types

the user is consenting to share, for example {"fiTypes": ["DEPOSIT", "MUTUAL_FUNDS"]}. Supported fiTypes (upper case):

"DEPOSIT", "TERM_DEPOSIT", "RECURRING_DEPOSIT", "SIP", "EQUITIES", "MUTUAL_FUNDS", "ETF",

"IDR", "CIS", "AIF", "INVIT", "REIT", "LIFE_INSURANCE", "GENERAL_INSURANCE", "NPS",

"GSTR1_3B", "INSURANCE_POLICIES".

FAQ:

Q. What is a consent template?

A consent template is a predefined configuration that specifies what financial data will be shared, why, and how often. It simplifies and standardizes the consent process for all users. This will be shared with FIU by the Wealthsync team.

Q. How is a consent template decided?

The consent template is created as per Sahamati guidelines and contains values as specified by ReBIT. Refer to the Sahamati templates here: https://sahamati.org.in/aa-fair-use-template-library/consent-template-id-ct008-personal-finance-management/

Q. What does the redirectUrl do?

The redirectUrl field will redirect the user to land on the URL provided in the value of this field after the consent journey has been completed. Send a full URL, for example "https://example.com/consent-done".

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
  • aaCustId
    stringrequired
    Required. The user's Account Aggregator customer ID: 10-digit mobile number + "@" + the AA handle.
    nullabledefault 9999999999@your-aa-handle
  • templateName
    stringrequired
    Required. Name of the consent template to use, as configured for you.
    minLength 1
  • userSessionId
    stringoptional
    Optional. Free-form session ID from your app. It is returned to you as an encrypted parameter in the redirect URL.
    nullable
  • redirectUrl
    stringrequired
    Required. Full URL where the user is redirected after the consent journey is completed.
    nullabledefault https://example.com/consent-done
  • pan
    stringrequired
    Required. 10-character PAN of the user in the format AAAAA9999A.
    nullabledefault ABCDE1234F
  • consentDetails
    objectoptional
    No description.
    1 field
    • fiTypes
      array<string>required
      Required. Financial information types the user consents to share, for example DEPOSIT, MUTUAL_FUNDS (upper case).
      default ["DEPOSIT","MUTUAL_FUNDS"]
Sample request body
{ "uniqueIdentifier": "user-12345", "aaCustId": "9999999999@your-aa-handle", "templateName": "string", "redirectUrl": "https://example.com/consent-done", "pan": "ABCDE1234F" }

Responses

200OK
  • url
    stringoptional
    No description.
    nullable
  • consentHandle
    stringoptional
    No description.
    nullable
  • encryptedFiuId
    stringoptional
    No description.
    nullable
  • requestDate
    stringoptional
    No description.
    nullable
  • encryptedRequest
    stringoptional
    No description.
    nullable
Example
{ "url": "string", "consentHandle": "string", "encryptedFiuId": "string", "requestDate": "string", "encryptedRequest": "string" }
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/submit-consent-request-plus' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "uniqueIdentifier": "user-12345", "aaCustId": "9999999999@your-aa-handle", "templateName": "string", "redirectUrl": "https://example.com/consent-done", "pan": "ABCDE1234F" }'
POST

/pfm/api/v2/firequest-user

#

Submit FI request for a user.

docs.signcare.io/wealthsync/api/aa-connect/#post-pfm-api-v2-firequest-user

Fetches data for all the accounts that a user has given across different consents.

Q. What is FI Request?

FI Request (Financial Information Request) is the request that your application sends to the Account Aggregator to retrieve financial data from the user’s linked Financial Information Providers (FIPs), such as banks, brokers, insurance companies, etc.

Q. Does an FIU do the FI request or is it handled by Wealthsync?

By default, Wealthsync performs a batch request every day for the FIUs. FIUs can opt out if they wish to handle the data refresh on their end.

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
Example
"string"
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/firequest-user' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "uniqueIdentifier": "user-12345" }'
POST

/pfm/api/v2/firequest-account

#

Submit FI request for an account.

docs.signcare.io/wealthsync/api/aa-connect/#post-pfm-api-v2-firequest-account

This API triggers a Financial Information (FI) request for a specific individual account. Use this when you want to refresh data for just one account instead of all accounts.

Prerequisites: → First call any linked accounts API to get the fiDataId of the 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 to fetch data for. To get the accountId (fiDataId) for different FI types, call the corresponding linked accounts API:

  • Bank Savings/Current accounts: POST deposit/user-linked-accounts

  • Fixed Deposits (FD): POST term-deposit/user-linked-accounts

  • Recurring Deposits (RD): POST recurring-deposit/user-linked-accounts

  • Mutual Funds: POST mutual-fund/user-linked-accounts

  • ETFs: POST etf/user-linked-accounts

  • Stocks: POST equities/user-linked-accounts

  • Stocks + ETFs combined: POST equities-and-etfs/user-linked-accounts

  • Life Insurance: POST life-insurance/user-linked-accounts

  • General Insurance: POST general-insurance/user-linked-accounts

  • NPS: POST nps/user-linked-accounts

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 account to refresh (from the matching linked accounts API).
    nullabledefault YOUR_FI_DATA_ID
Sample request body
{ "uniqueIdentifier": "user-12345", "accountId": "YOUR_FI_DATA_ID" }

Responses

200OK
Example
"string"
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/firequest-account' \ -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" }'
POST

/pfm/api/v2/fips

#

Get List of all FIPs.

docs.signcare.io/wealthsync/api/aa-connect/#post-pfm-api-v2-fips

This API returns the complete list of Financial Information Providers (FIPs) registered with the AA ecosystem. Each FIP includes fipId, fipName, supported fiTypes, enable status, entity logos/icons, and OTP length. Use this to show the user which banks, brokers, or insurers are available for linking.

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
Example
[ { "fipId": "string", "fipName": "string", "code": "string", "enable": "string", "fiTypes": [ "string" ], "entityIconUri": "string", "entityLogoUri": "string", "entityLogoWithNameUri": "string", "otpLength": "string" } ]
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/fips' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "uniqueIdentifier": "user-12345" }'
POST

/pfm/api/v2/account/data

#

Get raw data for account as received via AA for recurring consents.

docs.signcare.io/wealthsync/api/aa-connect/#post-pfm-api-v2-account-data

This API returns the raw, unanalyzed financial data exactly as received from the Account Aggregator. Useful when you need the original data without any Wealthsync processing or analysis. The response includes Profile (holder info), Summary (account details), and Transactions.

Prerequisites: → First call any linked accounts API to get the fiDataId of the account. → Pass that fiDataId as the "accountId" parameter.

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 account whose raw data you want. To get the accountId (fiDataId) for different FI types, call the corresponding linked accounts API:

  • Bank Savings/Current accounts: POST deposit/user-linked-accounts

  • Fixed Deposits (FD): POST term-deposit/user-linked-accounts

  • Recurring Deposits (RD): POST recurring-deposit/user-linked-accounts

  • Mutual Funds: POST mutual-fund/user-linked-accounts

  • ETFs: POST etf/user-linked-accounts

  • Stocks: POST equities/user-linked-accounts

  • Stocks + ETFs combined: POST equities-and-etfs/user-linked-accounts

  • Life Insurance: POST life-insurance/user-linked-accounts

  • General Insurance: POST general-insurance/user-linked-accounts

  • NPS: POST nps/user-linked-accounts

→ fromDate (optional): Start date for the data range. Format: yyyy-MM-dd.

→ toDate (optional): End date for the data range. 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 account whose raw data you want (from the matching linked accounts API).
    minLength 1default YOUR_FI_DATA_ID
  • fromDate
    stringoptional
    Optional. Start date of the data range, in yyyy-MM-dd format (for example 2025-01-01).
    nullabledefault 2025-01-01
  • toDate
    stringoptional
    Optional. End date of the data range, in yyyy-MM-dd format (for example 2025-12-31).
    nullabledefault 2025-12-31
Sample request body
{ "uniqueIdentifier": "user-12345", "accountId": "YOUR_FI_DATA_ID", "fromDate": "2025-01-01", "toDate": "2025-12-31" }

Responses

200OK
  • profile
    objectoptional
    No description.
    1 field
    • holders
      objectoptional
      No description.
      2 fields
      • holder
        objectoptional
        No description.
        9 fields
        • name
          stringoptional
          No description.
          nullable
        • dob
          stringoptional
          No description.
          nullable
        • mobile
          stringoptional
          No description.
          nullable
        • nominee
          stringoptional
          No description.
          nullable
        • address
          stringoptional
          No description.
          nullable
        • email
          stringoptional
          No description.
          nullable
        • pan
          stringoptional
          No description.
          nullable
        • ckycCompliance
          booleanoptional
          No description.
          nullable
        • ckycRegistered
          stringoptional
          No description.
          nullable
      • type
        stringoptional
        No description.
        nullable
  • summary
    objectoptional
    No description.
    12 fields
    • type
      stringoptional
      No description.
      nullable
    • branch
      stringoptional
      No description.
      nullable
    • facility
      stringoptional
      No description.
      nullable
    • ifscCode
      stringoptional
      No description.
      nullable
    • micrCode
      stringoptional
      No description.
      nullable
    • openingDate
      stringoptional
      No description.
      nullable
    • currentODLimit
      stringoptional
      No description.
      nullable
    • drawingLimit
      stringoptional
      No description.
      nullable
    • currentBalance
      stringoptional
      No description.
      nullable
    • currency
      stringoptional
      No description.
      nullable
    • balanceDateTime
      stringoptional
      No description.
      nullable
    • status
      stringoptional
      No description.
      nullable
  • transactions
    objectoptional
    No description.
    3 fields
    • transaction
      array<object>optional
      No description.
      nullable
      Each item: 10 fields
      • type
        stringoptional
        No description.
        nullable
      • transactionTimestamp
        stringoptional
        No description.
        nullable
      • valueDate
        stringoptional
        No description.
        nullable
      • txnId
        stringoptional
        No description.
        nullable
      • narration
        stringoptional
        No description.
        nullable
      • reference
        stringoptional
        No description.
        nullable
      • currentBalance
        stringoptional
        No description.
        nullable
      • mode
        stringoptional
        No description.
        nullable
      • merchants
        array<any>optional
        No description.
        nullable
      • amount
        number (double)optional
        No description.
        nullable
    • startDate
      stringoptional
      No description.
      nullable
    • endDate
      stringoptional
      No description.
      nullable
  • type
    stringoptional
    No description.
    nullable
  • maskedAccNumber
    stringoptional
    No description.
    nullable
  • version
    stringoptional
    No description.
    nullable
  • linkedAccRef
    stringoptional
    No description.
    nullable
  • schemaLocation
    stringoptional
    No description.
    nullable
Example
{ "profile": { "holders": { "holder": { "name": "string", "dob": "string", "mobile": "string", "nominee": "string", "address": "string", "email": "string", "pan": "string", "ckycCompliance": false, "ckycRegistered": "string" }, "type": "string" } }, "summary": { "type": "string", "branch": "string", "facility": "string", "ifscCode": "string", "micrCode": "string", "openingDate": "string", "currentODLimit": "string", "drawingLimit": "string", "currentBalance": "string", "currency": "string", "balanceDateTime": "string", "status": "string" }, "transactions": { "transaction": [ { "type": "string", "transactionTimestamp": "string", "valueDate": "string", "txnId": "string", "narration": "string", "reference": "string", "currentBalance": "string", "mode": "string", "merchants": [], "amount": 0 } ], "startDate": "string", "endDate": "string" }, "type": "string", "maskedAccNumber": "string", "version": "string", "linkedAccRef": "string", "schemaLocation": "string" }
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/account/data' \ -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", "fromDate": "2025-01-01", "toDate": "2025-12-31" }'
POST

/pfm/api/v2/account-consents-latest

#

Get consent details for an account.

docs.signcare.io/wealthsync/api/aa-connect/#post-pfm-api-v2-account-consents-latest

This API returns the latest consent details for a specific account. The response includes consentId, consent start/expiry dates, consent mode, fetch type, fiTypes, data consumer/provider details, purpose, FI data range, data life, and frequency.

Use this to check the current consent status of an account or to get the consentId needed for the submit-consent-revoke-request 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 account whose consent details you want. To get the accountId (fiDataId) for different FI types, call the corresponding linked accounts API:

  • Bank Savings/Current accounts: POST deposit/user-linked-accounts

  • Fixed Deposits (FD): POST term-deposit/user-linked-accounts

  • Recurring Deposits (RD): POST recurring-deposit/user-linked-accounts

  • Mutual Funds: POST mutual-fund/user-linked-accounts

  • ETFs: POST etf/user-linked-accounts

  • Stocks: POST equities/user-linked-accounts

  • Stocks + ETFs combined: POST equities-and-etfs/user-linked-accounts

  • Life Insurance: POST life-insurance/user-linked-accounts

  • General Insurance: POST general-insurance/user-linked-accounts

  • NPS: POST nps/user-linked-accounts

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 account whose latest consent details you want.
    minLength 1default YOUR_FI_DATA_ID
Sample request body
{ "uniqueIdentifier": "user-12345", "accountId": "YOUR_FI_DATA_ID" }

Responses

200OK
  • consentId
    stringoptional
    No description.
    nullable
  • consentCreateTimestamp
    stringoptional
    No description.
    nullable
  • consentStart
    stringoptional
    No description.
    nullable
  • consentExpiry
    stringoptional
    No description.
    nullable
  • consentMode
    stringoptional
    No description.
    nullable
  • fetchType
    stringoptional
    No description.
    nullable
  • consentTypes
    array<string>optional
    No description.
    nullable
  • fiTypes
    array<string>optional
    No description.
    nullable
  • dataConsumer
    objectoptional
    No description.
    2 fields
    • id
      stringoptional
      No description.
      nullable
    • type
      stringoptional
      No description.
      nullable
  • dataProvider
    objectoptional
    No description.
    2 fields
    • id
      stringoptional
      No description.
      nullable
    • type
      stringoptional
      No description.
      nullable
  • customer
    objectoptional
    No description.
    1 field
    • id
      stringoptional
      No description.
      nullable
  • accounts
    array<object>optional
    No description.
    nullable
    Each item: 5 fields
    • fiType
      stringoptional
      No description.
      nullable
    • fipId
      stringoptional
      No description.
      nullable
    • accType
      stringoptional
      No description.
      nullable
    • linkRefNumber
      stringoptional
      No description.
      nullable
    • maskedAccNumber
      stringoptional
      No description.
      nullable
  • purpose
    objectoptional
    No description.
    4 fields
    • code
      stringoptional
      No description.
      nullable
    • refUri
      stringoptional
      No description.
      nullable
    • text
      stringoptional
      No description.
      nullable
    • category
      objectoptional
      No description.
      1 field
      • type
        stringoptional
        No description.
        nullable
  • fiDataRange
    objectoptional
    No description.
    2 fields
    • from
      stringoptional
      No description.
      nullable
    • to
      stringoptional
      No description.
      nullable
  • dataLife
    objectoptional
    No description.
    2 fields
    • unit
      stringoptional
      No description.
      nullable
    • value
      integer (int32)optional
      No description.
      nullable
  • frequency
    objectoptional
    No description.
    2 fields
    • unit
      stringoptional
      No description.
      nullable
    • value
      integer (int32)optional
      No description.
      nullable
  • dataFilter
    array<object>optional
    No description.
    nullable
    Each item: 3 fields
    • type
      stringoptional
      No description.
      nullable
    • operator
      stringoptional
      No description.
      nullable
    • value
      stringoptional
      No description.
      nullable
Example
{ "consentId": "string", "consentCreateTimestamp": "string", "consentStart": "string", "consentExpiry": "string", "consentMode": "string", "fetchType": "string", "consentTypes": [ "string" ], "fiTypes": [ "string" ], "dataConsumer": { "id": "string", "type": "string" }, "dataProvider": { "id": "string", "type": "string" }, "customer": { "id": "string" }, "accounts": [ { "fiType": "string", "fipId": "string", "accType": "string", "linkRefNumber": "string", "maskedAccNumber": "string" } ], "purpose": { "code": "string", "refUri": "string", "text": "string", "category": { "type": "string" } }, "fiDataRange": { "from": "string", "to": "string" }, "dataLife": { "unit": "string", "value": 0 }, "frequency": { "unit": "string", "value": 0 }, "dataFilter": [ { "type": "string", "operator": "string", "value": "string" } ] }
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/account-consents-latest' \ -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" }'