Reports

Integration Guides API v2

Reports contain the final results and supporting data for a workflow. Retrieve a report after Fourthline finishes processing the workflow.

Reports are available in the following formats:

  • JSON for programmatic processing
  • ZIP archives for audit and compliance workflows
  • PDF for human-readable review
  • XML for structured exports

Report availability

The reports you can retrieve depend on the workflow and product status.

In most cases, all report formats are available after the workflow is completed. There are some exceptions:

  • JSON reports are available at any stage of the workflow.
  • XML reports are also available when the workflow status isfailed.
  • PDF and ZIP reports are not available when the Identity Verification product status is inconsistent_data.
Product statusWorkflow statusJSONZIPPDFXML
completedcompleted✅✅✅✅
rejectedcompleted✅✅✅✅
inconsistent_datacompleted✅❌❌✅
invalid_datafailed✅❌❌✅
new / pendingnew / pending✅❌❌❌

Note

Reports are generated asynchronously, so they might not be available immediately after the workflow reaches the required status. If a report request returns 404 Not Found or 409 Conflict, wait and trying again, increasing the wait time between attempts until the report is available.


ZIP archive contents

The ZIP archive includes one or more of the following, depending on the workflow configuration:

  • PDF report
  • XML export
  • Uploaded identity media
  • Extracted workflow data

XML export

An XML export can include:

  • Extracted identity data, including:
    • Document type
    • Issuing country
    • Expiration date
  • Corrected identity data
  • References to uploaded files

File paths in the XML reference uploaded media included in the archive, such as document images, selfies, and videos.

Example ZIP archive structure

Example ZIP archive structure

Example ZIP archive structure


PDF report contents

PDF reports can include the following sections depending on the workflow configuration and enabled products.

SectionContents
Cover pageWorkflow outcome, identifiers, timestamps, configured products, and recommended actions
DisclaimerTerms and conditions for the generated report
Checks overviewHigh-level summary of the areas that were checked
Personal dataExtracted and corrected identity data
Tax informationCountry of taxation and TIN information
Identity filesUploaded identity files and extracted document data
Risk categoryFinal workflow risk assessment
Agent detailsProcessing and review agent information
AML screeningScreening databases, hit types, and review outcomes
Identity mediaSelfies, document images, videos, and security feature assessments
Document addressAddress extracted from the identity document
Document typeDocument type extracted from the identity document, for example Passport or National ID Card
Document issuing countryIssuing country extracted from the identity document. Format: ISO 3166-1 alpha-3
Document expiration dateExpiration date extracted from the identity document. Format: YYYY-MM-DD

JSON report examples

Responses from Get report as JSON.

identityData.tax is on the Identity Verification product. It is populated when tax collection is enabled for the workflow and a value was supplied or corrected during review. App Drop-in and Web SDK capture it when the Tax Number module is enabled. For API-only and App Components, send identityData.tax on Upload client data.

When tax was not collected, the report usually still includes an empty object:

"tax": {}

When tax data is present, the object contains:

FieldMeaning
countrySubjectToTaxationISO 3166-1 alpha-3, uppercase, for example ESP
tinClient tax identification number
usPersonWhether the client is a U.S. person. Often the string yes or no
usTinU.S. tax identification number, 123-45-6789 when present
"tax": {
  "countrySubjectToTaxation": "ESP",
  "tin": "999999999",
  "usPerson": "no",
  "usTin": "123-45-6789"
}

Upload client data accepts usPerson as true or false. Report payloads often use the string yes or no. Consumers of Get report as JSON should use the value in the response.

Review can fill or correct tin. When the client provides a TIN document outside the configured regulatory scope, the report does not include the TIN. tin can also be N/A when a value exists and Fourthline cannot verify it, [NOT PROVIDED] when nothing was inputted or extracted, or an empty string when the value is not available.

{
  "tenant": "{{tenant}}",
  "workflowId": "{{workflowId}}",
  "workflow": "IdvAndQesWorkflow",
  "workflowStatus": "completed",
  "clientId": "{{clientId}}",
  "products": [
    {
      "name": "IdentityVerification",
      "lastModified": "2026-04-17T13:00:04.6382611+02:00",
      "identityData": {
        "personalData": {
          "firstName": "{{firstName}}",
          "lastName": "{{lastName}}",
          "gender": 2,
          "placeOfBirth": "{{placeOfBirth}}",
          "countryOfBirth": "ESP",
          "birthDate": "1965-03-10T00:00:00Z",
          "nationality": "NLD"
        },
        "address": {
          "streetName": "{{streetName}}",
          "streetNumber": "{{streetNumber}}",
          "city": "{{city}}",
          "country": "ESP",
          "postalCode": "{{postalCode}}"
        },
        "contactDetails": {
          "email": "{{email}}",
          "phone": "{{phoneNumber}}",
          "mobile": "{{mobileNumber}}"
        },
        "tax": {},
        "deviceMetaData": {
          "language": "ES",
          "model": "iPhone 12 Pro Max",
          "sdkVersion": "4.1.0"
        }
      },
      "identityDocumentData": {
        "documentNumber": "{{documentNumber}}",
        "documentType": 0,
        "issuingCountry": "NLD",
        "expirationDate": "2031-08-30",
        "issueDate": "2021-08-30"
      }
    },
    {
      "name": "Signatures",
      "productStatus": "signed",
      "lastModified": "2026-04-17T11:00:17.950744Z"
    }
  ],
  "receivedData": {
    "files": [
      {
        "type": "SelfieImage",
        "fileName": "{{selfieFileName}}"
      },
      {
        "type": "DocumentImage",
        "side": "Front",
        "documentId": "{{documentId}}"
      },
      {
        "type": "DocumentToSign",
        "fileName": "{{documentToSignFileName}}"
      }
    ]
  },
  "sla": {
    "withinSla": true
  },
  "risk": {
    "conclusion": "Low",
    "statusCode": 200,
    "description": "Low"
  }
}