> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Импорт верификаций: миграция из другого провайдера

> Выберите путь импорта в Didit для исторических сессий верификации, пользователей, лиц, блоклистов, компаний, транзакций и правил статусов сценария.

Используйте это руководство, чтобы выбрать подходящий способ импорта, когда вы переносите данные из другого провайдера в Didit. Под словом «импорт» клиенты обычно имеют в виду две разные задачи:- **Импорт исторических проверок:** воссоздайте завершённые записи KYC, KYB, мониторинга транзакций или правил сценариев, чтобы в Didit отображалась прежняя история провайдера. Используйте `POST /v3/session/imports/`.
- **Импорт операционных данных:** создайте User, Business, лица из профилей, записи в списке блокировки или в списке разрешённых, чтобы Didit мог использовать их в будущих проверках. Используйте API сущностей, лиц и списков.Импорты верификации создают исторические записи с `session_type: "MIGRATED"` для KYC и KYB. Они не отправляют письма конечным пользователям, не перенаправляют пользователей в размещённый процесс верификации и не запускают исходную верификацию повторно. Импортированные записи появляются в списках сессий, профилях сущностей, представлениях транзакций и в `GET /v3/session/{session_id}/decision/`, где это применимо.## Какой импорт выбрать?| Цель | Способ импорта | Что создаётся | Лучше всего подходит для |
| - | - | - | - |
| Воссоздать исторические KYC-сессии | `POST /v3/session/imports/` с `import_type=user_verification` | `Session`, данные верификации личности, необязательные изображения документа и селфи, видео документа и проверки живости, теги, метаданные | Перенос завершённых заявителей из Sumsub, MetaMap, Veriff, Onfido, Persona, Jumio, Incode, iDenfy, Trulioo или другого KYC-провайдера |
| Воссоздать исторические KYB-сессии | `POST /v3/session/imports/` с `import_type=business_verification` | `BusinessSession`, данные реестра компаний, должностные лица, бенефициарные владельцы, теги, метаданные | Перенос завершённых проверок бизнеса от KYB-провайдеров, провайдеров реестров компаний или внутренних инструментов KYB |
| Воссоздать исторические записи мониторинга транзакций | `POST /v3/session/imports/` с `import_type=transactions` | `Transaction`, стороны — субъекты и контрагенты, результаты провайдера, данные Travel Rule, снимок сети, метаданные | Перенос истории движка правил, KYT, скрининга кошельков или мониторинга фиатных транзакций |
| Импортировать пользовательские правила статусов сценария | `POST /v3/session/imports/` с `import_type=status_rules` | `VerificationSettings.feature_status_rules` | Перенос логики политик от другого провайдера или из таблицы в движок сценариев Didit |
| Создать User без исторических сессий | `POST /v3/users/create/` или импорт CSV в Console | Строки профилей `VendorUser` | Загрузка списка ваших пользователей перед запуском новых проверок Didit |
| Прикрепить доверенные лица из профилей к пользователям | `POST /v3/organization/{organization_id}/application/{application_id}/vendor-users/by-id/{didit_internal_id}/faces/upload/` | Данные о лице из профиля, проиндексированные для поиска дубликатов и поиска по лицу | Перенос изображений лиц из профилей другого KYC-провайдера без воссоздания полных сессий |
| Добавить лица в список блокировки или в список разрешённых | `POST /v3/lists/{list_uuid}/entries/face-upload/` или `POST /v3/lists/{list_uuid}/entries/` с `reference_session_id` | Запись в списке лиц и биометрический эмбеддинг | Перенос известных мошеннических лиц, доверенных лиц из списка разрешённых или внесение лица из существующей сессии Didit в список блокировки |
| Создать Business без исторических KYB-сессий | `POST /v3/businesses/create/` или импорт CSV в Console | Строки профилей `VendorBusiness` | Загрузка списка ваших бизнес-клиентов перед запуском KYB |> [!NOTE]
>
> Если вам нужен только профиль пользователя или бизнеса для будущих проверок, не импортируйте историческую сессию верификации. Используйте API сущностей User или Business. Если же решение прежнего провайдера, поля документа, предупреждения или доказательства должны появиться в Didit как история комплаенса, используйте `POST /v3/session/imports/`.## Что можно перенести от каждого провайдера?Didit принимает канонический файл CSV или NDJSON, поэтому перенести данные можно от любого провайдера, если вы самостоятельно выгрузите их и приведёте к нужному формату. Схема импорта всегда соответствует канонической схеме Didit.| Семейство провайдеров | Типичные источники | Обычно можно перенести | Примечания |
| - | - | - | - |
| KYC-провайдеры | Sumsub, MetaMap, Veriff, Onfido, Persona, Jumio, Incode, iDenfy, Trulioo, HyperVerge, AU10TIX, Mitek, Ondato | Идентификатор заявителя, идентификатор пользователя у провайдера, статус решения, поля документа, изображения документа, изображение селфи или изображение для проверки живости, метки отказа, теги, исходные метаданные провайдера | Используйте `import_type=user_verification`. Если провайдер не может выгрузить изображения, импортируйте структурированные поля, а URL изображений оставьте пустыми. |
| KYB-провайдеры | Провайдеры реестров компаний, Sumsub KYB, Trulioo KYB, выгрузки реестров в духе Creditsafe, внутренние инструменты KYB | Название компании, регистрационный номер, страна, статус в реестре, должностные лица, бенефициарные владельцы, уровень риска, исходный payload реестра | Используйте `import_type=business_verification`. Должностные лица и UBO передаются как массивы JSON. |
| Провайдеры мониторинга транзакций / KYT | Sumsub Transaction Monitoring, выгрузки в духе Chainalysis KYT, Crystal, Merkle Science, Sardine, Unit21, Alloy, внутренние движки правил | Идентификатор транзакции, сумма, валюта, направление, субъект или контрагент, срабатывания правил, результаты провайдера, статус Travel Rule, снимок графа сети | Используйте `import_type=transactions`. Импортированные транзакции являются историческими записями; по умолчанию их повторный скрининг не выполняется. |
| Таблицы сценариев и политик | Выгрузки политик комплаенса, таблицы правил провайдеров, внутренние таблицы оценки рисков | Правила статусов по функциям, например «если страна выдачи X, установить для «Верификации личности» статус «На проверке»» | Используйте `import_type=status_rules`. Правила проверяются по каталогу полей сценария Didit до сохранения. |
| Хранилища пользователей и профилей | CRM, база клиентов, выгрузка пользователей провайдера, хранилище данных | `vendor_data`, отображаемое имя, метаданные, теги, доверенные изображения лиц | Используйте User API и загрузку изображений лица для профиля. Это не то же самое, что завершённая сессия верификации. |
| Данные чёрных и белых списков | Списки мошенников провайдеров, внутренние таблицы службы борьбы с мошенничеством, списки чарджбэков, внутренние списки, близкие к санкционным | Адреса электронной почты, телефоны, документы, кошельки, IP-адреса, отпечатки устройств, лица, страны, пользователи, компании | Используйте Lists API. Для изображений лиц используйте специальный endpoint загрузки, чтобы Didit мог извлечь биометрический эмбеддинг. |## Порядок миграции1) Решите, что именно вы импортируете: историю, профили, лица, списки, транзакции или правила.
2) Выгрузите данные из старого провайдера самостоятельно. Не передавайте API-ключи старого провайдера в Didit.
3) Преобразуйте выгрузку провайдера в соответствующий канонический шаблон Didit CSV или NDJSON.
4) Для больших миграций предпочтительно использовать NDJSON и разбивать данные на файлы, которые можно повторно загружать независимо друг от друга.
5) Создайте задание импорта и отслеживайте его прогресс.
6) Получите ошибки по строкам, исправьте только строки с ошибками и повторите их загрузку. Все задания импорта идемпотентны по их естественному внешнему идентификатору.## Создание задания импортаСоздайте задание импорта одним multipart-запросом:```bash theme={null}
curl -X POST https://verification.didit.me/v3/session/imports/ \
  -H "x-api-key: YOUR_API_KEY" \
  -F "import_type=user_verification" \
  -F "workflow_id=YOUR_KYC_WORKFLOW_ID" \
  -F "file=@didit-import.ndjson"
