> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://www.truework.com/docs/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://www.truework.com/docs/_mcp/server.

# Get One Report

GET https://api.truework-sandbox.com/verification-requests/{verification_request_id}/reports/{verification_report_id}

Retrieves a Report for a given Verification id with multiple reports. If you don't have the report id,
it is recommended to use the embedded `reports` key from `GET /verification-requests/{verification_id}` to retrieve reports.

You can get the report in PDF format by adding `Accept: application/pdf` to your headers. When testing, please use the generated curl command
with `--output <PDF filename>` specified.

\<!-- theme: info -->

> Only completed Verifications have Reports associated with them. Any other request will fail with either 400 or 404, and provide more information as an attached error message.
> Reports are also embedded into the Verification object returned from get and get one.

Reference: https://www.truework.com/docs/api-reference/previous-versions/2019-10-15/get-verification-report

## Authentication

- `Authorization` header (bearer token, required) — Bearer tokens conform to the [RFC6750](https://datatracker.ietf.org/doc/html/rfc6750#section-2.1) spec. Production API keys (secret keys) are prefixed with `tw_sk_` and sandbox keys are prefixed with `tw_sk_test_`. If your secret key is published, you should rotate your API keys. Truework.JS publishable keys are prefixed with `tw_pk_` and `tw_pk_test` respectively. **Examples** - For Authorization Headers: `Authorization: Bearer tw_sk_test_e508eb797edb95ade85284bcb54dd49ed45db1be` - For the "try it now" `token` field, input only the token itself, omitting `Bearer `.

## Servers

- `https://api.truework-sandbox.com` (Sandbox, default)
- `https://api.truework.com` (Production)

## Request

### Path parameters

- `verification_request_id` (string, required) — Verification ID
- `verification_report_id` (string, required) — Report ID

### Query parameters

- `income_analytics` (boolean, optional, default: false) — Whether to calculate income analytics for the nested reports in each verification.
- `fields` (string, optional, nullable) — Comma-separated names of fields to include in the response. If omitted, all fields are included

### Headers

- `Accept` (enum, optional, default: application/json) — Specify the content type and version that the API should use. It's recommended to include this to avoid breaking changes.
  - Allowed values: `application/json`, `application/pdf`, `application/json; version=2019-10-15`, `application/pdf; version=2019-10-15`

## Response

### 200

OK

- `additional_notes` (string, required, nullable)
- `created` (datetime, required)
- `current_as_of` (date, required)
- `d1c_eligible` (boolean, required, nullable) — Returns true if this report is eligible for Day 1 Certainty
- `disputes` (list of _Dispute, required) — Disputes that are currently open and relevant to this report
- `du_reference_id` (string, required, nullable) — This is the reference ID to submit to Fannie Mae for purposes of getting Day 1 Certainty
- `employee` (_Employee, required)
- `employer` (_Employer, required)
- `id` (string, required)
- `income_analytics` (ReportIncomeAnalyticsVMinimumVersion, required, nullable) — Calculated income features. Only returned if the `income_analytics` query parameter is provided and is `true` and the employee status on the report is active.
- `paid_through_date` (date, required, nullable) — The pay period end date of the most recent paystub (falling back to the pay date if no pay period end is set). This field is only populated for VOIE reports and will be null for non-VOIE reports or when no paystubs exist.
- `paystubs` (list of _Paystub, required, nullable) — Individual paystubs for each pay period. Paystubs are returned sorted in descending order from most recent to least recent pay date.
- `pricing_tier` (enum, required, nullable)
  - Allowed values: `instant`, `credentials`, `smart-outreach`, `third-party-providers`
- `respondent` (_Respondent, required, nullable)
- `verification_request` (_VerificationRequest, required)

## Errors

### 400 Bad Request Error

Verification not found

- `error` (_InvalidRequestError, required)

### 401 Unauthorized Error

The request's authorization is missing, invalid, or expired

- `error` (Error, required)

### 403 Forbidden Error

Forbidden

- `error` (Error, required)

### 406 Not Acceptable Error

An invalid API version was requested

- `error` (Error, required)

### 429 Too Many Requests Error

Too Many Requests

- `error` (Error, required)

### 451 Unavailable for Legal Reasons Error

Frozen SSN

- `error` (Error, required)

### 500 Internal Server Error

Internal Server Error

- `error` (Error, required)

### 501 Not Implemented Error

Not Implemented

- `error` (Error, required)

## Types

### _Dispute

- `created` (datetime, required)
- `description` (string, required) — Description of dispute
- `id` (string, required) — ID for this dispute in Truework
- `reference_id` (string, required) — ID for this dispute to be displayed and referenced outside of this API

### _Employee

- `earnings` (list of _Earnings, required, nullable)
- `email` (string, required, nullable)
- `first_name` (string, required)
- `hired_date` (date, required, nullable)
- `last_name` (string, required)
- `on_leave_date` (date, required, nullable)
- `positions` (list of _Position, required)
- `salary` (_Salary, required, nullable)
- `social_security_number` (string, required, nullable) — The employee's obfuscated social security number
- `status` (enum, required) — There are three employment statuses available on the `status` field in `Employee`: | VALUE | DESCRIPTION | VERSION INTRODUCED | OLDER VERSION VALUE | | ---------------- | ------------------------------------------------------------------- | ------------------ | ------------------- | | active | The employee is currently employed and working for this employer | | | | inactive | The employee is not employed at this employer anymore | | | | unknown | Truework could not determine the employment status of this employee | | |
  - Allowed values: `active`, `inactive`, `unknown`
- `status_detail` (enum, required) — The `status_detail` provides more granular information for some `status` values: | VALUE | DESCRIPTION | `Status` | | ------------------ | ------------------------------------------------------------------- | ---------------- | | active | The employee is currently employed and working for this employer | active | | int-assignment | The employee is on international assignment | active | | casual | The employee is employed casually | active | | long-term-dis | The employee is on long term disability | active | | sick-leave | The employee is on sick leave | active | | surviving-spouse | The employee is a surviving spouse | inactive | | inactive | The employee is not employed at this employer anymore | inactive | | on-leave | The employee is on leave | active | | multiple-positions | The employee has multiple active positions | active | | new-employee | The employee is new | active | | lay-off | The employee was laid off | inactive | | part-time | The employee is currently employed on a part time basis | active | | retired | The employee is retired | inactive | | separated | The employee is separated | inactive | | season | The employee is seasonal | active | | temporary | The employee is temporary | active | | intern | The employee is an intern | active | | transferred | The employee has been transferred | active | | deceased | The employee is deceased | inactive | | severed-pay | The employee has been severed with pay | inactive | | on-sabbatical | The employee is on sabbatical | active | | divested | The employee is part of a divested population | active | | temp-inactive | The employee is temporarily inactive | inactive | | full-time | The employee is full time | active | | non-emp-ben | The employee is a non employee beneficiary | inactive | | not-assignment | The employee is not currently on assignment | inactive | | not-payroll | The employee is not currently on payroll | inactive | | active-as-needed | The employee is active as needed | active | | unknown | Truework could not determine the employment status of this employee | unknown | | furloughed-covid | The employee was furloughed due to COVID-19 | furloughed-covid | | non-employee | Truework could not find record of this employee | non-employee |
  - Allowed values: `active`, `int-assignment`, `casual`, `long-term-dis`, `sick-leave`, `surviving-spouse`, `inactive`, `on-leave`, `multiple-positions`, `new-employee`, `lay-off`, `part-time`, `retired`, `separated`, `season`, `temporary`, `intern`, `transferred`, `deceased`, `severed-pay`, `on-sabbatical`, `divested`, `temp-inactive`, `full-time`, `non-emp-ben`, `not-assignment`, `not-payroll`, `active-as-needed`, `unknown`, `furloughed-covid`, `non-employee`, `future-employee`
- `termination_date` (date, required, nullable)

### _Employer

- `address` (string, required, nullable)
- `government_ids` (list of _GovernmentId, required, nullable)
- `name` (string, required)

### ReportIncomeAnalyticsVMinimumVersion

- `annualized_income` (_AnnualizedIncome, required, nullable)
- `income_volatility` (_IncomeVolatility, required, nullable)

### _Paystub

- `base` (string, required, nullable) — Pre-deduction base pay
- `bonus` (string, required, nullable) — Pre-deduction bonus pay
- `commission` (string, required, nullable) — Pre-deduction commission pay
- `gross` (string, required, nullable) — Total pre-deduction earnings for this pay period
- `id` (string, required) — ID for this paystub in Truework
- `net` (string, required, nullable) — Total post-deduction earnings for this pay period
- `other` (string, required, nullable) — Pre-deduction other pay
- `overtime` (string, required, nullable) — Pre-deduction overtime pay
- `pay_date` (date, required, nullable) — Date of paycheck delivery
- `pay_period_end_date` (date, required, nullable) — Last day of pay period
- `pay_period_hours` (string, required, nullable) — Hours worked in this pay period
- `pay_period_start_date` (date, required, nullable) — First day of pay period
- `reference_id` (string, required, nullable) — ID for this paystub from the payroll provider

### _Respondent

- `email` (string, required, nullable)
- `full_name` (string, required, nullable)
- `title` (string, required, nullable)

### _VerificationRequest

- `created` (datetime, required)
- `id` (string, required)
- `type` (enum, required)
  - Allowed values: `employment-income`, `employment`, `tenant-screening`, `assets`

### _InvalidRequestError

- `message` (string, required, default: Invalid field values provided)

### Error

- `message` (string, required)

### _Earnings

- `base` (string, required)
- `bonus` (string, required)
- `commission` (string, required)
- `other` (string, required)
- `overtime` (string, required)
- `termination` (boolean, required)
- `total` (string, required)
- `year` (string, required, nullable)

### _Position

- `employment_type` (enum, required) — | VALUE | DESCRIPTION | VERSION INTRODUCED | OLDER VERSION VALUE | | ----------------- | -------------------------------- | ------------------ | ------------------- | | regular-full-time | Regular full time | | | | regular-part-time | Regular part time | | | | contractor-1099 | Contractor | | | | other | Other or unknown employment type | | |
  - Allowed values: `regular-full-time`, `regular-part-time`, `contractor-1099`, `other`
- `end_date` (date, required, nullable)
- `start_date` (date, required, nullable)
- `title` (string, required, nullable)

### _Salary

- `gross_pay` (string, required, nullable) — Describes the amount that determine the employees pay.
- `hours_per_week` (string, required, nullable)
- `months_per_year` (string, required, nullable)
- `pay_frequency` (enum, required, nullable) — The frequency by which the employee is paid.
  - Allowed values: `annually`, `daily`, `semiweekly`, `monthly`, `weekly`, `biweekly`, `bimonthly`, `semimonthly`, `quarterly`, `semiannually`, `thirteen-monthly`, `fourteen-month`, `hourly`, `variable`
- `reduced_covid` (enum, required)
  - Allowed values: `yes`, `no`, `unknown`

### _GovernmentId

- `id` (string, required)
- `type` (enum, required)
  - Allowed values: `us-fein`

### _AnnualizedIncome

- `amount` (MoneyAmountVMinimumVersion, required) — This field is being deprecated. This field is the same as gross_amount. If gross_amount returns `null`, this field will be returned with `0.00` as a value.
- `base_amount` (MoneyAmountVMinimumVersion, required, nullable) — Represents annualized income for recurring income, like salary. In rare cases due to data quality issues, gross amount is returned without base amount or vice versa.
- `gross_amount` (MoneyAmountVMinimumVersion, required, nullable) — Represents base annualized income plus variable income sources. In rare cases due to data quality issues, gross amount is returned without base amount or vice versa.
- `short_employment_warning` (boolean, required) — True if the employee recently started at this position, which could impact annualized income accuracy.
- `stale_data_warning` (boolean, required) — True if the data on this report is not fresh, which could impact annualized income accuracy.
- `variable_income_warning` (boolean, required) — True if the employees income has high variability, which could impact annualized income accuracy.

### _IncomeVolatility

- `gross_income_volatility` (string, required, nullable) — Coefficient of variation of the aggregated per pay period gross earnings for a given list of paystubs.

### MoneyAmountVMinimumVersion

- `amount` (string, required, nullable)
- `currency` (enum, required, nullable)
  - Allowed values: `USD`

## Examples

**Response**

```json
{
  "additional_notes": "string",
  "created": "2021-12-20T18:50:20.291247Z",
  "current_as_of": "2021-12-20",
  "d1c_eligible": true,
  "disputes": [
    {
      "created": "2021-12-20T18:50:20.291247Z",
      "description": "Employee Title",
      "id": "AAAAAAAAAL8AElevkrw2n2vI8ScqGJEf50Lfg4W9LiQXwi-KSmg7DH0P",
      "reference_id": "d75346a0-a747-4907-a506-639ea436f2b0"
    }
  ],
  "du_reference_id": "string",
  "employee": {
    "earnings": [
      {
        "base": "35000.00",
        "bonus": "0.00",
        "commission": "100.25",
        "other": "0.00",
        "overtime": "200.00",
        "termination": false,
        "total": "35300.25",
        "year": "2020"
      }
    ],
    "email": "string",
    "first_name": "Jane",
    "hired_date": "2023-01-15",
    "last_name": "Doe",
    "on_leave_date": "2023-01-15",
    "positions": [
      {
        "employment_type": "regular-full-time",
        "end_date": "2023-01-15",
        "start_date": "2023-01-15",
        "title": "Software Engineer"
      }
    ],
    "salary": {
      "gross_pay": "string",
      "hours_per_week": "40",
      "months_per_year": "12",
      "pay_frequency": "biweekly",
      "reduced_covid": "yes"
    },
    "social_security_number": "***-**-0000",
    "status": "active",
    "status_detail": "active",
    "termination_date": "2023-01-15"
  },
  "employer": {
    "address": "string",
    "government_ids": [
      {
        "id": "123456789",
        "type": "us-fein"
      }
    ],
    "name": "string"
  },
  "id": "AAAAAAAADU8ACy03lGitY_ocCMCcgproUq8Gt4r37MM6GbyX2-DxWM3Y",
  "income_analytics": {
    "annualized_income": {
      "amount": {
        "amount": "34.95",
        "currency": "USD"
      },
      "base_amount": {
        "amount": "34.95",
        "currency": "USD"
      },
      "gross_amount": {
        "amount": "34.95",
        "currency": "USD"
      },
      "short_employment_warning": true,
      "stale_data_warning": true,
      "variable_income_warning": true
    },
    "income_volatility": {
      "gross_income_volatility": "string"
    }
  },
  "paid_through_date": "2023-01-15",
  "paystubs": [
    {
      "base": "7000.00",
      "bonus": "1000.00",
      "commission": "0.00",
      "gross": "8000.00",
      "id": "AAAAAAAAAmEADp7bmZJNhm4Kr5FM_ty5A_JX-Rxh04GSIHwmIRyp6Xss",
      "net": "5500.00",
      "other": "0.00",
      "overtime": "0.00",
      "pay_date": "2023-01-15",
      "pay_period_end_date": "2023-01-15",
      "pay_period_hours": "86.67",
      "pay_period_start_date": "2023-01-15",
      "reference_id": "6894632654"
    }
  ],
  "pricing_tier": "instant",
  "respondent": {
    "email": "string",
    "full_name": "string",
    "title": "string"
  },
  "verification_request": {
    "created": "2021-12-20T18:50:20.291247Z",
    "id": "AAAAAAAAEboABwQhKv1_pWO7MWtZs28ksPTH0uSt6GffsoIJPj7e69P1",
    "type": "employment"
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.truework-sandbox.com/verification-requests/verification_request_id/reports/verification_report_id"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.truework-sandbox.com/verification-requests/verification_request_id/reports/verification_report_id';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.truework-sandbox.com/verification-requests/verification_request_id/reports/verification_report_id"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.truework-sandbox.com/verification-requests/verification_request_id/reports/verification_report_id")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.truework-sandbox.com/verification-requests/verification_request_id/reports/verification_report_id")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.truework-sandbox.com/verification-requests/verification_request_id/reports/verification_report_id', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.truework-sandbox.com/verification-requests/verification_request_id/reports/verification_report_id");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.truework-sandbox.com/verification-requests/verification_request_id/reports/verification_report_id")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```