Finpass API Collection
  1. AA-BSA Analyzer
  • Introduction
  • Bank Statement Analyser
    • Upload Statement
      POST
    • Statement Result
      GET
  • Account Aggregator
    • Initialize
      POST
    • Fetch JSON Report
      POST
    • Fetch PDF Report
      POST
    • Refresh Data
      POST
  • Multi Bureau
    • Multi-Bureau Fetch
      POST
  • Corporate
    • CIN Lookup
      POST
    • LLPIN
      POST
    • PAN Lookup
      POST
    • Company Autocomplete
      POST
  • EPFO
    • EPFO-CRIF Combined Report
      POST
  • ITR Analyzer
    • Initialize
      POST
    • Status
      GET
    • ITR Analyzer — Get Full Data
      GET
  • AA-BSA Analyzer
    • Initialize
      POST
    • Status
      GET
    • AA BSA — Statement Result
      GET
    • AA BSA — Analysis JSON
      GET
  1. AA-BSA Analyzer

Status

GET
/api/v1/aa-bsa-journey/status

AA BSA — Poll Status

GET /api/v1/aa-bsa-journey/status?client_id=<client_id>

Description

The AA BSA Poll Status API returns the current state of an active AA BSA journey session. After redirecting the user to the journey_url from the Init step, call this endpoint at regular intervals to determine when the user has completed the consent flow and when the bank statement analysis is ready.

Once the status reaches analysis_complete, the statement data and BSA insights are available via the Statement Result and Analysis JSON endpoints.

Key Benefits

  • Track journey progress in real time without relying solely on redirects
  • Detect terminal states — consent denial, failure, or session expiry — and handle them gracefully
  • Use alongside webhook_url for push-based notifications to avoid polling overhead
  • Single lightweight GET call — no request body required

Use Cases

- Drive a real-time loan application status screen while waiting for the user to complete AA consent - Trigger automated underwriting workflows the moment `analysis_complete` is detected - Alert loan officers when a borrower's journey fails or expires so they can follow up - Update in-app progress indicators during a BNPL or salary advance application flow - Poll on the backend and push a push notification to the user once data is ready - Handle `consent_denied` gracefully by offering an alternative income verification method - Log all status transitions with timestamps for end-to-end audit trails per loan application - Integrate status polling into LOS workflows to trigger next steps automatically - Monitor journey completion rates across your user base for funnel analysis

Technical Implementation

All API requests require authentication using your Finpass API credentials passed as request headers.
  1. Obtain API Credentials: Register with Finpass to receive your X-API-KEY and X-API-SECRET.
  2. Include in Requests: Add both keys to every request as HTTP headers.
HeaderValue
X-API-KEYYour assigned API Key
X-API-SECRETYour assigned API Secret

Base URL: https://api.finpass.ai

### Request Headers
HeaderRequiredDescription
X-API-KEYYesYour Finpass API Key
X-API-SECRETYesYour Finpass API Secret

Query Parameters

ParameterTypeRequiredDescription
client_idstringYesThe client_id received from the /aa-bsa-journey/init response

Example Request

GET /aa-bsa-journey/status?client_id=bsa_clnt_a1b2c3d4e5f6
### Response Parameters
ParameterTypeDescription
successbooleanIndicates whether the request was processed successfully
messagestringHuman-readable status message
data.client_idstringThe session identifier
data.statusstringCurrent journey status. See status lifecycle below
data.consent_typestringThe consent type for this session (loan_underwriting or loan_monitoring)
data.mobile_numberstringMasked mobile number of the user
data.updated_atstringTimestamp of the last status update (ISO 8601)

Journey Status Lifecycle

StatusTerminalDescription
initiatedNoJourney created; user has not yet opened the consent link
consent_pendingNoUser has opened the consent link but not yet completed the flow
consent_grantedNoUser approved consent; bank data fetch is in progress
data_fetchedNoBank data fetched; BSA analysis is being generated
analysis_complete✅ YesAnalysis ready — call /statement-result and /analysis-json
consent_denied✅ YesUser declined the consent request
failed✅ YesJourney failed due to a system or AA network error
expired✅ YesSession expired before the user completed consent

Polling Strategy

Poll every 5–10 seconds after the user is redirected to journey_url. Stop polling when the status reaches any terminal state: analysis_complete, consent_denied, failed, or expired. To eliminate polling altogether, use the webhook_url parameter in /init to receive push notifications on every status change.
:::

Example Successful Response

{
  "success": true,
  "message": "Journey status fetched successfully",
  "data": {
    "client_id": "bsa_clnt_a1b2c3d4e5f6",
    "status": "analysis_complete",
    "consent_type": "loan_underwriting",
    "mobile_number": "98765*****",
    "updated_at": "2024-11-15T13:47:22Z"
  }
}

