Migrate from Veriff to Sumsub

You can move applicant data from Veriff to Sumsub by exporting verification records, transforming them into Sumsub archive format, and importing one archive per applicant.

The current migration flow covers basic-kyc-level verification level with the Identity document and Selfie steps.

📘

Note

If the verification setup includes additional checks or a custom structure, contact your CSM or Sumsub support before starting the migration.

How migration to Sumsub works

The migration includes three stages:

  1. Export data from Veriff. Extract verification session data, including applicant details, documents, media files, and review results.
  2. Transform the data. Map Veriff fields to Sumsub fields and reorganize the exported files into the required archive structure.
  3. Import the archive into Sumsub. Upload one archive per applicant through the Sumsub import API method.

The Sumsub import API allows 10 requests per 10 seconds. When migrating large volumes, batch your requests accordingly.

Each verification session from Veriff should be transformed into a separate Sumsub archive for the corresponding applicant. Each archive must contain:

  • applicant.json .
  • doc/ folder.
  • doc_back_side/ folder, when applicable.
  • selfie/ folder.

Each media folder contains:

  • applicantIdDoc.json.
  • Corresponding image file.

A typical Sumsub archive structure looks like this:

Transform applicant data

Veriff exported verification session usually includes the following data sections:

  • person — Name, DoB, gender, nationality, address.
  • document — Document number, type, country, validity dates.
  • media — Face images, document front/back, selfie video.
  • insights — Fraud, biometric, and document check results.

    Note that insights data is specific to Veriff and is not imported into Sumsub.

A Veriff export may also contain:

  • Processed document images.
  • Processed face image.
  • Raw capture variants.
  • Selfie video.
  • Session response payload.
❗️

Important

The field mappings in this article are based on the current source provider API. Because provider API can change over time, verify your export data against the latest API reference before starting the migration.

Confirm that the field names, values, and response structure match, and validate the mapping on a small sample before processing the full dataset.

Person to applicant mapping

To learn what data you need to populate applicant-level fields in Sumsub applicant.json, refer to the table below.

Veriff fieldSumsub fieldNotes
vendorDataexternalUserIdUse your internal user ID.
person.firstName.valueinfo.firstNameDirect mapping.
person.lastName.valueinfo.lastNameDirect mapping.
person.dateOfBirth.valueinfo.dobKeep ISO format.
person.gender.valueinfo.genderDirect mapping.
person.nationality.valueinfo.nationalityConvert to alpha-3.
document.country.valueinfo.countryConvert to alpha-3.
person.address.components.postcodeaddresses[0].postCodeDirect mapping.
person.address.components.cityaddresses[0].townDirect mapping.
person.address.components.roadaddresses[0].streetDirect mapping.
person.address.components.houseNumberaddresses[0].subStreetDirect mapping.
❗️

Important

Veriff uses ISO 3166-1 alpha-2 country codes such as US, BR, and GB.

Sumsub requires ISO 3166-1 alpha-3 country codes such as USA, BRA, and GBR.

Convert all country values before importing the archive.

Document to IdDoc mapping

Create document metadata files for the target media folders to add verification documents.

Do not pass Veriff document values directly into Sumsub. Convert them to the required Sumsub enums during transformation.

Veriff fieldSumsub fieldNotes
document.type.valueidDocTypeMap to Sumsub enum:
  • id_card -> ID_CARD
  • passport/ -> PASSPORT
  • driver_license -> DRIVER_LICENSE
idDocSubTypeSet per folder:
  • doc/ -> FRONT_SIDE
  • doc_back_side/ -> BACK_SIDE
document.country.valuecountryConvert to alpha-3.
document.number.valuenumberOnly in doc/ folder.
person.firstName.valuefirstNameOnly in doc/ folder.
person.lastName.valuelastNameOnly in doc/ folder.
person.dateOfBirth.valuedobOnly in doc/ folder.
document.validFrom.valueissuedDateOnly in doc/ folder.
document.validUntil.valuevalidUntilOnly in doc/ folder.

The doc/ folder should contain the full document metadata.

The doc_back_side/ folder requires the following metadata:

  • idDocType
  • idDocSubType: “BACK_SIDE”
  • country

The selfie/ folder requires the following metadata:

  • idDocType: “SELFIE”
  • country

Media mapping

Use processed images from Veriff and place them into the corresponding Sumsub folders. For this migration flow, import processed images only.

Veriff media nameTarget folderUse
document-frontdoc/Yes
document-backdoc_back_side/Yes
faceselfie/Yes
face-preNo
document-front-preNo
document-back-preNo
selfid_videoNo
📘

Note

Save images as image.jpg.

Review status mapping

Use the Veriff review decision to populate the review block in applicant.json.

Veriff decisionSumsub reviewAnswerSumsub reviewStatus
approvedGREENcompleted
declinedREDcompleted
resubmission_requestedREDcompleted
expiredREDcompleted
abandonedREDcompleted

Sample review block in applicant.json:

"review": {
    "createDate": "2025-01-15 10:30:00+0000",
    "reviewDate": "2025-01-15 10:32:45+0000",
    "levelName": "basic-kyc-level",
    "reviewStatus": "completed",
    "reviewResult": {
      "reviewAnswer": "GREEN",
      "moderationComment": "Imported from Veriff. Original decision: approved",
      "clientComment": "Veriff session: <session_id>"
    }
}
🚧

Attention

  • Use GREEN only for approved cases. Map all other listed outcomes to RED.
  • Confirm the exact levelName from your Sumsub dashboard.

Data transformation example

See the following examples to understand how the transformed data looks:

{
 "vendorData": "usr_xxx...",
 "data": {
  "verification": {
   "decision": "approved",
   "person": {
    "firstName": {"value":"JANE"},
    "lastName": {"value":"DOE"},
    "dateOfBirth": {"value":"1990-01-01"},
    "gender": {"value":"F"},
    "nationality": {"value":"US"}
   },
   "document": {
    "number": {"value":"D123456789"},
    "type": {"value":"id_card"},
    "country": {"value":"US"},
    "validFrom": {"value":"2020-01-01"},
    "validUntil": {"value":"2030-01-01"}
   }
  }
 }
}
{
 "externalUserId": "usr_xxx...",
 "info": {
  "firstName": "JANE",
  "lastName": "DOE",
  "country": "USA",
  "dob": "1990-01-01",
  "gender": "F",
  "nationality": "USA",
  "addresses": [{
   "country": "USA",
   "postCode": "12345",
   "town": "ANYTOWN",
   "street": "MAIN ST",
   "subStreet": "123"
  }]
 },
 "review": {
  "reviewStatus": "completed",
  "reviewResult": {
   "reviewAnswer": "GREEN",
   "moderationComment":
    "Imported from Veriff..."
  }
 }
}