> ## 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.

# Импорт и экспорт пользователей: массовые операции CSV

> Массовая загрузка сущностей пользователей Didit из CSV и экспорт полной таблицы пользователей для внешних compliance-инструментов. Доступно в Business Console.



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



      
      

\<pre>

\````# Goal — bulk-load (or extract) Didit User entities programmatically

CSV import / export is a console-only UI feature. For programmatic bulk operations, loop `POST /v3/users/create/` for imports, optionally upload trusted profile faces with `POST /v3/organization/{organization_id}/application/{application_id}/vendor-users/by-id/{didit_internal_id}/faces/upload/`, and paginate `GET /v3/users/` for exports. There is no public CSV API endpoint.

\## Bulk import — loop the create endpoint

\```bash
\# users.json — array of records you want to seed into Didit
\# [{"vendor_data":"user-1","display_name":"Alice"}, ...]

jq -c '.[]' users.json | while read user; do
curl -X POST https://verification.didit.me/v3/users/create/ \
-H "x-api-key: $DIDIT_API_KEY" \
-H "Content-Type: application/json" \
-d "$user"
sleep 0.1   # respect rate limits — see /integration/rate-limiting
done
\```

Record shape (matches `POST /v3/users/create/`):

\```json
\{
"vendor_data": "user-42",          // required, unique per app
"display_name": "Jane Doe",        // optional
"metadata": {"tier": "premium"},   // free-form JSON
"tags": ["promo-2026"]             // optional array of strings
}
\```

\`create` is **not** idempotent — a duplicate `vendor_data` returns conflict. Branch on existence:

\```bash
\# Idempotent upsert pattern
if curl -s -o /dev/null -w "%{http_code}" \
 https://verification.didit.me/v3/users/$VD/ \
 -H "x-api-key: $DIDIT_API_KEY" | grep -q 200; then
curl -X PATCH https://verification.didit.me/v3/users/$VD/ \
-H "x-api-key: $DIDIT_API_KEY" -H "Content-Type: application/json" \
-d "$BODY"
else
curl -X POST https://verification.didit.me/v3/users/create/ \
-H "x-api-key: $DIDIT_API_KEY" -H "Content-Type: application/json" \
-d "$BODY"
fi
\```

\## Import faces from another provider

If each imported user has a trusted face image, upload it after the User exists:

\```bash
\# GET /v3/users/{vendor_data}/ or POST /v3/users/create/ first.
\# Use the returned didit_internal_id for the profile attachment endpoint.
curl -X POST https://verification.didit.me/v3/organization/$ORGANIZATION_ID/application/$APPLICATION_ID/vendor-users/by-id/$DIDIT_INTERNAL_ID/faces/upload/ \
-H "x-api-key: $DIDIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"image": "<base64-encoded-jpg-or-png>", "comment": "Imported from previous KYC provider"}'
\```

This stores the face on the User profile and enrolls it for duplicate detection and face search. It does not blocklist the face; use /management-api/lists/upload-face for blocklists.

\## Bulk export — paginate the list endpoint

\```bash
PAGE=1
while :; do
RESP=$(curl -sG https://verification.didit.me/v3/users/ \
-H "x-api-key: $DIDIT_API_KEY" \
\--data-urlencode "page=$PAGE" \
\--data-urlencode "page_size=100")
echo "$RESP" | jq -c '.results[]' >> users.ndjson
HAS_NEXT=$(echo "$RESP" | jq -r '.next // empty')
\[ -z "$HAS_NEXT" ] && break
PAGE=$((PAGE+1))
done
\```

Filter with the same query params as `GET /v3/users/` (`status`, `search`, date ranges, etc).

\## What survives on update vs what stays

\| Field | Behaviour |
\|---|---|
\| `display_name`, `metadata`, `tags` | Overwritten by PATCH |
\| `full_name`, `date_of_birth`, `portrait_image` | Read-only after a verified session (you can override via PATCH but it's logged as a manual override) |
\| Aggregate counters (`session_count`, `approved_count`, etc.) | Computed by Didit — never accept writes |
\| `features` map | Computed — never accept writes |

\## Failure modes

\- `409` on create — `vendor_data` exists; switch to PATCH.
\- `429` — rate limit; back off using `Retry-After`. Don't slam the API; insert 100ms+ between calls.
\- `400` — bad JSON or invalid country/status enum. Log the row and continue.
\- Partial failures: track `vendor_data` → status per row and retry only failures.

\## Console fallback

For one-off migrations bigger than 100K rows, the Business Console CSV import/export (Users → Import / Export) is fast and skips writing your own loop. The console runs the same validations and produces an error report.

\## Sources of truth

\- /management-api/users/create — POST /v3/users/create/ schema
\- /management-api/users/list — GET /v3/users/ pagination + filters
\- /entities/users/data-model — mutable vs read-only fields
\- /integration/rate-limiting — rate limits and Retry-After
\- /integration/integration-prompt — canonical end-to-end prompt````

\</pre>



      
      

Вставьте в

Business Console позволяет вашей команде массово управлять сущностями User без написания кода. Поддерживаются два процесса: **импорт из CSV** (массовое создание или обновление пользователей) и **экспорт в CSV** (выгрузка таблицы пользователей для внешних инструментов).> [!NOTE]
>
> Массовый импорт и экспорт здесь создают или обновляют только профили User. Они не восстанавливают исторические сессии KYC, предупреждения по документам, доказательства проверки живости и решения провайдеров. Для полной миграции с Sumsub, MetaMap, Veriff, Onfido, Persona или другого провайдера см. [Импорт данных от другого провайдера](https://docs.didit.me/ru/sessions-api/import-verifications.md).## Импорт пользователей из CSV### Когда использовать- **Миграция на старте** с другого KYC-провайдера: перенесите существующий список пользователей.
- **Миграция лиц от провайдера**: прикрепите доверенные изображения лиц к импортированным профилям User после создания записей.
- **Массовый онбординг** списка клиентов партнёра.
- **Заполнение метаданных задним числом**: обновите теги, уровень или внутренние идентификаторы у многих пользователей сразу.### Столбцы шаблонаСкачайте шаблон в разделе *Users → Import → Download template*. Столбцы:| Столбец | Обязательный | Описание |
| - | - | - |
| `vendor_data` | Да | Ваш идентификатор пользователя. Должен быть уникальным в пределах приложения. |
| `display_name` | Нет | Понятное имя, отображаемое в консоли. |
| `full_name` | Нет | Юридическое имя. Будет перезаписано данными из подтверждённой сессии. |
| `email` | Нет | Известный контактный адрес электронной почты. |
| `phone` | Нет | Известный контактный телефон (формат E.164). |
| `country` | Нет | Код страны по ISO 3166-1 alpha-3. |
| `status` | Нет | `ACTIVE`, `FLAGGED` или `BLOCKED`. По умолчанию `ACTIVE`. |
| `tags` | Нет | Теги, разделённые запятыми. |
| `metadata_json` | Нет | JSON в виде строки для пользовательских метаданных. |### Запуск импорта**1. Загрузите CSV**Перейдите в *Users → Import → Upload CSV* и выберите файл.**2. Проверьте предпросмотр**Консоль проверяет каждую строку. Некорректные строки выделяются с указанием причины ошибки (например, повторяющийся `vendor_data` или неверный код страны).**3. Запустите импорт**Didit обрабатывает строки асинхронно. Можно закрыть вкладку: ход выполнения отслеживается в разделе *Users → Import history*.**4. Проверьте результаты**После завершения импорта в истории отображаются количества созданных, обновлённых и пропущенных строк, а также отчёт об ошибках для скачивания.### Обновление или создание- Если `vendor_data` не существует, создаётся новый User.
- Если `vendor_data` уже существует, строка обновляет существующего User (поля профиля и метаданные).
- Агрегированные счётчики и верифицированные поля (`full_name`, `date_of_birth` из одобренных сессий) **никогда не перезаписываются** импортом.### Импорт лиц после создания пользователяCSV-импорт создаёт или обновляет строку User. Изображения лиц в CSV не включаются. Чтобы перенести биометрию лица от другого провайдера, загружайте каждое лицо после того, как целевой User уже существует:**1. Создайте или импортируйте User**Используйте CSV-импорт в консоли или вызовите [`POST /v3/users/create/`](https://docs.didit.me/ru/management-api/users/create) в цикле.**2. Прочитайте didit\_internal\_id**Получите User с помощью [`GET /v3/users/{vendor_data}/`](https://docs.didit.me/ru/management-api/users/get). Ответ содержит `didit_internal_id`.**3. Загрузите лицо**Вызовите [`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) с изображением лица в виде base64 без префикса.```bash theme={null}
curl -X POST https://verification.didit.me/v3/organization/$ORGANIZATION_ID/application/$APPLICATION_ID/vendor-users/by-id/$DIDIT_INTERNAL_ID/faces/upload/ \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image": "<base64-encoded-jpg-or-png>",
    "comment": "Imported from previous KYC provider"
  }'
```Лицо должно быть корректным изображением размером не более 2 МБ после декодирования и содержать обнаруживаемое лицо. Didit сохраняет его в профиле и индексирует для поиска дубликатов и поиска по лицу. Оно не добавляется в список блокировки лиц, если вы отдельно не используете endpoint [Загрузка лица в список](https://docs.didit.me/ru/management-api/lists/upload-face.md).## Экспорт пользователей в CSV### Когда использовать- **Аудит комплаенса**: передайте полную таблицу пользователей аудиторам.
- **Синхронизация с хранилищем данных**: периодическая выгрузка в вашу BI-систему.
- **Запросы SAR и регуляторов**: выгрузите отфильтрованные подмножества пользователей.### Запуск экспорта1. Перейдите в *Users → Export*.
2. Примените фильтры (статус, страна, диапазон дат, поиск).
3. Выберите столбцы (по умолчанию экспортируются все поля; можно исключить ненужные столбцы).
4. Отправьте запрос. Didit формирует экспорт асинхронно и отправляет подписанную ссылку для скачивания на электронную почту оператора, который запустил экспорт.> [!NOTE]
>
> В экспорт попадают только те данные, к которым у вашей роли есть доступ. COMPLIANCE\_OFFICER и выше могут экспортировать полную таблицу; роли DEVELOPER и READER имеют ограниченный экспорт.## Характеристики производительности| Операция | Типичный объём | Примечания |
| - | - | - |
| Импорт | До 100,000 строк | Большие файлы разбиваются на части на стороне сервера; интерфейс периодически запрашивает статус выполнения |
| Экспорт | До 1,000,000 строк | Большие экспорты передаются потоком в S3 и доставляются по подписанной ссылке |## Журнал аудитаКаждый импорт и экспорт фиксируется в [журнале аудита](https://docs.didit.me/ru/console/audit-logs.md):- Оператор, который его запустил.
- Количество строк (для импорта) или снимок фильтров (для экспорта).
- Временные метки и статус успешного выполнения или ошибки.## Следующие шаги> [card] [API создания пользователя](https://docs.didit.me/ru/management-api/users/create.md)
>
> Программное создание для импорта с помощью скриптов.> [card] [Загрузка лица пользователя](https://docs.didit.me/ru/management-api/users/upload-face.md)
>
> Прикрепление импортированных изображений лиц к профилям User.> [card] [Хранение данных](https://docs.didit.me/ru/console/data-retention.md)
>
> Как долго сохраняются импортированные данные.> [card] [Журналы аудита](https://docs.didit.me/ru/console/audit-logs.md)
>
> Просмотр истории импорта и экспорта.


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