Possible Error Responses

```json { "success": false, "message": "No journey found for the provided client_id.", "error_code": "NOT_FOUND" } ``` Returned when the `client_id` does not match any active or past journey session. ```json { "success": false, "message": "Unauthorized. Invalid or missing API credentials.", "error_code": "UNAUTHORIZED" } ``` Returned when `X-API-KEY` or `X-API-SECRET` is missing or invalid.

Integration Best Practices

- Never expose the `client_id` to end users or log it in client-side analytics; treat it as a backend session secret - If using webhooks, validate the payload signature before acting on any status update - Store all status transitions with timestamps against the loan application record for compliance audits - Rate-limit your polling to a maximum of once every 5 seconds to avoid unnecessary API quota consumption - Display a progress indicator or animated waiting screen while polling — inform the user that data is being fetched - Show a clear, actionable message for `consent_denied` — for example, offer an alternative document upload flow - For `failed` or `expired` states, provide a one-tap option to restart the journey via `/init` - Avoid polling indefinitely — set a client-side timeout (e.g., 5 minutes) and surface a retry prompt if no terminal state is reached

Code Samples

```bash curl -X GET "https://api.finpass.ai/aa-bsa-journey/status?client_id=bsa_clnt_a1b2c3d4e5f6" \ -H "X-API-KEY: " \ -H "X-API-SECRET: " ``` ```python import requests import time

client_id = "bsa_clnt_a1b2c3d4e5f6"
url = f"https://api.finpass.ai/aa-bsa-journey/status?client_id={client_id}"

headers = {
"X-API-KEY": "<your_api_key>",
"X-API-SECRET": "<your_api_secret>"
}

terminal_statuses = {"analysis_complete", "consent_denied", "failed", "expired"}

while True:
response = requests.get(url, headers=headers)
data = response.json()
status = data["data"]["status"]
print("Current status:", status)

if status in terminal_statuses:
print("Terminal status reached:", status)
break

time.sleep(5)

</Tab>
<Tab title="Node.js">
```javascript
const axios = require("axios");

const clientId = "bsa_clnt_a1b2c3d4e5f6";
const url = `https://api.finpass.ai/aa-bsa-journey/status?client_id=${clientId}`;

const headers = {
  "X-API-KEY": "<your_api_key>",
  "X-API-SECRET": "<your_api_secret>"
};

const terminalStatuses = new Set(["analysis_complete", "consent_denied", "failed", "expired"]);

const pollStatus = async () => {
  const response = await axios.get(url, { headers });
  const { status } = response.data.data;
  console.log("Current status:", status);

  if (!terminalStatuses.has(status)) {
    setTimeout(pollStatus, 5000);
  } else {
    console.log("Terminal status reached:", status);
  }
};

pollStatus().catch(err => console.error("Error:", err.response?.data || err.message));

Related APIs

  • AA BSA — Init Journey — Start a new AA BSA journey session and receive the consent link
  • AA BSA — Statement Result — Retrieve raw bank account and transaction data once status is analysis_complete
  • AA BSA — Analysis JSON — Fetch structured BSA insights including income, obligations, and risk flags

Compliance and Legal Considerations

Journey status data is associated with a user's consent session under the RBI Account Aggregator framework. Ensure that status records and client_id mappings are retained only for the duration required by your regulatory obligations. Do not use status data to infer or store personal financial behaviour beyond what is needed for the declared consent purpose. Access to this endpoint requires the AA_BSA_JOURNEY permission on your Finpass account.

Request

Query Params

Responses

🟢200Success
application/json
Body

Request Request Example
Shell
JavaScript
Java
Swift
curl --location --request GET 'https://api.finpass.ai/api/v1/aa-bsa-journey/status?client_id=<client_id>'
Response Response Example
{
    "client_id": "aabsa_69c0e33a_ecf10acbff12121f1ff39",
    "status": "completed",
    "failed_at_stage": null,
    "total_accounts": 2,
    "completed_accounts": 2,
    "failed_accounts": 0,
    "accounts": [
        {
            "account_index": 0,
            "bank_name": "FDRLFIPPROD",
            "account_number": "XXXXXXXXXX8587",
            "bsa_status": "completed",
            "bsa_client_id": "bank_statement_42c38012a50c",
            "error_message": null
        },
        {
            "account_index": 1,
            "bank_name": "ICICI-FIP",
            "account_number": "XXXXXXXX1316",
            "bsa_status": "completed",
            "bsa_client_id": "bank_statement_b921121e9",
            "error_message": null
        }
    ],
    "error_message": null,
    "created_at": "2026-03-23T06:52:42.931000",
    "updated_at": "2026-03-23T06:55:01.190000"
}
Previous
Initialize
Next
AA BSA — Statement Result
Built with