{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/argyle9a25/json-schema/argyle9a25-client-verification-schema.json",
  "title": "ClientVerification",
  "x-generated": "2026-11-10",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/argyle9a25-verifications-api-openapi.yml#/components/schemas/ClientVerification",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "description": "Unique ID of the verification."
    },
    "user": {
      "type": "string",
      "format": "uuid",
      "description": "ID of the user associated with the verification."
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "description": "Timestamp ([ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)) when the verification was requested."
    },
    "updated_at": {
      "type": "string",
      "format": "date-time",
      "description": "Timestamp ([ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)) when the verification object was last updated."
    },
    "channel": {
      "type": "string",
      "enum": [
        "api",
        "encompass"
      ],
      "description": "Origin of the verification order."
    },
    "status": {
      "$ref": "#/$defs/ClientVerificationStatus"
    },
    "report": {
      "$ref": "#/$defs/ClientVerificationReport"
    },
    "employments": {
      "type": "array",
      "description": "List of employments for the user. Documents only.",
      "items": {
        "$ref": "#/$defs/ClientVerificationEmployment"
      }
    },
    "loan": {
      "$ref": "#/$defs/ClientVerificationLoan"
    },
    "billing": {
      "$ref": "#/$defs/ClientVerificationBilling"
    },
    "configuration": {
      "$ref": "#/$defs/ClientVerificationConfiguration"
    },
    "data_source": {
      "type": "string",
      "enum": [
        "payroll",
        "banking",
        "documents"
      ],
      "description": "Source of verification data."
    }
  },
  "$defs": {
    "ClientReportCustomField": {
      "type": "object",
      "description": "Custom field returned in report JSON as a pass-through value.",
      "properties": {
        "label": {
          "type": "string",
          "description": "Custom field name."
        },
        "value": {
          "type": "string",
          "description": "Custom field value."
        },
        "shown": {
          "type": "boolean",
          "description": "Show custom field on report PDF."
        }
      }
    },
    "ClientVerificationBilling": {
      "type": "object",
      "description": "Optional billing details for regular payroll and mortgage verification workflows.",
      "properties": {
        "cost_center": {
          "type": "string",
          "description": "Cost center identifier."
        }
      }
    },
    "ClientVerificationConfiguration": {
      "type": "object",
      "properties": {
        "notified_recipients": {
          "type": [
            "array",
            "null"
          ],
          "description": "Email addresses that receive client notifications about the verification's progress.",
          "items": {
            "type": "string",
            "format": "email"
          }
        }
      }
    },
    "ClientVerificationEmployment": {
      "type": "object",
      "description": "Employment details for the user.",
      "properties": {
        "employer": {
          "type": "string",
          "description": "Name of the employer."
        },
        "status": {
          "type": "string",
          "enum": [
            "active",
            "previous"
          ],
          "description": "User's current employment status at this employer."
        },
        "hire_date": {
          "type": "string",
          "format": "date",
          "description": "Employment start date in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format."
        },
        "termination_date": {
          "type": [
            "string",
            "null"
          ],
          "format": "date",
          "description": "Employment end date in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format. `null` when employment `status` is `active`."
        }
      }
    },
    "ClientVerificationError": {
      "type": "object",
      "description": "Verification error details.",
      "properties": {
        "code": {
          "type": "string",
          "description": "Error code."
        },
        "title": {
          "type": "string",
          "description": "Error title."
        },
        "message": {
          "type": "string",
          "description": "Error message."
        },
        "resources": {
          "type": "array",
          "description": "Additional troubleshooting resources (for example, the ID of an unmatched document).",
          "items": {
            "$ref": "#/$defs/ClientVerificationErrorResource"
          }
        }
      }
    },
    "ClientVerificationErrorResource": {
      "type": "object",
      "description": "Verification error resource details.",
      "properties": {
        "id": {
          "type": [
            "string",
            "null"
          ],
          "description": "ID of the associated resource, if available."
        },
        "type": {
          "type": "string",
          "description": "Resource type."
        },
        "name": {
          "type": "string",
          "description": "Resource name."
        }
      }
    },
    "ClientVerificationLoan": {
      "type": "object",
      "description": "Optional loan details for regular payroll and mortgage verification workflows.",
      "properties": {
        "number": {
          "type": "string",
          "description": "Loan number or identifier."
        },
        "borrower_id": {
          "type": "string",
          "description": "Borrower identifier."
        },
        "application_id": {
          "type": "string",
          "description": "Application identifier."
        },
        "officer_email": {
          "type": "string",
          "description": "Email of the loan officer requesting the verification."
        },
        "division": {
          "type": "string",
          "enum": [
            "wholesale",
            "retail"
          ],
          "description": "Loan division. Set when the verification is ordered and inherited by reverifications."
        }
      }
    },
    "ClientVerificationReport": {
      "type": "object",
      "description": "Report information.",
      "properties": {
        "id": {
          "type": [
            "string",
            "null"
          ],
          "format": "uuid",
          "description": "Unique ID of the report.\n\nOnly available when verification state is `COMPLETED`.\n"
        },
        "type": {
          "type": "string",
          "enum": [
            "voie",
            "voe",
            "voie-government",
            "voa",
            "voi",
            "voai",
            "voe-transactions",
            "doc-voi-mortgage"
          ],
          "description": "The type of report.\n\nPayroll:\n- `voie` - Verification of Income and Employment.\n- `voe` - Verification of Employment.\n- `voie-government` - Government income verification.\n\nBanking:\n- `voa` - Banking verification of assets.\n- `voi` - Banking verification of income.\n- `voai` - Banking verification of income and assets.\n- `voe-transactions` - Banking verification of employment.\n\nDocuments:\n- `doc-voi-mortgage` - Mortgage document-based verification of income, integrated with Freddie Mac's AIM Check."
        },
        "self_certification": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "For `voie-government` reports, indicates whether the applicant self-certification flow is enabled in Link.\n\nDefaults to `true` for `voie-government` reports and `null` for other report types.\n"
        },
        "file_url": {
          "type": [
            "string",
            "null"
          ],
          "description": "Download link to the report PDF.\n\nRequires [Argyle authentication headers](/api-guide/overview#authentication). Only available when verification state is `COMPLETED`.\n"
        },
        "json_url": {
          "type": [
            "string",
            "null"
          ],
          "description": "Download link to the report in JSON.\n\nRequires [Argyle authentication headers](/api-guide/overview#authentication). Only available when verification state is `COMPLETED`.\n"
        },
        "configuration": {
          "$ref": "#/$defs/ClientVerificationReportConfiguration"
        }
      }
    },
    "ClientVerificationReportConfiguration": {
      "type": "object",
      "description": "Optional banking report configurations.",
      "properties": {
        "bank_accounts": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "List of [bank account](/api-reference/bank-accounts) IDs to be included in the report."
        },
        "from_date": {
          "type": "string",
          "format": "date-time",
          "description": "Restrict report to data from on or after this datetime ([ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)).\n\n- `VOAI` reports - controls the length of asset history\n- `VOA` reports - controls the length of asset history\n- `VOI` reports - controls the length of income history\n"
        },
        "income_from_date": {
          "type": "string",
          "format": "date-time",
          "description": "Restrict report to data from on or after this datetime ([ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)).\n\n- `VOAI` reports - controls the length of income history\n- Does not apply to `VOA` or `VOI` reports.\n"
        },
        "income_stream_confidence_minimum": {
          "type": "integer",
          "minimum": 0,
          "maximum": 100,
          "description": "Limit income streams used in the report to those above this confidence value (`0-100` accepted).\n\nOnly available for `VOI` and `VOAI` report types.\n"
        },
        "report_custom_fields": {
          "type": "array",
          "maxItems": 5,
          "description": "Include up to `5` custom objects in the report metadata. Often used for identifying information.",
          "items": {
            "$ref": "#/$defs/ClientReportCustomField"
          }
        }
      }
    },
    "ClientVerificationStatus": {
      "type": "object",
      "description": "Verification status information.",
      "properties": {
        "state": {
          "type": "string",
          "enum": [
            "PENDING",
            "PROCESSING",
            "PAUSED",
            "CANCELLED",
            "COMPLETED"
          ],
          "description": "Verification state.\n\n- `PENDING` - Initial status after verification is created.\n- `PROCESSING` - Verification processing is underway.\n- `PAUSED` - Verification is paused because more data or documents are required.\n- `CANCELLED` - Verification has been cancelled.\n- `COMPLETED` - Verification is complete and report assets are available.\n"
        },
        "code": {
          "type": "string",
          "enum": [
            "pending",
            "invite_sent",
            "user_session_started",
            "authenticated",
            "documents_processing",
            "report_available",
            "waiting_on_third_party",
            "report_generating",
            "awaiting_certification",
            "connection_attempted",
            "more_data_required",
            "syncing_error",
            "cancelled_by_client",
            "system_error",
            "argyle_timeout",
            "completed",
            "completed_with_errors"
          ],
          "description": "Verification status code.\n\n<details class=\"enum-definitions verification-status-codes\">\n<summary><span>For payroll, government, and banking report types:</span></summary>\n\n| `status.state` | `status.code` | Description |\n| --- | --- | --- |\n| `PENDING` | `pending` | Verification created. |\n| `PENDING` | `invite_sent` | Invite sent; waiting for user action. |\n| `PENDING` | `user_session_started` | User opened the payroll or banking connection experience. |\n| `PROCESSING` | `authenticated` | User authenticated for payroll or banking; data aggregation is in progress. |\n| `PROCESSING` | `report_available` | Data and documents are sufficient to complete verification. |\n| `PROCESSING` | `waiting_on_third_party` | Awaiting processing by a third party. |\n| `PROCESSING` | `report_generating` | Report is currently generating. |\n| `PROCESSING` | `awaiting_certification` | awaiting user certification for aggregated government data |\n| `PAUSED` | `connection_attempted` | Account connection was attempted and user action is required to resolve a recoverable error. See [account connection errors](/api-reference/account-connection-errors). |\n| `PAUSED` | `syncing_error` | A syncing error requires user action (such as MFA) before processing can continue. |\n| `CANCELLED` | `cancelled_by_client` | Verification has been cancelled. |\n| `CANCELLED` | `system_error` | Argyle cannot complete the verification because of an unrecoverable system error. |\n| `CANCELLED` | `argyle_timeout` | Verification request has been cancelled by Argyle after 180 days of inactivity. |\n| `COMPLETED` | `completed` | Report is ready for download. |\n| `COMPLETED` | `completed_with_errors` | Verification request completed. Report can be retrieved but may contain deficiencies. |\n\n</details>\n\n<details class=\"enum-definitions verification-status-codes\">\n<summary><span>For <strong>doc-voi-mortgage</strong> report types:</span></summary>\n\n| `status.state` | `status.code` | Description |\n| --- | --- | --- |\n| `PENDING` | `pending` | Verification created. |\n| `PROCESSING` | `documents_processing` | Documents processing. |\n| `PROCESSING` | `report_available` | Data and documents are sufficient to complete verification. |\n| `PROCESSING` | `waiting_on_third_party` | Awaiting processing by a third party. |\n| `PAUSED` | `more_data_required` | More data or documents are needed to complete the verification. |\n| `CANCELLED` | `cancelled_by_client` | Verification has been cancelled. |\n| `CANCELLED` | `argyle_timeout` | Verification request has been cancelled by Argyle after 180 days of inactivity. |\n| `COMPLETED` | `completed` | Verification request complete. Report can be retrieved. |\n| `COMPLETED` | `completed_with_errors` | Verification request completed. Report can be retrieved but is not GSE eligible. |\n\n</details>"
        },
        "errors": {
          "type": "array",
          "description": "Error information.\n\nError details can explain what caused a `PAUSED` state or prevented GSE eligibility for a `COMPLETED` document verification.\n",
          "items": {
            "$ref": "#/$defs/ClientVerificationError"
          }
        }
      }
    }
  }
}