```Для небольших миграций, которые ведутся в таблицах, используйте CSV, а для больших миграций используйте NDJSON. При 100k+ строк NDJSON проще передавать потоком, разбивать на части, проверять и повторять.В одном приложении может одновременно выполняться до 4 заданий импорта, поэтому разбейте большую миграцию на несколько файлов и запустите задание для каждого из них.
Каждое задание параллельно загружает медиафайлы для каждой строки.
Задание, прерванное развёртыванием или перезапуском воркера, продолжается с последней импортированной строки самостоятельно, поэтому перезапускать его не нужно.Для импорта транзакций не указывайте `workflow_id`:```bash theme={null}
curl -X POST https://verification.didit.me/v3/session/imports/ \
  -H "x-api-key: YOUR_API_KEY" \
  -F "import_type=transactions" \
  -F "file=@didit-transactions.ndjson"
```### Поля запроса| Поле | Обязательное | Описание |
| - | - | - |
| `import_type` | Нет, по умолчанию `user_verification` | Одно из значений: `user_verification`, `business_verification`, `status_rules`, `transactions`. |
| `workflow_id` | Да, кроме `transactions` | UUID сценария, к которому привязываются импортированные записи. Для `user_verification` и `status_rules` нужен сценарий «Проверка пользователей»; для `business_verification` нужен сценарий «Верификация бизнеса (KYB)». |
| `file` | Нужно указать `file` или `source_file_url` | Канонический файл CSV или NDJSON, загружаемый непосредственно в запросе. |
| `source_file_url` | Нужно указать `file` или `source_file_url` | HTTPS-URL, по которому Didit загружает файл. URL из частных сетей отклоняются. |
| `source_format` | Нет | `csv` или `ndjson`. Если не указано, определяется по расширению файла. |### Как отслеживаются и дедуплицируются записиПоля для указания источника данных нет: любой импорт использует каноническую схему Didit. Каждая импортированная запись сохраняет `metadata.imported_from = "generic"` для отслеживания происхождения.Импорты `user_verification` и `business_verification` исключают дубликаты строк по `external_id` в пределах приложения, поэтому повторная загрузка того же файла не создаст дубликатов. Импорты `transactions` исключают дубликаты по `transaction_id`.Миграция от провайдера (`source=provider`) сохраняет каждую запись в виде `<provider>:<id>`, например `sumsub:5f8c0e2a9b1d4c3e2f1a0b9c`.
Запись, которую импорт файла «Проверка пользователей» передал с голым идентификатором провайдера (`5f8c0e2a9b1d4c3e2f1a0b9c`), распознаётся как та же запись в обоих направлениях.
Поэтому вы можете начать миграцию с помощью файлов и завершить её миграцией от провайдера или наоборот, не импортируя запись дважды.## Импорт фото документов, видео и материалов с селфиДля `import_type=user_verification` можно импортировать оригинальные фото документов, видео захвата документа и проверки живости, а также изображение селфи от предыдущего провайдера.Используйте эти канонические столбцы:| Доказательство | Предпочтительный столбец | Резервный вариант для небольших импортов | Где хранится в Didit |
| - | - | - | - |
| Лицевая сторона документа | `document_front_url` | `document_front_base64` | Изображение лицевой стороны для OCR в Верификации личности |
| Оборотная сторона документа | `document_back_url` | `document_back_base64` | Изображение оборотной стороны для OCR в Верификации личности |
| Селфи / изображение для проверки живости | `selfie_url` | `selfie_base64` | Эталонное изображение для Face/Liveness |
| Видео лицевой стороны документа | `document_front_video_url` | Только URL | Видео лицевой стороны для OCR в Верификации личности |
| Видео оборотной стороны документа | `document_back_video_url` | Только URL | Видео оборотной стороны для OCR в Верификации личности |
| Видео проверки живости | `liveness_video_url` | Только URL | Видео захвата для Face/Liveness |Для больших миграций используйте **HTTPS-URL**. Didit загружает каждый файл, проверяет, что URL безопасен, сохраняет собственную копию Didit и привязывает её к импортированной сессии. Изображения сжимаются, видео сохраняются без изменений. Встроенный base64 принимается для изображений в небольших импортах, но **видео всегда должны передаваться как URL**, поскольку base64 увеличивает каждое видео примерно на 33% и быстро превышает лимит импорта на файл.Пример строки NDJSON с URL медиафайлов, размещённых у провайдера:```json theme={null}
{
  "external_id": "applicant-123",
  "vendor_data": "user-42",
  "created_at": "2025-01-12T10:30:00Z",
  "status": "Approved",
  "email": "user@example.com",
  "phone": "+34687020083",
  "first_name": "Jane",
  "last_name": "Doe",
  "date_of_birth": "1990-05-15",
  "document_type": "P",
  "issuing_state": "USA",
  "document_number": "123456789",
  "expiration_date": "2030-01-15",
  "document_front_url": "https://provider-export.example.com/files/applicant-123-front.jpg",
  "document_back_url": "https://provider-export.example.com/files/applicant-123-back.jpg",
  "selfie_url": "https://provider-export.example.com/files/applicant-123-selfie.jpg",
  "document_front_video_url": "https://provider-export.example.com/files/applicant-123-front.webm",
  "document_back_video_url": "https://provider-export.example.com/files/applicant-123-back.webm",
  "liveness_video_url": "https://provider-export.example.com/files/applicant-123-liveness.mp4",
  "reject_reasons_json": "[]",
  "provider_metadata_json": "{\"source\":\"sumsub-export\"}"
}
```Важные правила для медиафайлов:- URL должны использовать схему `https`.
- URL не должны указывать на приватные IP-адреса, localhost, диапазоны link-local или внутренние хосты метаданных.
- Для изображений допустим либо столбец с URL, либо его резервный вариант `*_base64`; если заданы оба, приоритет у base64. Для видео поддерживается только URL: столбца `*_video_base64` не существует.
- Видео должны быть в формате `mp4`, `webm` или `mov`, и каждое видео может быть размером не более **10 МБ**. Файлы большего размера или файлы не видеоформата отклоняются, а строка помечается как содержащая ошибку.
- Didit применяет таймауты на подключение и чтение, максимальный размер файла и не выполняет бесконечных повторных попыток.
- Ошибки загрузки медиафайлов сохраняются как ошибки строк, чтобы остальная часть импорта могла продолжиться.
- Если у вас нет медиафайлов от провайдера, оставьте эти столбцы пустыми. Didit всё равно импортирует структурированное решение и поля документа.
- Импортированные изображения и видео служат доказательствами для проверки исторических данных. По умолчанию Didit не запускает повторно OCR, проверку живости или анализ подделки документов для импортированных исторических медиафайлов.

Промпт для импорта проверки пользователей
        Скопировать промпт в буфер обмена



      
      

\<pre>

\`You are helping migrate historical User Verification (KYC) sessions into Didit.

Goal:
Transform the customer's Sumsub, MetaMap, or provider export into Didit's canonical verification import file, then call Didit's import API.

Didit API:
\- Create import job: POST https://verification.didit.me/v3/session/imports/
\- Poll job: GET https://verification.didit.me/v3/session/imports/{import_id}/
\- Read row errors: GET https://verification.didit.me/v3/session/imports/{import_id}/errors/
\- Download template: GET https://verification.didit.me/v3/session/imports/template/?import_type=user_verification
\- Authenticate with x-api-key: <DIDIT_API_KEY>

Inputs you need:
\- DIDIT_API_KEY
\- DIDIT_WORKFLOW_ID for a User Verification workflow
\- Provider export file or API output

Canonical columns:
external_id, vendor_data, created_at, status, email, phone, first_name, last_name, date_of_birth, gender, nationality, document_type, issuing_state, document_number, personal_number, expiration_date, document_front_url, document_back_url, selfie_url, document_front_base64, document_back_base64, selfie_base64, document_front_video_url, document_back_video_url, liveness_video_url, is_blocklisted, reject_reasons_json, tags, provider_metadata_json

Rules:
\- phone is optional and accepts international format (for example +34687020083); it is stored on the imported session.
\- external_id must be the provider's unique verification/applicant id.
\- vendor_data must be the customer's stable user id. If absent, use the provider identity/user id.
\- status must be Approved, Declined, In Review, or Expired.
\- date_of_birth and expiration_date must use YYYY-MM-DD.
\- created_at must be ISO 8601.
\- nationality and issuing_state must be ISO-3166 alpha-3, for example USA, ESP, BRA.
\- document_type must use Didit codes: P, ID, DL, RP, SSC, HIC, WP, TC, VISA, PSC, BC, OTHER.
\- reject_reasons_json must be a JSON array. provider_metadata_json must be a JSON object.
\- Use document_front_url, document_back_url, and selfie_url when the provider can export evidence images. Use HTTPS media URLs for large imports. Avoid inline base64 unless the import is small.
\- Use document_front_video_url, document_back_video_url, and liveness_video_url to import capture videos. Videos must be mp4, webm, or mov and at most 10 MB each; otherwise the row is rejected.
\- If only one document side exists, fill document_front_url and leave document_back_url empty.
\- Never call the import API with provider credentials. The customer downloads provider data themselves.
\- The import is idempotent by external_id inside one Didit application, so retries are safe.

Steps:
1\. Inspect the provider export schema.
2\. Map each provider row to the canonical fields.
3\. Write NDJSON for large files; one JSON object per line.
4\. Validate the first 10 rows locally before uploading.
5\. Create an import job:
curl -X POST https://verification.didit.me/v3/session/imports/ \
-H "x-api-key: $DIDIT_API_KEY" \
-F "import_type=user_verification" \
-F "workflow_id=$DIDIT_WORKFLOW_ID" \
-F "file=@didit-import.ndjson"
6\. Poll until status is COMPLETED or FAILED.
7\. If failed_count is greater than 0, fetch /errors/ and produce a corrected file containing only failed rows.

Output:
\- A canonical CSV or NDJSON file ready for Didit.
\- The curl command used to create the import job.
\- The import_id and polling command.
\- A short summary of created, skipped, and failed rows.`

