Questionnaire list

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 the user/login method;
  • the token field 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

ParameterTypePassed inRequiredDescription
tokenstring (UUID)body—Permanent API token, if there is no token header
pagenumberbody❌Page number, from 1. Default 1
pageSizenumberbody❌Records per page, from 1. Default 20
schemaIdstring (UUID)body❌Only records of this scenario
filtersobjectbody❌Filters, see below. All passed filters apply together

Filters (filters)

FieldTypeDescription
statusstringidle or success
searchstringCase-insensitive substring search in the record ID, full name, clientUser and clientKey
questionnaireSessionIdstring (UUID)One record by ID
rangeobjectCreation 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

FieldTypeDescription
questionnaireSessionIdstringRecord ID. Accepted by kyc/questionnaire/session/delete
schemaIdstring \null
clientKeystringClient key
clientUserstringUser ID in your system
statusstringidle — the questionnaire is open, answers not submitted; success — answers recorded. This is not a decision about the person: check results are in checks
createdAtnumberCreation 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
pdErasedbooleanWhether the record personal data were erased
pdErasedAtstring \null
fullNamestring \null
dobstring \null
emailstringOnly if the questionnaire collected an email
phonestringOnly if the questionnaire collected a phone
emailConfirmedbooleanOnly if the questionnaire required email confirmation: whether the code was entered correctly
phoneConfirmedbooleanOnly if the questionnaire required phone confirmation
fieldsarrayOther questionnaire fields: key, title, value
checksarrayDatabase checks for this record, only if there were any. A short summary, see below
linkedSessionsarrayIDs of KYC sessions compared with this record, including on mismatch

A check in checks

FieldTypeDescription
checkerstringCheck ID
statusstringWhether the check ran: idle, processing, success, failed, exception and others. This is not the result
resultobject \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": {}
}