POST kyc/checks/run
Description
Runs checks on an individual against the supplied data and immediately returns a runId. The method is asynchronous: the response contains no result, which is retrieved with the POST kyc/checks/result method.
Request format
- HTTP method:
POST - URL:
kyc/checks/run - Content type:
application/json - Authorization: required (token in the
tokenfield of the body or in thetokenheader)
Request body (JSON)
| Field | Type | Required | Description |
|---|---|---|---|
| token | string | ✅ | Permanent access token. With a temporary token, pass it in the token header — then it is not needed in the body |
| person | object | ✅ | Data to check; lastName and firstName are required |
| checkers | string[] | ❌ | Which checks to run. If the field is omitted, all checks allowed for the group are run |
Data inside person is passed in sets: if a set is passed in full, the checks for that set work; if the set is absent, they return a skip.
Data sets
| Set | Fields | Note |
|---|---|---|
| RF passport | passport.series, passport.number, passport.issueDate + full name and date of birth | The main set, about 95% of requests |
| Driver’s licence | driverLicense.series, driverLicense.number, driverLicense.issueDate | Validity of the driver’s licence |
| Full name and date of birth | lastName, firstName, middleName, birthDate | The minimum set for searching the registries |
| SNILS | snils (11 digits) | Accepted and passed on to the source |
| Registration address | address.full, address.type (reg — residence, fact — stay) | Accepted and passed on to the source |
| INN | inn (12 digits) | Optional — the checks determine the INN from the passport themselves (a middle name is required) |
There is no need to strip separators in the numbers (spaces, hyphens). Dates are accepted in the YYYY-MM-DD and DD.MM.YYYY formats. A check that was short of data is included in the run and returns outcome: skipped, listing what was missing in missingInputs — this is not an error and is not billed.
Example request (cURL)
curl -X POST "https://api.neuro-vision.ru/v1/kyc/checks/run" \
-H "Content-Type: application/json" \
-d '{
"token": "<permanent-token>",
"person": {
"lastName": "Ivanov",
"firstName": "Ivan",
"middleName": "Ivanovich",
"birthDate": "1985-03-15",
"gender": "M",
"passport": { "series": "4509", "number": "123456", "issueDate": "2010-06-20", "issuerCode": "770-001" },
"driverLicense": { "series": "7799", "number": "123456", "issueDate": "15.03.2020" },
"snils": "11223344595",
"inn": "771234567890",
"address": { "full": "119991, Moscow, ul. Lenina, 1, apt. 2", "type": "reg" }
},
"checkers": ["insolvencyStatus", "debtBurden"]
}' Response
| Field | Type | Description |
|---|---|---|
| runId | string | Run identifier for kyc/checks/result |
| checksStatus | string | Always pending |
| pending | number | How many checks were started |
| checkers | string[] | Which checks were started |
The set of checks is fixed at the moment of the run: nothing is added to the run later.
Success (200 OK)
{
"runId": "523c8284-ad9e-11ef-9be1-b8ccad474166",
"checksStatus": "pending",
"pending": 2,
"checkers": ["insolvencyStatus", "debtBurden"],
"responseTime": "2026-07-28T10:00:00.000Z"
} Error — unknown checker (400)
{
"status": "error",
"message": "unknown or not allowed checkers",
"unknown": ["insolvencyStatuz"],
"notAllowed": []
} Errors
| Code | Body | When |
|---|---|---|
| 400 | invalid schema + details | The body does not match the schema |
| 400 | person.lastName and person.firstName are required | No last name or first name |
| 400 | unknown or not allowed checkers (+ unknown, notAllowed) | Among checkers there are identifiers that are unknown or not allowed for the group |
| 400 | checkers must not be empty | An empty checkers array was passed (omit the field to run all) |
| 400 | no checks are allowed for this account | The group is not allowed any check |
| 401 | access denied | No token, or the token is not valid |
An unknown identifier is not dropped silently: otherwise a typo would turn into a run without the check you need.