product_type: deposit_switch on the bridge token along with the account block, and search for Truv Payroll Provider in Truv Bridge.
Quick start
Usegoodlogin / goodpassword against Truv Payroll Provider with this bridge token payload:
parse → full_parse → switch_deposit → done. Retrieve the confirmation with GET /v1/users/{user_id}/deposit_switch/report/.
Allocation type scenarios
DDS supports three allocation types. Each behaves differently on the payroll-provider side, so test all three.| Scenario | deposit_type | deposit_value | Behavior |
|---|---|---|---|
DDS-A1 | entire | Not required | Routes the entire paycheck to the destination account |
DDS-A2 | amount | Dollar amount (e.g. "500.00") | Routes a fixed dollar amount per pay cycle |
DDS-A3 | percent | Percentage (e.g. "50") | Routes a percentage of the paycheck |
Error scenarios
DDS surfaces a number of payroll-provider-side validation failures asconfig_error. The most common ones to test:
| Scenario | Credential / setup | Task status | What it simulates |
|---|---|---|---|
DDS-X1 | goodlogin / goodpassword, customer already at 100% allocation | config_error | Payroll provider rejects the new allotment because total distribution already equals 100%. The customer must reduce or remove an existing allotment before retry. |
DDS-X2 | error.user / config_error | config_error | Organization ID configuration failure |
DDS-X3 | error.user / login_error | login_error | Incorrect credentials |
DDS-X4 | error.user / mfa_error | mfa_error | MFA verification failed |
DDS-X5 | error.user / account_locked | account_locked | Account locked by provider |
For the “already at 100%” scenario, Truv surfaces the payroll provider’s exact rejection message in the task
error_message field. Render that message back to the customer rather than a generic error — it tells them exactly which existing allotment to adjust.Already-connected employers
When the same applicant (sameexternal_user_id) attempts a second connection to the same employer they’ve already verified at, Truv blocks the duplicate by default — controlled by the is_same_account_connection_restricted UWS flag, which is on for most accounts.
In Bridge, the applicant sees an “Already connected” screen with an option to update the existing connection rather than creating a new one. From the API side, this means:
- Creating a new order with the same
external_user_idand routing the applicant back through Bridge for the same employer does not produce a second link or a secondswitch_deposittask. - To programmatically refresh a DDS connection’s data (without the applicant re-authenticating), use the refresh order endpoint on the original order.
- To re-allocate to a different destination account for the same applicant + same employer, you’ll need to either disable the restriction on your account (contact support@truv.com) or update the existing allotment via the same provider session.
external_user_id per test run, since the same external_user_id will be treated as a returning user.
Webhook events
DDS includes one status that other products don’t:switch_deposit. This indicates Truv is actively writing the new allotment into the payroll provider after parsing completed.
Sample webhook payload
Sample webhook payload
status: done (or status: config_error if the switch failed at the payroll-provider validation step).
Behavior and limitations
No PDF report
Unlike VOIE and VOA, DDS does not generate a downloadable PDF report. The deliverable is the JSON response from the DDS Report endpoint, which confirms the destination Truv wrote and the customer’s pre-existing accounts. If you persist switch evidence for audit, store the JSON response alongside your application record at the timetask-status-updated fires with status: done.
Destination matching
When Truv writes the allotment, the match key against existing direct deposit rows isaccount_number + routing_number (with a last-4 fallback when the payroll provider masks the account number). Same destination is a no-op or in-place update; different destination is an insert. There is no source-of-origin marker — Truv cannot distinguish a row it wrote previously from one the customer created manually.
See DDS destination matching for the full match rules.
Next steps
DDS Implementation Guide
Full implementation guide with allocation patterns and constraints
Bridge Token API
Mint a deposit_switch bridge token
DDS Report API
Retrieve the switch confirmation
Webhook Events
Handle task-status-updated through switch_deposit