> ## 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.

# Customer Portal Demo

> Let benefit applicants verify income and employment through a self-service portal

The Customer Portal demo shows a self-service benefits portal where an applicant verifies their income and employment through an embedded Truv flow — no caseworker required. **Source:** [GitHub](https://github.com/truvhq/demo-apps#public-sector)

```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 "Public Sector" → "Customer Portal"
```

<img src="https://mintcdn.com/truv/xdZxh_j1HXZYzFiN/images/demos/public-sector/customer-portal.png?fit=max&auto=format&n=xdZxh_j1HXZYzFiN&q=85&s=c04a36e4b4c188064e52b65f46a62ec9" alt="Customer Portal demo" width="689" height="153" data-path="images/demos/public-sector/customer-portal.png" />

## Flow

<Steps>
  <Step title="Collect applicant info">
    The applicant enters their PII in the benefits portal. The backend searches for the employer and creates an Order.

    ```
    GET /v1/company-mappings-search/?query=...
    POST /v1/orders/
    ```
  </Step>

  <Step title="Bridge verification">
    Truv Bridge opens inline. The applicant connects their payroll provider.

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

  <Step title="Receive webhook and fetch report">
    `order-status-updated` fires on completion. Fetch income and employment data for eligibility.

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

**Integration pattern:** [Embedded Orders](/developers/integration/embedded-orders/overview) | **Products:** VOIE, VOE