\</pre>



      
      

Вставьте в



Промпт для импорта верификации бизнеса
        Скопировать промпт в буфер обмена



      
      

\<pre>

\`You are helping migrate historical Business Verification (KYB) sessions into Didit.

Goal:
Transform the customer's KYB provider export into Didit's canonical business verification import file, then call Didit's import API.

Didit API:
\- Create import job: POST https://verification.didit.me/v3/session/imports/
\- Poll job: GET https://verification.didit.me/v3/session/imports/{import_id}/
\- Read row errors: GET https://verification.didit.me/v3/session/imports/{import_id}/errors/
\- Download template: GET https://verification.didit.me/v3/session/imports/template/?import_type=business_verification
\- Authenticate with x-api-key: <DIDIT_API_KEY>

Inputs you need:
\- DIDIT_API_KEY
\- DIDIT_WORKFLOW_ID for a Business Verification workflow
\- Provider export file or API output

Canonical business columns:
external_id, vendor_data, created_at, status, company_name, registration_number, country_code, registry_status, verification_status, company_type, tax_number, risk_level, incorporation_date, registered_address, is_from_registry, officers_json, beneficial_owners_json, provider_metadata_json, tags

Rules:
\- external_id must be the provider's unique business verification id.
\- vendor_data must be the customer's stable business id.
\- status must be Approved, Declined, In Review, or Expired.
\- country_code must be ISO-3166 alpha-3.
\- officers_json and beneficial_owners_json must be JSON arrays of objects.
\- provider_metadata_json must be a JSON object.
\- The import is idempotent by external_id inside one Didit application.

Create an import job:
curl -X POST https://verification.didit.me/v3/session/imports/ \
-H "x-api-key: $DIDIT_API_KEY" \
-F "import_type=business_verification" \
-F "workflow_id=$DIDIT_WORKFLOW_ID" \
-F "file=@didit-business-import.ndjson"

Output:
\- A canonical CSV or NDJSON file ready for Didit.
\- The curl command used to create the import job.
\- The import_id and polling command.
\- A short summary of created, skipped, and failed rows.`

