POST /kyc/questionnaire/sessions
Description
The method returns the list of stage-1 questionnaire records (see Two-stage verification: questionnaire → KYC): what a person entered in the questionnaire before uploading documents. Records go from newest to oldest, page by page.
A questionnaire record is not a KYC session: it is stored separately and does not expire. It shows which KYC sessions it was compared with.
The user who owns the token must have the permission to view KYC logs.
Request format
- HTTP method:
POST - URL:
/kyc/questionnaire/sessions - Content type:
application/json
Authorization
Pass the token in one of two ways:
- the
token: <jwt-token>header — a temporary JWT token obtained with theuser/loginmethod; - the
tokenfield in the request body — a permanent API token (UUID) from the personal account.
Without a token the request returns 401 access denied. See Authentication for details.
Request parameters
| Parameter | Type | Passed in | Required | Description |
|---|---|---|---|---|
| token | string (UUID) | body | — | Permanent API token, if there is no token header |
| page | number | body | ❌ | Page number, from 1. Default 1 |
| pageSize | number | body | ❌ | Records per page, from 1. Default 20 |
| schemaId | string (UUID) | body | ❌ | Only records of this scenario |
| filters | object | body | ❌ | Filters, see below. All passed filters apply together |
Filters (filters)
| Field | Type | Description |
|---|---|---|
| status | string | idle or success |
| search | string | Case-insensitive substring search in the record ID, full name, clientUser and clientKey |
| questionnaireSessionId | string (UUID) | One record by ID |
| range | object | Creation period: start and end — Unix time in seconds, bounds included. sortOrder — order by creation date: DESC (default) or ASC |
Request example (cURL)
curl -X POST "https://api.neuro-vision.ru/v1/kyc/questionnaire/sessions" -H "token: <jwt-token>" -H "Content-Type: application/json" -d '{"page": 1, "pageSize": 20, "schemaId": "<scenarioId>", "filters": {"status": "success", "range": {"start": 1767225600, "end": 1769903999, "sortOrder": "DESC"}}}' Record fields
| Field | Type | Description |
|---|---|---|
| questionnaireSessionId | string | Record ID. Accepted by kyc/questionnaire/session/delete |
| schemaId | string \ | null |
| clientKey | string | Client key |
| clientUser | string | User ID in your system |
| status | string | idle — the questionnaire is open, answers not submitted; success — answers recorded. This is not a decision about the person: check results are in checks |
| createdAt | number | Creation time, Unix time in seconds. Multiply by 1000 for a JavaScript date. In the QUESTIONNAIRE_COMPLETE webhook and in kyc/session/status the same field comes in ISO 8601 format |
| pdErased | boolean | Whether the record personal data were erased |
| pdErasedAt | string \ | null |
| fullName | string \ | null |
| dob | string \ | null |
| string | Only if the questionnaire collected an email | |
| phone | string | Only if the questionnaire collected a phone |
| emailConfirmed | boolean | Only if the questionnaire required email confirmation: whether the code was entered correctly |
| phoneConfirmed | boolean | Only if the questionnaire required phone confirmation |
| fields | array | Other questionnaire fields: key, title, value |
| checks | array | Database checks for this record, only if there were any. A short summary, see below |
| linkedSessions | array | IDs of KYC sessions compared with this record, including on mismatch |
A check in checks
| Field | Type | Description |
|---|---|---|
| checker | string | Check ID |
| status | string | Whether the check ran: idle, processing, success, failed, exception and others. This is not the result |
| result | object \ | null |
passed: null means the check was skipped, not that the result is clean. The full check results are in kyc/session/databases: pass the questionnaireSessionId value as sessionId.
Response examples
Success (200 OK)
{
"status": "ok",
"results": [
{
"questionnaireSessionId": "00000000-0000-0000-0000-000000000000",
"schemaId": "<scenarioId>",
"clientKey": "client-0001",
"clientUser": "user-0001",
"status": "success",
"createdAt": 1770000000,
"pdErased": false,
"pdErasedAt": null,
"fullName": "John Doe",
"dob": "1990-01-01",
"email": "user@example.com",
"emailConfirmed": true,
"fields": [
{ "key": "inn", "title": "TIN", "value": "000000000000" }
],
"checks": [
{
"checker": "insolvencyStatus",
"status": "success",
"result": {
"checker": "insolvencyStatus",
"passed": true,
"score": null,
"verified": null,
"totalCount": 0,
"error": null
}
}
],
"linkedSessions": []
}
]
} Error (400 Bad Request)
No permission to view KYC logs:
{
"status": "error",
"message": "No access"
} The request body does not match the schema:
{
"status": "error",
"message": "invalid schema",
"details": {}
}