> ## Documentation Index
> Fetch the complete documentation index at: https://docs.argyle.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Document Verifications

> Implementation guide for document-based income verifications.

<Warning>This workflow has been deprecated in favor of Argyle's new 3-in-1 verification experience for payroll, banking, and document verifications. See our [Verifications Implementation Guide](/api-reference/verifications-guide) to learn more.</Warning>

## Overview

Receive Freddie Mac monthly income calculations from uploaded paystubs and W2s.

* Upload paystubs and W-2s when borrower cannot connect via Argyle with a direct payroll login
* Generate an Argyle Doc VOI report with rep & warrant determination for income and employment

<Frame>
  <img src="https://mintcdn.com/argyle/EtHVUNI_SMseJQur/images/argyle-guides/api-ref/document-verifications/1-documents.png?fit=max&auto=format&n=EtHVUNI_SMseJQur&q=85&s=47c994109741c21d13bfa75c60a90cb5" alt="Argyle Doc VOI report PDF" width="1080" height="1397" data-path="images/argyle-guides/api-ref/document-verifications/1-documents.png" />
</Frame>

## Supported report types

* <a href="https://res.cloudinary.com/argyle-media/image/upload/v1764784423/docs-2025/doc_voi_example.pdf" target="_blank">Verification of Income (Doc VOI)</a>

## Workflow

Argyle's [Postman collection](/api-guide/postman) contains examples of the document upload and verification endpoints mentioned below.

### Subscribe to webhook

1. Subscribe to the [verifications.updated](/api-reference/verifications-webhooks/updated) webhook.

<Note>
  When subscribing, it is recommended to set `include_resource` to `true` to receive the full verification object in the webhook payload, which includes the verification's status `state`.
</Note>

### Request a verification

1. Order a verification through the [`/verifications`](/api-reference/verifications/order-a-verification) API endpoint.

In your request, at minimum you are required to provide:

* Borrower details: first name, last name, and ssn
* Employment details: employer name(s), employment status, hire date, and termination date (for previous employments)

<Note>
  One year and one month of previous employment history is required.
</Note>

2. After ordering a verification through this legacy workflow, an Argyle user will be created automatically. The `user` id will be returned in the API response.

<Note>
  For current Doc VOI implementations, use the [Verifications Implementation Guide](/api-reference/verifications-guide). The current flow supports ordering a new Doc VOI verification for an existing user when refreshing a report with additional documents.
</Note>

### Upload documents