\</pre>



      
      

Вставьте в



Промпт для импорта пользовательских правил статусов
        Скопировать промпт в буфер обмена



      
      

\<pre>

\`You are helping import custom status rules into a Didit workflow.

Goal:
Transform the customer's policy spreadsheet into Didit's feature_status_rules format, then call Didit's import API.

Didit API:
\- Create import job: POST https://verification.didit.me/v3/session/imports/
\- Poll job: GET https://verification.didit.me/v3/session/imports/{import_id}/
\- Read row errors: GET https://verification.didit.me/v3/session/imports/{import_id}/errors/
\- Download template: GET https://verification.didit.me/v3/session/imports/template/?import_type=status_rules
\- Authenticate with x-api-key: <DIDIT_API_KEY>

Inputs you need:
\- DIDIT_API_KEY
\- DIDIT_WORKFLOW_ID for the workflow to update
\- A policy spreadsheet or JSON policy definition

Canonical status-rule columns:
feature, rules_json, mode

Rules:
\- feature must be a Didit feature key such as OCR, LIVENESS, FACE_MATCH, AML, KYB_REGISTRY, KYB_DOCUMENTS, or KYB_KEY_PEOPLE.
\- rules_json must be a JSON array of rule objects.
\- Each rule needs field, operator, status, and usually value.
\- mode is replace or append. Default is replace.
\- Do not reference status fields such as kyc.status; status rules compute status and must use other report fields.

Example rules_json:
\[{"field":"kyc.issuing_state","operator":"in","value":["VEN","IRN"],"status":"In Review"}]

Create an import job:
curl -X POST https://verification.didit.me/v3/session/imports/ \
-H "x-api-key: $DIDIT_API_KEY" \
-F "import_type=status_rules" \
-F "workflow_id=$DIDIT_WORKFLOW_ID" \
-F "file=@didit-status-rules.csv"

Output:
\- A canonical CSV or NDJSON file ready for Didit.
\- The curl command used to create the import job.
\- The import_id and polling command.
\- A summary of updated and failed rule rows.`

\</pre>



      
      

Вставьте в



Промпт для импорта транзакций
        Скопировать промпт в буфер обмена



      
      

\<pre>

\`You are helping migrate historical transaction monitoring records into Didit.

Goal:
Transform the customer's legacy transaction monitoring export into Didit's canonical transaction import file, then call Didit's import API.

Didit API:
\- Create import job: POST https://verification.didit.me/v3/session/imports/
\- Poll job: GET https://verification.didit.me/v3/session/imports/{import_id}/
\- Read row errors: GET https://verification.didit.me/v3/session/imports/{import_id}/errors/
\- Download template: GET https://verification.didit.me/v3/session/imports/template/?import_type=transactions
\- Authenticate with x-api-key: <DIDIT_API_KEY>

Inputs you need:
\- DIDIT_API_KEY
\- A transaction export file or API output

Canonical transaction columns:
transaction_id, transaction_at, transaction_category, direction, amount, currency, currency_kind, amount_in_default_currency, default_currency, payment_details, payment_reference_id, action_type, status, score, severity, subject_json, counterparty_json, custom_properties_json, provider_results_json, travel_rule_json, network_snapshot_json, metadata_json

Rules:
\- transaction_id is required and is idempotent per Didit application.
\- transaction_category must be one of Didit's transaction categories, for example finance, kyc, travelRule, userPlatformEvent, gamblingBet, gamblingLimitChange, gamblingBonusChange, or auditTrailEvent.
\- direction must be INBOUND or OUTBOUND.
\- status must be APPROVED, IN_REVIEW, DECLINED, or AWAITING_USER.
\- subject_json must include vendor_data and full_name.
\- counterparty_json is optional but should be included when the legacy provider has it.
\- provider_results_json must be a JSON array.
\- travel_rule_json, network_snapshot_json, custom_properties_json, and metadata_json must be JSON objects when present.

Create an import job:
curl -X POST https://verification.didit.me/v3/session/imports/ \
-H "x-api-key: $DIDIT_API_KEY" \
-F "import_type=transactions" \
-F "file=@didit-transactions.ndjson"

Output:
\- A canonical CSV or NDJSON file ready for Didit.
\- The curl command used to create the import job.
\- The import_id and polling command.
\- A summary of created, skipped, and failed transaction rows.`

