Integration pattern: Bridge Widget | Products: VOIE | Demo: PayrollIncome
Get started
Run the demo
Clone and run the PayrollIncome demo to see the full payroll income verification flow working locally.Open
http://localhost:5173, select Consumer Credit > Payroll Income, and walk through a verification using sandbox credentials (goodlogin / goodpassword).See full setup instructions for ngrok and environment configuration.Understand the API flow
The demo follows this sequence:
- Search for employer — Your server calls GET /v1/company-mappings-search/ to find the applicant’s employer by name. The response returns a
company_mapping_id. - Create a user — Your server calls POST /v1/users/ to create a Truv user.
- Create a bridge token — Your server calls POST /v1/users//tokens/ with
product_type: "income",data_sources: ["payroll"], andcompany_mapping_idto deeplink Bridge to the employer. - Initialize Bridge — Your frontend opens Truv Bridge with the
bridge_token. The applicant connects their payroll account. - Receive webhooks — Truv sends a
task-status-updatedwebhook when verification completes. Verify the signature using theX-Webhook-Signheader with HMAC-SHA256. - Retrieve the VOIE report — Fetch the report with POST /v1/users//reports/. The report contains verified income and employment data from the payroll provider.
Review the code
Each step maps to a specific file in the demo. Use these as reference when building your integration.
| Step | Demo file | API reference |
|---|---|---|
| Employer search | src/components/CompanySearch.jsx | Company Search |
| User creation | server/routes/bridge.js | POST /v1/users/ |
| Bridge token | server/routes/bridge.js | POST /v1/users//tokens/ |
| Bridge initialization | src/demos/PayrollIncome.jsx | Bridge SDK |
| Webhook verification | server/webhooks.js | Webhook events |
| Report retrieval | server/routes/user-reports.js | Income reports |
Consumer Credit-specific configuration
Bridge token for payroll income
Setdata_sources to ["payroll"] to restrict Bridge to payroll connections only:
company_mapping_id from the company search to deeplink Bridge directly to the employer’s payroll provider. Without it, Bridge shows a generic employer search screen.
Payroll income uses
company_mapping_id (not provider_id). The provider_id field is for financial institutions like banks. Passing the wrong identifier type causes Bridge to show a generic search screen.VOIE report
Payroll income verification returns a standard VOIE report containing:- Current and historical income (base pay, overtime, bonuses, commissions)
- Employment details (employer name, hire date, status)
- Pay frequency and YTD earnings
income product type includes employment data automatically. You do not need to request employment separately.
Next steps
Smart Routing
Automatically recommend payroll, bank, or documents based on employer coverage
Bank Income
Fall back to bank transactions when payroll coverage is low
Bridge Widget Guide
Full implementation guide for user creation, bridge tokens, and Bridge initialization
Deeplinking
Skip the employer search when you already know the company