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

# Screening Implementation Guide

> Complete implementation guide for background screening

Complete guide for integrating Truv into your background screening workflow.

***

## Architecture

<Tabs>
  <Tab title="Embedded Order">
    ```mermaid theme={null}
    sequenceDiagram
        participant Hiring Manager
        participant Your System
        participant Truv
        participant Candidate
        participant Payroll

        Hiring Manager->>Your System: Request background check
        Your System->>Truv: Create order
        Truv-->>Your System: bridge_token
        Your System->>Candidate: Send verification link
        Candidate->>Truv: Connect employers
        Truv->>Payroll: Verify employment
        Payroll-->>Truv: Employment data
        Truv-->>Your System: Webhook
        Your System->>Hiring Manager: Report ready
    ```
  </Tab>

  <Tab title="Hosted Order">
    ```mermaid theme={null}
    sequenceDiagram
        participant Server as Your Server
        participant API as Truv API
        participant Candidate as Candidate

        Server->>API: 1. Create Order (POST /v1/orders/)
        API-->>Server: order_id, share_url
        API->>Candidate: 2. Email/SMS with verification link
        Candidate->>API: 3. Connects payroll account(s)
        API-->>Server: 4. Webhook (task-status-updated, done)
        Server->>API: 5. GET /v1/links/{link_id}/employment/report/
        API-->>Server: Employment history
    ```
  </Tab>
</Tabs>

<Tip>
  **Hosted orders work well for screening.** Candidates typically aren't logged into your platform when they need to verify. Send them a link and get notified when they complete. See [Hosted Orders](/developers/integration/hosted-orders/new-user).
</Tip>

***

## Backend implementation

### Create an order for the candidate \[Server-side]

```bash theme={null}
curl --request POST \
     --url https://prod.truv.com/v1/orders/ \
     --header 'X-Access-Client-Id: YOUR_TRUV_CLIENT_ID' \
     --header 'X-Access-Secret: YOUR_TRUV_CLIENT_SECRET' \
     --header 'Content-Type: application/json' \
     --data '{
  "products": ["employment"],
  "first_name": "Jane",
  "last_name": "Smith",
  "email": "jane@example.com",
  "external_user_id": "candidate-123"
}'
```

Store the `order_id` and send the `bridge_token` or `share_url` to the candidate.

### Handle completion \[Server-side]

When you receive a `task-status-updated` webhook with `status: done`, fetch the employment report:

```bash theme={null}
curl --request GET \
     --url https://prod.truv.com/v1/links/{link_id}/employment/report/ \
     --header 'X-Access-Client-Id: YOUR_TRUV_CLIENT_ID' \
     --header 'X-Access-Secret: YOUR_TRUV_CLIENT_SECRET'
```

***

## Candidate experience

The candidate receives a verification link (via email, SMS, or embedded in your portal) and connects their employer accounts through Truv Bridge. See the [Bridge SDK](/developers/sdks/overview) for client-side initialization and the [React SDK](/developers/sdks/react) for React-based integrations.

***

## Testing

Use sandbox credentials to test different candidate scenarios before going live.

| Username     | Password       | Scenario                     |
| ------------ | -------------- | ---------------------------- |
| `goodlogin`  | `goodpassword` | Successful connection        |
| `goodlogin`  | `mfa`          | MFA required (code: `12345`) |
| `error.user` | `login_error`  | Connection error             |

See [Test Credentials](/developers/testing/test-credentials) for the full list of sandbox credentials.

***

## Best practices

* Send clear instructions to candidates explaining what verification involves
* Set reasonable deadlines and send follow-up reminders
* Handle partial completions -- process available data even if not all employers are connected
* Provide a fallback process for employers not available through payroll integration
* Store the `order_id` alongside your candidate record for easy lookups
