> ## Documentation Index
> Fetch the complete documentation index at: https://docs.truv.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Bank Income Demo

> Verify applicant income from bank transactions when payroll data is unavailable

The Bank Income demo shows how to verify income by connecting to an applicant's bank account and analyzing transaction history — use this when payroll data isn't available for the applicant's employer. **Source:** [GitHub](https://github.com/truvhq/demo-apps#consumer-credit)

```bash theme={null}
git clone https://github.com/truvhq/demo-apps.git
cd demo-apps && npm install && cp .env.example .env
npm start && npm run dev  # select "Consumer Credit" → "Bank Income"
```

<img src="https://mintcdn.com/truv/xdZxh_j1HXZYzFiN/images/demos/consumer-credit/bank-income.png?fit=max&auto=format&n=xdZxh_j1HXZYzFiN&q=85&s=44084e5c8f66eaab418c0bf80d844af0" alt="Bank Income demo" width="1200" height="676" data-path="images/demos/consumer-credit/bank-income.png" />

## Flow

<Steps>
  <Step title="Create user and bridge token">
    The backend creates a user and generates a bridge token restricted to financial accounts.

    ```
    POST /v1/users/
    POST /v1/users/{id}/tokens/
    # { product_type: "income", data_sources: ["financial_accounts"] }
    ```
  </Step>

  <Step title="Connect bank account via Bridge">
    Bridge opens showing only financial institutions. The applicant selects their bank and logs in.

    Sandbox credentials: `goodlogin` / `goodpassword`
  </Step>

  <Step title="Receive webhook and fetch report">
    `task-status-updated` fires on completion. Fetch the Income Insights report.

    ```
    POST /v1/users/{user_id}/income_insights/reports/
    ```
  </Step>
</Steps>

**Integration pattern:** [Bridge Widget](/developers/integration/bridge-widget/overview) | **Products:** Income Insights
