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

# Paycheck Linked Lending Testing

> Sandbox credentials and integration patterns for testing PLL flows

Test Paycheck Linked Lending (PLL) flows in sandbox using the credentials below. Pass `product_type: pll` on the bridge token, and search for **Truv Payroll Provider** in Truv Bridge.

PLL testing is more behavioral than report-driven. Unlike VOIE and VOA, PLL produces a setup confirmation plus an ongoing stream of deduction events as the borrower's paychecks land. Plan your sandbox tests around the lifecycle, not around a one-shot report.

<Tip>
  For additional login fields, use **Phone:** `(111)111-1111` and **Email:** `goodlogin@domain.com`.
</Tip>

***

## Quick start

| Credential                   | Provider              | What you get                                                       |
| ---------------------------- | --------------------- | ------------------------------------------------------------------ |
| `goodlogin` / `goodpassword` | Truv Payroll Provider | Successful PLL link with the deduction routed to your test account |

For the PLL integration architecture, see the [PLL integration guide](/credit/integration/pll). For the product surface area and use cases, see the [PLL product page](/credit/products/pll).

***

## Check coverage first

Before launching Bridge for a real borrower, call the [Company Mapping endpoint](/api-reference/companies/company_mapping) with `product_type: pll` to get the success likelihood for the borrower's employer. This is the same check you should run in production — sandbox returns a representative response so you can wire the flow.

```bash theme={null}
curl --request GET \
  --url "https://prod.truv.com/v1/companies/mapping/?company_name=Walmart&product_type=pll" \
  --header 'X-Access-Client-Id: YOUR_TRUV_CLIENT_ID' \
  --header 'X-Access-Secret: YOUR_TRUV_CLIENT_SECRET'
```

***

## Tenure-based eligibility scenarios

PLL eligibility commonly depends on the borrower's tenure with their current employer — a minimum employment length (typically 12 months) is a frequent underwriting requirement. Use these credentials to validate your eligibility logic against sub-minimum-tenure borrowers.

| Scenario | Credential                       | Returns                                                                                                                                  |
| -------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `PLL-T1` | `goodlogin.tn1` / `goodpassword` | Active employment with **less than 12 months tenure** — use to confirm your eligibility check correctly declines or routes this borrower |
| `PLL-T2` | `goodlogin.tn2` / `goodpassword` | Active employment with **less than 12 months tenure** (alternate profile when your QA matrix needs multiple sub-12-month test cases)     |

For your happy-path (eligible) case, use the standard `goodlogin` / `goodpassword` — the underlying profile has multi-year tenure that passes the typical 12-month threshold.

***

## Error scenarios

PLL shares the universal authentication-error credentials. Use them to confirm your error handling and retry UX.

| Scenario | Credential                      | Task status                         |
| -------- | ------------------------------- | ----------------------------------- |
| `PLL-X1` | `goodlogin` / `mfa`             | `mfa` → `done` (enter code `12345`) |
| `PLL-X2` | `error.user` / `login_error`    | `login_error`                       |
| `PLL-X3` | `error.user` / `mfa_error`      | `mfa_error`                         |
| `PLL-X4` | `error.user` / `account_locked` | `account_locked`                    |
| `PLL-X5` | `error.user` / `config_error`   | `config_error`                      |

See [Task lifecycle](/api-reference/tasks/lifecycle) for the full status reference.

***

## What sandbox returns

A completed PLL task produces a deposit allocation setup confirmation (same shape as DDS — the underlying mechanism is the same) plus ongoing webhooks as payroll deposits land and Truv recognizes them as repayment events.

<Accordion title="Sample webhook payload">
  ```json theme={null}
  {
    "webhook_id": "609a82aab21e4d9ba2569f35e9e8f26a",
    "event_type": "task-status-updated",
    "updated_at": "2026-04-26T13:02:20.369267+00:00",
    "task_id": "67f2924530564282bbaf6d27655e94a4",
    "link_id": "64f8e374949c4b769706028022626bf1",
    "product": "pll",
    "tracking_info": "your-loan-id",
    "status": "done"
  }
  ```
</Accordion>

***

## Behavior and limitations

### No PDF report

PLL's deliverable is the setup confirmation plus the ongoing webhook stream — there is no PDF report to render or persist. Store the JSON setup response and the per-deduction events alongside your loan record.

### Known sandbox gaps

Sandbox PLL coverage is lighter than VOIE / VOA / DDS:

* There is no scripted way to simulate a missed paycheck or a borrower who loses their job during repayment. Validate those scenarios against your own webhook handler with simulated payloads.
* There is no scripted way to simulate the borrower disconnecting their payroll connection mid-repayment. Use a real refresh failure (`goodlogin` / `mfa_captcha` on the original verification, then trigger a refresh) to approximate.

***

## Next steps

<CardGroup cols={2}>
  <Card title="PLL Integration" icon="book-open" href="/credit/integration/pll">
    Full PLL implementation guide
  </Card>

  <Card title="PLL Product" icon="receipt" href="/credit/products/pll">
    Product overview and use cases
  </Card>

  <Card title="Company Mapping API" icon="building" href="/api-reference/companies/company_mapping">
    Run the PLL coverage check before launching Bridge
  </Card>

  <Card title="Webhook Events" icon="bell" href="/api-reference/webhook-events">
    Subscribe to ongoing deduction events
  </Card>
</CardGroup>