\</pre>



      
      

Вставьте в

## Проверка хода выполнения```bash theme={null}
curl https://verification.didit.me/v3/session/imports/IMPORT_ID/ \
  -H "x-api-key: YOUR_API_KEY"
```Ответ содержит `status`, `import_type`, `total_rows`, `processed_rows`, `created_count`, `updated_count`, `skipped_count`, `failed_count` и `checkpoint_row`.## Загрузка ошибок строк```bash theme={null}
curl https://verification.didit.me/v3/session/imports/IMPORT_ID/errors/ \
  -H "x-api-key: YOUR_API_KEY"
```Каждая ошибка содержит `row_number`, `external_id`, `error` и `raw_row`, поэтому вы можете исправить только строки с ошибками и повторить импорт для них.## Защита от злоупотребленийИсторические задания импорта через `POST /v3/session/imports/` по умолчанию отключены. Didit включает эту возможность для каждой организации после проверки, поскольку такие задания могут обрабатывать миллионы строк и загружать медиафайлы. Обычные импорты операционных данных, описанные в этом руководстве, например создание пользователей, создание компаний, загрузка лиц для профилей, загрузка списков блокировки лиц или добавление записей в списки, не требуют специального разрешения для миграции, сверх обычных прав API-ключа, доступности продукта и лимитов запросов для этих эндпоинтов.Исторические задания импорта также выполняются на изолированных рабочих узлах с ограничениями на размер файла и количество строк, допустимостью только HTTPS-URL для медиафайлов, блокировкой URL из приватной сети и лимитом в 4 активных задания импорта на приложение, а также с фиксацией ошибок по каждой строке.## Канонические статусы| Результат у провайдера | Статус в Didit |
| - | - |
| Approved / Green / Verified | `Approved` |
| Declined / Red / Rejected | `Declined` |
| Manual review / Pending / Review needed | `In Review` |
| Incomplete / Init / Unknown historical row | `Expired` |## ИдемпотентностьDidit использует `external_id` в качестве ключа идемпотентности для импортов «Проверка пользователей» и «Верификация бизнеса (KYB)» в пределах каждого приложения. Импорты транзакций используют `transaction_id` для каждого приложения. Повторный импорт того же файла пропускает строки, которые уже были импортированы, и создаёт строки, которые ещё не были обработаны.## Импорт пользователей, фото профилей лиц и списков блокировкиИспользуйте эти пути, если вы не воссоздаёте уже завершённую сессию верификации.### Импорт профилей пользователейСоздавайте пользователей с помощью [`POST /v3/users/create/`](https://docs.didit.me/ru/management-api/users/create) или импорта CSV в Business Console из раздела [Импорт и экспорт пользователей](https://docs.didit.me/ru/entities/users/import-export.md). Это действие создаёт или обновляет только профиль `VendorUser`. Оно не создаёт сессию верификации, решение KYC, отчёт по документу, предупреждение или историю webhook.Используйте этот способ, если нужно, чтобы Didit знал о клиенте до будущих проверок, или если требуется заполнить задним числом поля, похожие на CRM, например `display_name`, теги и метаданные.### Загрузка доверенных фото профилейПосле того как пользователь уже существует, загрузите доверенное фото профиля с помощью [`POST /v3/organization/{organization_id}/application/{application_id}/vendor-users/by-id/{didit_internal_id}/faces/upload/`](https://docs.didit.me/ru/management-api/users/upload-face). Это действие привязывает биометрические данные к профилю пользователя и индексирует их для обнаружения дубликатов и поиска по лицу.Это действие **не** добавляет лицо в список блокировки. Оно полезно, если у вас есть доверенное фото профиля от предыдущего провайдера KYC и вы хотите, чтобы будущие проверки Didit сравнивали лицо с этим фото.### Импорт списков блокировки и разрешённых лицЧтобы заблокировать или разрешить лицо напрямую, используйте [`POST /v3/lists/{list_uuid}/entries/face-upload/`](https://docs.didit.me/ru/management-api/lists/upload-face) со списком типа «лицо». Didit извлекает биометрический эмбеддинг и сохраняет запись в списке.Этот способ подходит для изображений известных мошенников, доверенных лиц из списка разрешённых и миграции списков мошенников от провайдеров. Если лицо получено из существующей сессии Didit, предпочтительнее использовать [`POST /v3/lists/{list_uuid}/entries/`](https://docs.didit.me/ru/management-api/lists/create-entry) с `reference_session_id`: Didit извлечёт нужное лицо из сессии и свяжет запись с источником.### Импорт списков пользователей, компаний, документов, кошельков, эл. почты, телефонов, IP-адресов или устройствДля значений, не связанных с лицами, используйте [`POST /v3/lists/{list_uuid}/entries/`](https://docs.didit.me/ru/management-api/lists/create-entry). Этот путь подходит для списков блокировки и списков разрешений провайдеров, списков чарджбэков, адресов кошельков, известных рискованных IP-адресов, отпечатков устройств, номеров документов, адресов электронной почты, телефонов, пользователей или компаний.## Следующие шаги> [card] [Импорт пользователей](https://docs.didit.me/ru/entities/users/import-export.md)
>
> Загрузите профили пользователей и прикрепите доверенные фото профилей.> [card] [Импорт компаний](https://docs.didit.me/ru/entities/businesses/import-export.md)
>
> Загрузите профили компаний перед запуском KYB.> [card] [Загрузка фото профиля](https://docs.didit.me/ru/management-api/users/upload-face.md)
>
> Прикрепите доверенные фото лиц к импортированным пользователям.> [card] [Загрузка лица в список](https://docs.didit.me/ru/management-api/lists/upload-face.md)
>
> Добавляйте лица в списки блокировки или разрешённые списки.> [card] [Создание записи в списке](https://docs.didit.me/ru/management-api/lists/create-entry.md)
>
> Импортируйте телефоны, адреса эл. почты, кошельки, документы, IP-адреса, устройства, пользователей или компании в списки.> [card] [Лимиты запросов](https://docs.didit.me/ru/integration/rate-limiting.md)
>
> Настройте безопасные циклы миграции и повторные попытки.


## OpenAPI

````yaml ru/openapi-25.json POST /v3/session/imports/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: >-
    API верификации личности. Аутентификация выполняется с помощью заголовка
    x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/imports/:
    post:
      tags:
        - Sessions
      summary: Создать задачу импорта верификаций
      description: >-
        Создать асинхронную задачу импорта для исторических сессий Проверки
        пользователей, сессий Верификации бизнеса (KYB), записей мониторинга
        транзакций или кастомных правил статусов сценариев. Укажите
        `source=provider`, чтобы выполнить миграцию от другого провайдера: Didit
        считывает данные из Sumsub, Onfido, Persona и ComplyCube с помощью
        вашего ключа только для чтения, считывает записи Veriff, iDenfy и
        MetaMap по идентификаторам, переданным в `file`, и импортирует файл
        экспорта в формате Didit для остальных провайдеров. Идентификаторы
        записей содержат префикс провайдера (`sumsub:<id>`), поэтому повторный
        запуск пропускает всё, что уже есть в Didit, а запись, импортированная
        через файл с «чистым» ID провайдера, также распознаётся в обоих
        направлениях, благодаря чему переключение между импортом из файла и
        миграцией от провайдера никогда не приводит к дублированию записей. Одно
        приложение может выполнять до 4 задач импорта одновременно; задача,
        прерванная деплоем или перезапуском воркера, автоматически
        возобновляется с последней импортированной строки. Импорт по умолчанию
        отключён и должен активироваться Didit для каждой организации отдельно.
      operationId: post_v3_session_imports_create
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                import_type:
                  type: string
                  enum:
                    - user_verification
                    - business_verification
                    - status_rules
                    - transactions
                  default: user_verification
                  description: >-
                    Что импортировать: исторические сессии проверки
                    пользователей, исторические сессии верификации бизнеса,
                    пользовательские правила статусов сценария или исторические
                    записи мониторинга транзакций.
                workflow_id:
                  type: string
                  format: uuid
                  description: >-
                    UUID сценария, к которому должны быть привязаны
                    импортированные сессии или правила статуса. Обязательно для
                    user_verification, business_verification и status_rules.
                    Опустите для transactions.
                source_format:
                  type: string
                  enum:
                    - csv
                    - ndjson
                  description: >-
                    Необязательно. Если опущено, определяется по расширению
                    загруженного файла.
                file:
                  type: string
                  format: binary
                  description: >-
                    Канонический файл CSV или NDJSON. Для больших объёмов
                    импорта используйте NDJSON. Максимальный размер загрузки 25
                    MB (для файлов большего размера используйте
                    `source_file_url`). Нельзя использовать одновременно с
                    `source_file_url`.
                source_file_url:
                  type: string
                  format: uri
                  description: >-
                    Альтернатива загрузке файла. Должен быть HTTPS-URL,
                    указывающим на публичный адрес (частные/loopback-сети
                    отклоняются). Взаимоисключающий с `file`.
                source:
                  type: string
                  enum:
                    - file
                    - provider
                  description: >-
                    `provider` указывает, что это миграция от другого провайдера
                    верификации личности. Опустите для импорта файла.
                provider:
                  type: string
                  enum:
                    - sumsub
                    - jumio
                    - veriff
                    - onfido
                    - persona
                    - metamap
                    - socure
                    - idnow
                    - shufti
                    - idenfy
                    - ondato
                    - trulioo
                    - au10tix
                    - complycube
                    - other
                  description: >-
                    Источник миграции из `GET /v3/session/imports/providers/`.
                    Обязателен, если `source` равен `provider`.
                credentials:
                  type: object
                  additionalProperties:
                    type: string
                  description: >-
                    Ключ провайдера только для чтения с именами полей,
                    указанными в `credential_fields`. Зашифрован при хранении,
                    никогда не возвращается в ответах и удаляется по завершении
                    импорта. Передавайте его в виде JSON-строки в multipart.
                options:
                  type: object
                  properties:
                    region:
                      type: string
                      description: >-
                        Регион провайдера, один из его `regions` (Onfido: `eu`,
                        `us`, `ca`).
                status_mapping:
                  type: object
                  additionalProperties:
                    type: string
                    enum:
                      - Approved
                      - Declined
                      - In Review
                      - Expired
                      - Not Finished
                      - Abandoned
                  description: >-
                    Изменения стандартного сопоставления статусов провайдера:
                    исходный статус в статус Didit. Статусы `Not Finished` и
                    `Abandoned` пропускаются и подсчитываются, но никогда не
                    импортируются.
                dry_run:
                  type: boolean
                  default: false
                  description: >-
                    Подсчитать, что импортирует миграция (по статусу, уже в
                    Didit, один и тот же человек, не завершено), не выполняя
                    запись. Задача переходит в статус `READY`; запустите её с
                    помощью `POST /v3/session/imports/{importId}/start/`.
                face_templates:
                  type: boolean
                  default: false
                  description: >-
                    Создание биометрических шаблонов лиц из импортированных
                    селфи и поиск их по лицам приложения и списку блокировки.
                    Совпадения помечаются только для проверки. Требуется
                    `lawful_basis_confirmed`.
                lawful_basis_confirmed:
                  type: boolean
                  default: false
                  description: >-
                    Подтверждает, что у вас есть законные основания передавать
                    эти селфи компании Didit в качестве обработчика.
          application/json:
            schema:
              type: object
              required:
                - source_file_url
              properties:
                import_type:
                  type: string
                  enum:
                    - user_verification
                    - business_verification
                    - status_rules
                    - transactions
                  default: user_verification
                  description: >-
                    Что импортировать: исторические сессии проверки
                    пользователей, исторические сессии верификации бизнеса,
                    пользовательские правила статусов сценария или исторические
                    записи мониторинга транзакций.
                workflow_id:
                  type: string
                  format: uuid
                  description: >-
                    UUID сценария, к которому должны быть привязаны
                    импортированные сессии или правила статуса. Обязательно для
                    user_verification, business_verification и status_rules.
                    Опустите для transactions.
                source_format:
                  type: string
                  enum:
                    - csv
                    - ndjson
                  description: >-
                    Необязательно. Если опущено, определяется по расширению
                    файла в URL.
                source_file_url:
                  type: string
                  format: uri
                  description: >-
                    Альтернатива загрузке файла. Должен быть HTTPS-URL,
                    указывающим на публичный адрес (частные/loopback-сети
                    отклоняются). Взаимоисключающий с `file`.
                source:
                  type: string
                  enum:
                    - file
                    - provider
                  description: >-
                    `provider` указывает, что это миграция от другого провайдера
                    верификации личности. Опустите для импорта файла.
                provider:
                  type: string
                  enum:
                    - sumsub
                    - jumio
                    - veriff
                    - onfido
                    - persona
                    - metamap
                    - socure
                    - idnow
                    - shufti
                    - idenfy
                    - ondato
                    - trulioo
                    - au10tix
                    - complycube
                    - other
                  description: >-
                    Источник миграции из `GET /v3/session/imports/providers/`.
                    Обязателен, если `source` равен `provider`.
                credentials:
                  type: object
                  additionalProperties:
                    type: string
                  description: >-
                    Ключ провайдера только для чтения с именами полей,
                    указанными в `credential_fields`. Зашифрован при хранении,
                    никогда не возвращается в ответах и удаляется по завершении
                    импорта. Передавайте его в виде JSON-строки в multipart.
                options:
                  type: object
                  properties:
                    region:
                      type: string
                      description: >-
                        Регион провайдера, один из его `regions` (Onfido: `eu`,
                        `us`, `ca`).
                status_mapping:
                  type: object
                  additionalProperties:
                    type: string
                    enum:
                      - Approved
                      - Declined
                      - In Review
                      - Expired
                      - Not Finished
                      - Abandoned
                  description: >-
                    Изменения стандартного сопоставления статусов провайдера:
                    исходный статус в статус Didit. Статусы `Not Finished` и
                    `Abandoned` пропускаются и подсчитываются, но никогда не
                    импортируются.
                dry_run:
                  type: boolean
                  default: false
                  description: >-
                    Подсчитать, что импортирует миграция (по статусу, уже в
                    Didit, один и тот же человек, не завершено), не выполняя
                    запись. Задача переходит в статус `READY`; запустите её с
                    помощью `POST /v3/session/imports/{importId}/start/`.
                face_templates:
                  type: boolean
                  default: false
                  description: >-
                    Создание биометрических шаблонов лиц из импортированных
                    селфи и поиск их по лицам приложения и списку блокировки.
                    Совпадения помечаются только для проверки. Требуется
                    `lawful_basis_confirmed`.
                lawful_basis_confirmed:
                  type: boolean
                  default: false
                  description: >-
                    Подтверждает, что у вас есть законные основания передавать
                    эти селфи компании Didit в качестве обработчика.
            examples:
              URL-based import:
                value:
                  import_type: user_verification
                  workflow_id: 9f9b1234-aaaa-bbbb-cccc-1234567890ab
                  source_file_url: https://files.example.com/exports/sessions.ndjson
      responses:
        '201':
          description: >-
            Задание на импорт принято. Опрашивайте возвращённый `uuid`, пока
            `status` не станет `COMPLETED` или `FAILED`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SessionImportJob'
              examples:
                Job accepted:
                  value:
                    uuid: 3f9c1a2b-4d5e-4f60-8a7b-9c0d1e2f3a4b
                    status: PENDING
                    import_type: user_verification
                    source_format: ndjson
                    source_filename: sessions.ndjson
                    total_rows: 0
                    processed_rows: 0
                    checkpoint_row: 0
                    created_count: 0
                    updated_count: 0
                    skipped_count: 0
                    failed_count: 0
                    total_media_bytes: 0
                    last_error: null
                    created_at: '2026-05-17T08:42:11Z'
                    updated_at: '2026-05-17T08:42:11Z'
                    started_at: null
                    completed_at: null
        '400':
          description: >-
            Недопустимый сценарий, тип файла, размер файла, исходный URL-адрес
            или комбинация селекторов. Миграция, ключ которой отклонён
            провайдером, возвращает `code` (`invalid_credentials`,
            `missing_permission`, `wrong_region`, `provider_unavailable`,
            `rate_limited`, `ids_required`, `record_not_found`),
            `missing_permissions` и `suggested_region`.
          content:
            application/json:
              examples:
                Invalid workflow:
                  value:
                    workflow_id:
                      - Invalid workflow_id.
                Workflow required:
                  value:
                    workflow_id:
                      - This field is required for this import type.
                Wrong file type:
                  value:
                    file:
                      - Only CSV and NDJSON files are supported.
                File too large:
                  value:
                    file:
                      - Import file exceeds the maximum allowed size.
                No source:
                  value:
                    file:
                      - Upload a file or provide source_file_url.
                Both sources:
                  value:
                    file:
                      - Use either file or source_file_url, not both.
        '403':
          description: >-
            Импорт не включён, приложение песочницы или отсутствует API-ключ
            (при неверном, отозванном или истёкшем ключе возвращается `401`).
            Импорт верификаций по умолчанию отключён и должен быть включён Didit
            для каждой организации отдельно.
          content:
            application/json:
              examples:
                Imports not enabled:
                  value:
                    detail: >-
                      Verification imports are not enabled for this
                      organization.
                Sandbox:
                  value:
                    detail: >-
                      Verification imports are not enabled for sandbox
                      applications.
                Bad API key:
                  value:
                    detail: You do not have permission to perform this action.
        '429':
          description: >-
            У приложения уже есть 4 активных задания на импорт
            (PENDING/PROCESSING/PAUSED), это максимальное количество, которое
            может выполняться одновременно. Дождитесь завершения одного из них
            перед запуском следующего.
          content:
            application/json:
              examples:
                Active job:
                  value:
                    detail: >-
                      This application already has 4 active import jobs, the
                      most it can run at once. Wait for one to finish before
                      starting another.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.sessions.imports.create(
                import_type="user_verification",
                workflow_id="9f9b1234-aaaa-bbbb-cccc-1234567890ab",
                source_file_url="https://files.example.com/exports/sessions.ndjson",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit from "@didit-protocol/sdk-node";

            // Reads DIDIT_API_KEY.
            const didit = new Didit();

            const result = await didit.sessions.imports.create({
              import_type: "user_verification",
              workflow_id: "9f9b1234-aaaa-bbbb-cccc-1234567890ab",
              source_file_url: "https://files.example.com/exports/sessions.ndjson",
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Imports.Create(ctx, didit.SessionsImportsCreateParams{\n\tImportType:    didit.Some(didit.SessionsImportsCreateParamsImportType(\"user_verification\")),\n\tWorkflowID:    didit.String(\"9f9b1234-aaaa-bbbb-cccc-1234567890ab\"),\n\tSourceFileURL: didit.String(\"https://files.example.com/exports/sessions.ndjson\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;

            import me.didit.types.SessionsImportsCreateParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.sessions().imports().create(SessionsImportsCreateParams.builder()
                    .importType(SessionsImportsCreateParams.ImportType.of("user_verification"))
                    .workflowId("9f9b1234-aaaa-bbbb-cccc-1234567890ab")
                    .sourceFileUrl("https://files.example.com/exports/sessions.ndjson")
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;

            // Reads DIDIT_API_KEY.
            $didit = new DiditClient();

            $result = $didit->sessions->imports->create([
                'import_type' => 'user_verification',
                'workflow_id' => '9f9b1234-aaaa-bbbb-cccc-1234567890ab',
                'source_file_url' => 'https://files.example.com/exports/sessions.ndjson',
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

            # Reads DIDIT_API_KEY.
            didit = Didit::Client.new

            result = didit.sessions.imports.create(
              import_type: "user_verification",
              workflow_id: "9f9b1234-aaaa-bbbb-cccc-1234567890ab",
              source_file_url: "https://files.example.com/exports/sessions.ndjson"
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await client.Sessions.Imports.CreateAsync(new
            SessionsImportsCreateParams

            {
                ImportType = new SessionsImportsCreateParamsImportType("user_verification"),
                WorkflowId = "9f9b1234-aaaa-bbbb-cccc-1234567890ab",
                SourceFileUrl = "https://files.example.com/exports/sessions.ndjson",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    SessionImportJob:
      type: object
      required:
        - uuid
        - status
        - import_type
        - source_format
        - source_filename
        - total_rows
        - processed_rows
        - created_count
        - updated_count
        - skipped_count
        - failed_count
      properties:
        uuid:
          type: string
          format: uuid
          description: >-
            Идентификатор задания на импорт. Используйте это значение для
            отслеживания прогресса и получения ошибок по строкам.
        status:
          type: string
          enum:
            - PENDING
            - PROCESSING
            - COMPLETED
            - FAILED
            - PAUSED
            - CANCELLED
            - READY
        import_type:
          type: string
          enum:
            - user_verification
            - business_verification
            - status_rules
            - transactions
        source_format:
          type: string
          enum:
            - csv
            - ndjson
        source_filename:
          type: string
        total_rows:
          type: integer
          format: int64
        processed_rows:
          type: integer
          format: int64
        checkpoint_row:
          type: integer
          format: int64
        created_count:
          type: integer
          format: int64
        updated_count:
          type: integer
          format: int64
        skipped_count:
          type: integer
          format: int64
        failed_count:
          type: integer
          format: int64
        total_media_bytes:
          type: integer
          format: int64
        last_error:
          type: string
          nullable: true
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        started_at:
          type: string
          format: date-time
          nullable: true
        completed_at:
          type: string
          format: date-time
          nullable: true
        state:
          type: string
          enum:
            - ready
            - queued
            - running
            - paused
            - completed
            - errors
            - failed
            - cancelled
          description: >-
            Состояние задачи, как оно отображается в консоли; `errors` означает
            завершенную задачу с отклоненными строками.
        source:
          type: string
          enum:
            - file
            - api
            - provider
        provider:
          type: string
          description: Источник миграции; пусто для импорта из файла или через API.
        provider_options:
          type: object
        credential_hint:
          type: string
          description: >-
            Первые символы ключа, содержащегося в миграции. Сам ключ никогда не
            возвращается.
        credentials_expires_at:
          type: string
          format: date-time
          nullable: true
        resumes_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Когда задача, приостановленная из-за лимита запросов провайдера,
            возобновляется автоматически.
        status_mapping:
          type: object
          additionalProperties:
            type: string
        is_dry_run:
          type: boolean
        dry_run_summary:
          type: object
          description: >-
            Результаты тестового прогона: `total`, `by_status`,
            `already_in_didit`, `same_person`, `not_finished`, `failed`,
            `unmapped_statuses`.
        face_templates_enabled:
          type: boolean
        lawful_basis_confirmed_at:
          type: string
          format: date-time
          nullable: true
        not_finished_count:
          type: integer
          format: int64
        same_person_count:
          type: integer
          format: int64
        face_templates_count:
          type: integer
          format: int64
        face_duplicates_count:
          type: integer
          format: int64
        face_blocklist_hits_count:
          type: integer
          format: int64
        created_by_name:
          type: string
          nullable: true
        created_by_email:
          type: string
          nullable: true
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        API-ключ вашего приложения из раздела «Разработчикам» -> «API-ключи» в
        Business Console. Основной ключ имеет полный доступ. Именованный ключ
        может иметь ограниченную область действия: без доступа, чтение или
        запись для каждого ресурса, ограничение определенными сценариями или
        одобренными сессиями, списком IP-адресов и сроком действия. 401
        означает, что ключ неверен, отозван или его срок действия истек; 403
        означает, что ключ не был передан, у ключа нет доступа к этому ресурсу
        или действию, либо запрос поступил с адреса вне его списка IP-адресов;
        404 на маршруте сессии означает, что сессия не входит в сценарии или
        статусы ключа. Ключ без доступа к медиа получает URL изображений, видео
        и PDF как null, а ключ без прав на запись сессий получает ссылки на
        сессии и токены как null. См. https://docs.didit.me/console/api-keys.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.