product_type: assets on the bridge token or order, and search for Truv Bank OAuth or Truv Bank non-OAuth in Truv Bridge.
Quick start
| Credential | Provider | What you get |
|---|---|---|
goodlogin / goodpassword | Truv Bank OAuth or Truv Bank non-OAuth | Complete asset data — accounts, balances, transactions, derived income sources |
goodlogin / goodpassword — full assets suborder shape
goodlogin / goodpassword — full assets suborder shape
The complete assets payload a successful bank connection returns: every connected
account with balances and owners, plus the bank income engine’s bank_income_sources (income classification, cadence, forecasted monthly income, and a sample of the monthly historical_summary). Captured from a live sandbox order; per-month transaction arrays are truncated for length.Credential scenarios
Every credential here connects through Truv Bank OAuth or Truv Bank non-OAuth and returns the same shape as Quick start — the Sample responses panels show only the fields that differ. Each credential string is a stable test-case identifier you can cite in tickets.Account types
| Scenario | Credential | Account types returned |
|---|---|---|
VOA-A1 | goodlogin.checking / goodpassword | Checking |
VOA-A2 | goodlogin.checking.savings / goodpassword | Checking, Savings |
VOA-A3 | goodlogin.card / goodpassword | Checking, Savings |
VOA-A4 | goodlogin.inv / goodpassword | Investment |
VOA-A5 | goodlogin.all / goodpassword | Checking, Savings, Investment |
VOA-A6 | sit / goodpassword | Certificate of Deposit, Stocks, Bonds |
accounts[].type and accounts[].subtype across the common shapes.
Sample responses
Sample responses
- Checking (A1)
- Checking + Savings (A2)
- Card (A3)
- Investment (A4)
- All types (A5)
- CD + Stocks + Bonds (A6)
Returns a single Checking account.
goodlogin.all returns income sources spread across multiple account_id values (not all attributed to one account). Use this credential when you need to validate handling of the same applicant having recurring activity on more than one connected account — for example, paycheck deposit on checking + gig income on a separate savings account.Bank income sources
Each credential drives the bank income engine’sincome_category classification. Use these to validate your decisioning across the categories Truv classifies bank deposits into.
| Scenario | Credential | income_category returned |
|---|---|---|
VOA-I1 | goodlogin.gig / goodpassword | GIG_ECONOMY |
VOA-I2 | goodlogin.gov.employee / goodpassword | GOVERNMENT_EMPLOYMENT |
VOA-I3 | goodlogin.ewa / goodpassword | EWA_PAYROLL |
VOA-I4 | goodlogin.retirement / goodpassword | RETIREMENT |
VOA-I5 | goodlogin.rental / goodpassword | RENTAL |
VOA-I6 | goodlogin.unemployment / goodpassword | UNEMPLOYMENT |
VOA-I7 | goodlogin.gov.benefits / goodpassword | GOVERNMENT_BENEFITS |
VOA-I8 | goodlogin.benefits / goodpassword | PRIVATE_BENEFITS |
VOA-I9 | goodlogin.tax.credits / goodpassword | PAYCHECK |
VOA-I10 | goodlogin.interest / goodpassword | PAYCHECK |
Sample responses
Sample responses
- Gig economy (I1)
- Govt employment (I2)
- EWA payroll (I3)
- Retirement (I4)
- Rental (I5)
- Unemployment (I6)
- Govt benefits (I7)
- Private benefits (I8)
- Tax credits (I9)
- Interest (I10)
Bank income classified as
GIG_ECONOMY (DoorDash deposits).The full
income_category enum includes PAYCHECK, GOVERNMENT_EMPLOYMENT, EWA_PAYROLL, GIG_ECONOMY, RETIREMENT, RENTAL, UNEMPLOYMENT, GOVERNMENT_BENEFITS, PRIVATE_BENEFITS, P2P_TRANSFER, TAX_CREDITS, CASH_OR_CHECK, INTEREST, INVESTMENT, and OTHER. If your enum validation is strict, allow all of these values.Risk profiles
Combine the asset credential with these passwords to simulate different consumer risk profiles. Use them to test downstream decisioning that consumes Truv’s asset and bank income data.| Scenario | Credential | What it returns |
|---|---|---|
VOA-R1 | goodlogin / good_asset | 30 days of data — use to test recency-based decisioning |
VOA-R2 | goodlogin / low_risk | Low-risk consumer profile |
VOA-R3 | goodlogin / high_risk | High-risk consumer profile |
Sample responses
Sample responses
- 30 days (R1)
- Low risk (R2)
- High risk (R3)
Recency-limited profile for testing recency-based decisioning.
Error scenarios
VOA shares the universal authentication-error credentials. Use these to test your error handling and retry UX.| Scenario | Credential | Task status |
|---|---|---|
VOA-X1 | goodlogin / no_data | no_data |
VOA-X2 | goodlogin / mfa | mfa → done (enter code 12345) |
VOA-X3 | error.user / login_error | login_error |
VOA-X4 | error.user / account_locked | account_locked |
VOA-X5 | error.user / unavailable | unavailable |
VOA-X6 | error.user / error | error |
Recurring transactions endpoint
The recurring transactions endpoint (GET /v1/users/{user_id}/transactions/recurring/) runs on top of the same assets connection — once an applicant has completed a VOA verification, you can call the endpoint to retrieve detected recurring inflows and outflows on the connected accounts.
| Credential | Returns |
|---|---|
goodlogin / goodpassword | A single recurring inflow (gig income), 53 historical transactions, one account_id. Suitable for basic happy-path testing. |
goodlogin.all / goodpassword | Multiple recurring inflow sources distributed across multiple account_id values — paycheck and gig income land on different accounts. Use this when validating multi-account aggregation. |
Sandbox seeds recurring inflows only. Sandbox responses populate the
inflows[] array; the outflows[] array (subscriptions, recurring expenses, loan payments) returns empty across every documented login variant today. Validate your inflow-handling logic end to end in sandbox, but plan to test outflow handling against production data or a controlled test in your production environment. We’re tracking this gap internally.is_recurring_transactions_detection_enabled UWS flag to be on for your account. If you call it and receive empty arrays for both inflows and outflows with goodlogin / goodpassword, contact support@truv.com to confirm the flag is enabled on your sandbox.
For the full endpoint contract — source_id vs account_id, status semantics, historical transactions per source — see the Recurring Transactions API reference.
Accounts without transactions
Sandbox connections occasionally return bank accounts that have no transactions on them yet — a recently opened checking account, an investment account that hasn’t seen activity in the lookback window, etc. This is a valid scenario, not an error. To confirm your integration handles it: passgoodlogin.inv / goodpassword and inspect the response. The investment account is returned with balance fields populated but an empty or sparse transactions[] array. Validate that your decisioning logic treats transactions: [] as a real signal (e.g., “this account exists but has no income evidence”) rather than treating it as a failed connection.
Sample VOA reports
Truv’s VOA report format is the same whether the report is consumed by a non-GSE lender or submitted to Fannie Mae DU / Freddie Mac LPA. The PDFs linked from the GSE pages are the canonical sample VOA report references today.Fannie Mae VOA samples
Sample VOA PDFs tied to Fannie Mae D1C borrower scenarios
Freddie Mac VOA samples
Sample VOA PDFs tied to Freddie Mac AIM borrower scenarios
Webhook events
When testing VOA end to end, your webhook endpoint receives atask-status-updated event for the financial-accounts task plus per-resource events as accounts, transactions, and bank income are extracted.
Sample webhook payload
Sample webhook payload
bank-accounts-created, transactions-created, and (for derived bank income) updates that surface through the standard task lifecycle. See Webhook Events for the full catalog.
Next steps
Bank Aggregation
Product overview for transactions and bank income
Bank Income
Integration guide for bank-derived income
GSE Testing
AIM-VOA submission flow with Freddie Mac
Report Object
JSON schema for the VOA report