Get Reusable KYC reports

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…

Overview

Use this read-only endpoint to retrieve structured Reusable KYC reports for a specific applicant.

The method does not recalculate or save anything; it simply fetches pre-existing REUSABLE_KYC_REPORT checks from the applicant's inspection and presents them in a clean, detailed, inline format. This lets you see exactly which check results and values (such as country, age, or document type) were inherited during the reuse process.

Required permissions

To use the method, the API token/session must have the View check results permission.

Request example

curl -X GET \
     'https://api.sumsub.com/api/reusableIdentity/69ce35c7b776d140bb500000/reports?levelName=basic-kyc-level' \
     -H 'Authorization: Bearer token' \
     -H 'Content-Type: application/json' \
     -H 'X-App-Token: <your-app-token>' \
     -H 'X-App-Access-Sig: <your-signature>' \
     -H 'X-App-Access-Ts: <unix-timestamp>'

Response explained

The response is a JSON object representing a list of structured Reusable KYC reports for the applicant.

reports[] element fields

FieldTypeDescription
fromClientIdStringIdentifier of the client account that originally verified the applicant and shared this report.
levelNameStringName of the verification level used to generate the report.
createdAtStringDate and time the report was created, in yyyy-MM-dd HH:mm:ss format.
reuseParamsObjectParameters defining how verification data was reused.
dataGroupsArray of objectsList of data groups included in the report.

reuseParams attributes

FieldTypeDescription
preservedVerificationStatusBooleanWhether the original verification status was preserved during reuse.
requireFreshSelfieBooleanWhether a new selfie was required from the applicant during reuse.

dataGroups[] element fields

FieldTypeDescription
typeStringType of the data group. One of applicantData, poi, liveness, faceMatch, duplicateCheck, crossCheck.
answerStringOverall result of the data group. One of GREEN, RED, or IGNORED.
checksArray of objectsIndividual checks performed within the data group, if any.

checks[] element fields

FieldTypeDescription
typeStringType of the check, e.g. allowedCountry, allowedDocType, unexpired, acceptableAge, acceptablePageCnt, noDuplicates, matchedRules.
answerStringResult of the check. One of GREEN or RED.
countryStringCountry code the document was issued in. Present only for the allowedCountry check.
docTypeStringType of the submitted document. Present only for the allowedDocType check.
validUntilStringDocument's expiration date. Present only for the unexpired check.
ageNumberApplicant's age at the time of the check. Present only for the acceptableAge check.

Response examples

If the request is successfully sent and processed, you will get a response like the one below.

{
  "reports": [
    {
      "fromClientId": "client_name",
      "levelName": "basic-kyc-level",
      "createdAt": "2026-07-03 12:26:11",
      "reuseParams": {
        "preservedVerificationStatus": false,
        "requireFreshSelfie": true
      },
      "dataGroups": [
        {
          "type": "applicantData",
          "answer": "IGNORED"
        },
        {
          "type": "poi",
          "answer": "GREEN",
          "checks": [
            {
              "type": "allowedCountry",
              "answer": "GREEN",
              "country": "ESP"
            },
            {
              "type": "allowedDocType",
              "answer": "GREEN",
              "docType": "RESIDENCE_PERMIT"
            },
            {
              "type": "unexpired",
              "answer": "GREEN",
              "validUntil": "2027-02-11"
            },
            {
              "type": "acceptableAge",
              "answer": "GREEN",
              "age": 30
            },
            {
              "type": "acceptablePageCnt",
              "answer": "GREEN"
            }
          ]
        },
        {
          "type": "liveness",
          "answer": "GREEN"
        },
        {
          "type": "faceMatch",
          "answer": "GREEN"
        },
        {
          "type": "duplicateCheck",
          "answer": "GREEN",
          "checks": [
            {
              "type": "noDuplicates",
              "answer": "GREEN"
            }
          ]
        },
        {
          "type": "crossCheck",
          "answer": "GREEN",
          "checks": [
            {
              "type": "matchedRules",
              "answer": "GREEN"
            }
          ]
        }
      ]
    }
  ]
}

If the request fails, you will receive an HTTP response containing an error code along with a message explaining the error. For example:

{
    "code": 404,
    "description": "Applicant not found"
}

Path Params
string
required

Unique applicant identifier in the Sumsub system.

This identifier is a random combination of 24 digits and lowercase Latin characters. It is automatically generated when the applicant is created on the Sumsub side, and can be found in the Dashboard.

If the applicantId is unknown to you, use the Get applicant data (externalUserId) method to fetch it.

Query Params
string

Name of the verification level to filter the reports. If omitted or blank, no filtering is applied.

⚠️ Mind the following:

  • The level has to be created in the same environment. For example, in the Sandbox mode, you may not be able to use a level configured to be only available in the Production environment.
  • A level name is case-sensitive. Kyc-level and kyc-level are considered as completely different level names. The system does not allow creating an applicant with the level name that does not exist.
  • If a level name contains reserved characters (for example, @, +, white spaces as %20), it should be URL-encoded; otherwise you may get a signature mismatch.

Response
200
Language
Credentials
Header
LoadingLoading…
Response
Click Try It! to start a request and see the response here!