3. Upload documents for the `user` through the [`/user-uploads`](/api-reference/user-uploads#upload) API endpoint.

<Note>
  Most recent paystub and previous year W-2s or December paystubs for each employment are typically required. <br />*— Contact your Argyle customer success manager for more information.*
</Note>

### Retrieve Doc VOI report

1. When a `verifications.updated` webhook is received and the status `state` is `COMPLETED`, a Doc VOI report can be retrieved via:

* [`file_url`](/api-reference/verifications/retrieve-a-verification) — retrieves PDF report
* [`json_url`](/api-reference/verifications/retrieve-a-verification) — retrieves report in JSON format

## Testing

### Sandbox

<Accordion title="Successful verification with GSE-eligible monthly income">
  1. Order a verification and use the following for the `employments` array:
     ```json theme={}
     "employments": [
         {
             "employer": "Warehouse Services Inc",
             "status": "active",
             "hire_date": "2023-02-01",
             "termination_date": null
         }
     ],
     ```

  2. Upload the following documents:

  <Note>
    Do not adjust file names.
  </Note>

  * <a href="https://res.cloudinary.com/argyle-media/image/upload/docs-2026/Warehouse_Services_Inc_paystub.pdf" target="_blank">Warehouse\_Services\_Inc\_paystub.pdf</a>
  * <a href="https://res.cloudinary.com/argyle-media/image/upload/docs-2026/Warehouse_Services_Inc_paystub_2025.pdf" target="_blank">Warehouse\_Services\_Inc\_paystub\_2025.pdf</a>
  * <a href="https://res.cloudinary.com/argyle-media/image/upload/docs-2026/Warehouse_Services_Inc_paystub_2024.pdf" target="_blank">Warehouse\_Services\_Inc\_paystub\_2024.pdf</a>
</Accordion>

<Accordion title="Successful verification with monthly income that is not GSE-eligible">
  1. Order a verification and use the following for the `employments` array:
     ```json theme={}
     "employments": [
         {
             "employer": "Warehouse Services Inc",
             "status": "active",
             "hire_date": "2023-02-01",
             "termination_date": null
         }
     ],
     ```

  2. Upload the following documents:

  <Note>
    Do not adjust file names.
  </Note>

  * <a href="https://res.cloudinary.com/argyle-media/image/upload/docs-2025/Warehouse_Services_Inc_paystub_ineligible.pdf" target="_blank">Warehouse\_Services\_Inc\_ineligible.pdf</a>
  * <a href="https://res.cloudinary.com/argyle-media/image/upload/docs-2026/Warehouse_Services_Inc_paystub_2025.pdf" target="_blank">Warehouse\_Services\_Inc\_paystub\_2025.pdf</a>
  * <a href="https://res.cloudinary.com/argyle-media/image/upload/docs-2025/Warehouse_Services_Inc_paystub_2024.pdf" target="_blank">Warehouse\_Services\_Inc\_paystub\_2024.pdf</a>
</Accordion>

<Accordion title="Verification that enters the PAUSED state (more data required)">
  1. Order a verification and use the following for the `employments` array:
     ```json theme={}
     "employments": [
         {
             "employer": "Warehouse Services Inc",
             "status": "active",
             "hire_date": "2023-02-01",
             "termination_date": null
         }
     ],
     ```

  2. Upload only the following documents:

  <Note>
    Do not adjust the file name.
  </Note>

  * <a href="https://res.cloudinary.com/argyle-media/image/upload/docs-2026/Warehouse_Services_Inc_paystub.pdf" target="_blank">Warehouse\_Services\_Inc\_paystub.pdf</a>
</Accordion>

### Production

<Note>
  Production testing can be done with real documents. If needed, the below test documents can also be used.
</Note>

<Accordion title="Successful verification with GSE-eligible monthly income">
  1. Order a verification and use the following for the `employments` array:
     ```json theme={}
     "employments": [
         {
             "employer": "Warehouse Services Inc",
             "status": "active",
             "hire_date": "2023-02-01",
             "termination_date": null
         }
     ],
     ```

  2. Upload the following documents:

  <Note>
    Do not adjust file names.
  </Note>

  * <a href="https://res.cloudinary.com/argyle-media/image/upload/docs-2026/sandbox_Warehouse_Services_Inc_paystub.pdf" target="_blank">sandbox\_Warehouse\_Services\_Inc\_paystub.pdf</a>
  * <a href="https://res.cloudinary.com/argyle-media/image/upload/docs-2026/sandbox_Warehouse_Services_Inc_paystub_2025.pdf" target="_blank">sandbox\_Warehouse\_Services\_Inc\_paystub\_2025.pdf</a>
  * <a href="https://res.cloudinary.com/argyle-media/image/upload/docs-2026/sandbox_Warehouse_Services_Inc_paystub_2024.pdf" target="_blank">sandbox\_Warehouse\_Services\_Inc\_paystub\_2024.pdf</a>
</Accordion>

<Accordion title="Successful verification with monthly income that is not GSE-eligible">
  1. Order a verification and use the following for the `employments` array:
     ```json theme={}
     "employments": [
         {
             "employer": "Warehouse Services Inc",
             "status": "active",
             "hire_date": "2023-02-01",
             "termination_date": null
         }
     ],
     ```

  2. Upload the following documents:

  <Note>
    Do not adjust file names.
  </Note>

  * <a href="https://res.cloudinary.com/argyle-media/image/upload/docs-2025/sandbox_Warehouse_Services_Inc_paystub_ineligible.pdf" target="_blank">sandbox\_Warehouse\_Services\_Inc\_paystub\_ineligible.pdf</a>
  * <a href="https://res.cloudinary.com/argyle-media/image/upload/docs-2026/sandbox_Warehouse_Services_Inc_paystub_2025.pdf" target="_blank">sandbox\_Warehouse\_Services\_Inc\_paystub\_2025.pdf</a>
  * <a href="https://res.cloudinary.com/argyle-media/image/upload/docs-2026/sandbox_Warehouse_Services_Inc_paystub_2024.pdf" target="_blank">sandbox\_Warehouse\_Services\_Inc\_paystub\_2024.pdf</a>
</Accordion>

<Accordion title="Verification that enters the PAUSED state (more data required)">
  1. Order a verification and use the following for the `employments` array:
     ```json theme={}
     "employments": [
         {
             "employer": "Warehouse Services Inc",
             "status": "active",
             "hire_date": "2023-02-01",
             "termination_date": null
         }
     ],
     ```

  2. Upload only the following documents:

  <Note>
    Do not adjust the file name.
  </Note>

  * <a href="https://res.cloudinary.com/argyle-media/image/upload/docs-2026/sandbox_Warehouse_Services_Inc_paystub.pdf" target="_blank">sandbox\_Warehouse\_Services\_Inc\_paystub.pdf</a>
</Accordion>

## FAQs

<Accordion title="File types & max file size accepted for uploaded documents?">
  * PDF, JPEG, PNG, HEIC file types accepted
  * 16MB max file size
</Accordion>

<Accordion title="If correct document are uploaded, will monthly calculations and GSE eligibility always be given?">
  * No, additional criteria may not be met.*— For example, calculations and rep & warrant relief is not given when there is excessive fluctuation in income over time.*
</Accordion>

<Accordion title="How long is income rep & warrant relief given?">
  * 120 days
</Accordion>

<Accordion title="How long is employment rep & warrant relief given?">
  * Variable.
  * Exact amount is 14 days from the pay date of the most recent paystub.*— For example, if today is July 31, 2025 and the most recent paystub uploaded had a pay date of July 21, 2025, only 4 days of employment rep & warrant relief would be given.*
</Accordion>
