Skip to main content
Income & Employment (VOIE) verification provides instant access to client income and employment data directly from payroll providers. For public sector agencies, this replaces manual pay stub collection and employer phone calls with real-time, source-verified data.

Benefits

Eliminate manual entry

Replace employer phone calls and paper forms with instant payroll data

Broad coverage

Connects to payroll providers covering 85%+ of US employees. See coverage for details.

Source-verified data

Data comes directly from payroll systems — no self-reported documents

Faster processing

Seconds instead of days for income and employment verification

What you get

Income Data

  • Current income: Base salary, hourly rate, tips, commission, bonus, overtime
  • Pay frequency: Weekly, bi-weekly, semi-monthly, monthly
  • YTD earnings: Year-to-date gross and net pay
  • Deductions: Federal/state taxes, benefits, garnishments, child support
  • Pay history: Historical pay statements across multiple pay periods

Employment Data

  • Employer information: Name, address, phone number, EIN
  • Employment status: Active, terminated, on leave
  • Employment dates: Start date, end date (if applicable)
  • Job title: Current position and department
  • Work schedule: Full-time, part-time, hours per week

Documents

  • Pay stubs (PDF)
  • W-2 forms (when available)
  • Employment verification letter

Government use cases

Verify household income against program thresholds. Income & Employment verification captures all income streams, including gig work and multiple employers, giving a complete picture for means-tested programs.Typical product: income (automatically includes employment data)
Determine eligibility and subsidy amounts based on verified income. Pay frequency and YTD data help normalize income across different pay schedules.Typical product: income (automatically includes employment data)
Refresh income data automatically at recertification time using the Order Refresh API. When the client’s payroll session is still active, Truv pulls fresh pay statements, updated YTD earnings, and current employment status — no client action needed.If the session has expired, create a new order and send a verification link through your renewal workflow. The client re-authenticates through Bridge.For programs with periodic eligibility reviews, most refreshes succeed automatically. For annual recertification, plan for re-authentication on a larger share of cases. See Data Refresh for implementation details.Typical product: income (automatically includes employment data)
Truv connects to the Social Security Administration (SSA) as a distinct provider. This covers clients whose primary income is Social Security benefits rather than payroll employment.Benefit type classification: The job_title field in the employment response identifies the specific benefit type. Values include:
  • "Disability" — SSDI benefits
  • "Survivors" — Survivor benefits
  • "Retirement" — Retirement benefits
What you receive: SSA income returns a Benefits Verification Letter rather than standard paystubs. This letter confirms the benefit type and monthly payment amount. Standard payroll fields like w2s, deductions, and pay frequency are not applicable for SSA connections.Bank transaction fallback: Government benefit deposits can also be detected through bank transaction analysis. Include the assets product in your order to capture bank-deposited benefit payments when the client cannot authenticate directly with SSA.Sandbox testing: In Bridge, search for SSA as the provider and authenticate with goodlogin / goodpassword.Typical product: income (automatically includes employment data)

Data coverage

Truv connects to payroll providers covering 85%+ of US employees, including ADP, Paychex, Workday, UKG, Paylocity, Gusto, and 100+ more. See the coverage page for the full provider list.

Supported income types

Income typeHow it’s captured
W-2 employmentDirect payroll connection
1099 contractorsPayroll provider connection
Multiple employersClient connects each employer separately
Gig / on-demand workPayroll connection (e.g., Uber, DoorDash) or bank transactions via assets
Self-employmentBank transactions via assets product
For the most complete income picture, include income and assets products in your order. The income product automatically includes employment data — no need to request employment separately. This captures W-2 payroll and bank-deposited income from self-employment, gig work, and other non-payroll sources.

How to implement

PathCode requiredBest for
Customer PortalMinimalSelf-service client verification
Caseworker PortalNoneCaseworker-initiated orders via Dashboard
Document ProcessingMinimalUpload pay stubs and tax documents for extraction

Report structure

API Response

The Income & Employment response uses the IncomeCheck schema. The top-level object contains an employments array, where each entry includes nested company, profile, income fields, and statements.
FieldPathExample
Annual incomeemployments[].income"70000.00"
Income periodemployments[].income_unitYEARLY
Pay frequencyemployments[].pay_frequencyBW (Bi-Weekly)
Employeremployments[].company.name"Acme Corporation"
Pay statementsemployments[].statements[]Array of pay stubs
W-2 formsemployments[].w2s[]Array of W-2 docs
{
  "id": "24d7e80942ce4ad58a93f70ce4115f5c",
  "status": "done",
  "finished_at": "2024-01-20T14:30:00Z",
  "access_token": "48427a36d43c4d5aa6324bc06c692456",
  "provider": "adp",
  "employments": [
    {
      "id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
      "income": "60000.00",
      "income_unit": "YEARLY",
      "pay_rate": "2307.69",
      "pay_frequency": "BW",
      "is_active": true,
      "job_title": "Medical Technician",
      "job_type": "F",
      "start_date": "2021-06-15",
      "original_hire_date": "2021-06-15",
      "company": {
        "name": "City General Hospital",
        "address": {
          "street": "500 Main St",
          "city": "Springfield",
          "state": "IL",
          "zip": "62701"
        },
        "phone": "2175550100",
        "ein": "37-1234567"
      },
      "profile": {
        "first_name": "Maria",
        "last_name": "Garcia"
      },
      "statements": [
        {
          "pay_date": "2024-01-19",
          "net_pay": "1780.00",
          "net_pay_ytd": "1780.00",
          "gross_pay": "2450.00",
          "gross_pay_ytd": "2450.00",
          "hours": "80.00",
          "basis_of_pay": "H"
        }
      ],
      "w2s": [
        {
          "year": 2023,
          "wages": "58000.00",
          "federal_tax": "7200.00",
          "gross_pay": "58000.00"
        }
      ]
    }
  ]
}
For the full schema, see the Income & Employment reports reference.

API reference

Orders

Create and manage verification orders

Income Report

Retrieve income verification data

Employment Report

Retrieve employment data

Webhooks

Receive status notifications

Best practices

For benefits eligibility, 12 months provides enough data to calculate average monthly income and identify seasonal patterns. See the Create Order API reference for all available fields.
Many benefits clients have multiple income sources: part-time jobs, gig work, seasonal employment. Include both income and assets products so clients can connect payroll and bank accounts in one session.
If your agency already has the client’s employer on file, pass a company_mapping_id to skip the employer search screen. This improves completion rates. Learn more about deeplinking.
Pass the locale parameter when creating an order to render Bridge, emails, and SMS in the client’s preferred language. See threshold languages for supported languages.
Enable self-certification so clients can review and confirm the income and employment data Truv retrieves. This is especially useful for clients with multiple income sources or irregular pay.

Next steps

Implementation Guide

Step-by-step technical setup

Overview

Integration scenarios across all channels

Customer Portal

API examples and code patterns

Testing

Sandbox test credentials