POST/v1/users/import
Импортировать пользователей из CSV
users_import
Передайте файл CSV в поле csv. Первая строка — заголовок. Разделитель — , или ;, он определяется по заголовку. Кодировка — UTF-8 (BOM допускается), до 1000 строк данных.
Столбцы: email (обязателен; синонимы e-mail, mail, почта), name (display_name, имя), role (admin, editor, verifier, viewer; синоним роль), groups (группы; несколько групп разделяйте | или ;, по ключу или по названию обычной группы), profile (data_profile, профиль; ключ профиля доступа). Неизвестные столбцы пропускаются и перечисляются в ignored_columns.
С dry_run: true (по умолчанию) возвращает предпросмотр без изменений: действие и ошибки по каждой строке. Иначе строки без ошибок выполняются:
- invite: отправляет приглашение с ролью, профилем и именем из файла. Письмо отправляется, если настроена почта, а ссылка возвращается в ответе.
- exists: пользователь с этим адресом уже существует. Он добавляется в группы из файла; роль и профиль не меняются.
- pending: приглашение на этот адрес уже ждёт принятия. К нему добавляются группы из файла.
Строки с ошибками пропускаются. Приглашённые пользователи вступают в свои группы, когда принимают приглашение. create_groups создаёт недостающие обычные группы; без него неизвестная группа — ошибка строки. Лимит пользователей тарифа и места подписки проверяются сразу для всех новых приглашений: если их не хватает, ничего не выполняется (402). Лимит ручных приглашений (50 ожидающих) на импорт не распространяется. Нужно право ORG_MANAGE_USERS. Записывает в журнал аудита событие users.import, а для каждого приглашения — invitation.create.
Аутентификация
Передайте ключ API в заголовке Authorization: Authorization: Bearer <ключ>.
Параметры заголовков
Idempotency-KeystringКлюч для безопасного повтора записи: от 1 до 255 печатных символов ASCII; рекомендуется UUID v4 на каждую логическую операцию. Повтор с тем же ключом в течение 24 часов не выполняет операцию заново: он возвращает сохранённый ответ (статус, заголовки и тело) с заголовком
Idempotency-Replayed: true. Тот же ключ с другим методом, путём,Content-Typeили телом — ответ409 api.idempotency_mismatch; пока первый запрос ещё выполняется —409 api.idempotency_in_progressсRetry-After: 1. После ответа 5xx или 429 ключ освобождается, и повтор выполняет операцию заново. Ключ действует в пределах организации и вызывающей стороны (ключ API, пользователь или ключ своего источника).length ≥ 1, length ≤ 255
Тело запроса
application/json
csvstringобязательноСодержимое файла CSV в UTF-8.
length ≥ 1, length ≤ 2000000
dry_runbooleanТолько предпросмотр (по умолчанию).
falseвыполняет строки без ошибок.По умолчанию: true
default_rolestringРоль для строк без столбца
roleили с пустой ячейкой.По умолчанию: "viewer"
default_profilestring | nullПрофиль доступа для строк без профиля. Если пусто, используется профиль организации по умолчанию (администраторы получают полный доступ).
create_groupsbooleanСоздавать недостающие обычные группы. Без этого флага неизвестная группа — ошибка строки.
По умолчанию: false
ttl_daysintegerСрок действия приглашений в днях.
По умолчанию: 7≥ 1, ≤ 30
Ответы
200Предпросмотр или итог импорта по строкам
Заголовки ответа
RateLimit-PolicyДействующие лимиты в формате черновика IETF
draft-ietf-httpapi-ratelimit-headers: элементы через запятую"<name>";q=<quota>;w=<window in seconds>.key— частота запросов ключа API (квота — допустимый всплеск, окно — время до полного восстановления; для сессии этоuser, без учётных данных —ip);minute,dayиmonth— квоты организации на календарную минуту, день и месяц по UTC.RateLimitСколько осталось по каждому лимиту из
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛимит самой строгой записи в
RateLimit-Policy(той, где осталось меньше всего запросов).X-RateLimit-RemainingСколько запросов осталось в пределах самого строгого лимита.
X-RateLimit-ResetЧерез сколько секунд сбросится самый строгий лимит.
Idempotency-Replayedtrue— ответ воспроизведён из сохранённого для этогоIdempotency-Key: операция повторно не выполнялась.
application/json
dry_runbooleanобязательноtotalintegerобязательноЧисло строк данных в файле.
delimiterstringобязательноРазделитель, определённый по заголовку.
columnsarray of stringобязательноРаспознанные столбцы в каноническом виде (
email,name,role,groups,profile).ignored_columnsarray of stringобязательноcreated_groupsarray of stringобязательноГруппы, созданные при выполнении.
400Запрос неверен: значение параметра или состояние объекта не позволяет выполнить действие (`detail` — сообщение).
Заголовки ответа
RateLimit-PolicyДействующие лимиты в формате черновика IETF
draft-ietf-httpapi-ratelimit-headers: элементы через запятую"<name>";q=<quota>;w=<window in seconds>.key— частота запросов ключа API (квота — допустимый всплеск, окно — время до полного восстановления; для сессии этоuser, без учётных данных —ip);minute,dayиmonth— квоты организации на календарную минуту, день и месяц по UTC.RateLimitСколько осталось по каждому лимиту из
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛимит самой строгой записи в
RateLimit-Policy(той, где осталось меньше всего запросов).X-RateLimit-RemainingСколько запросов осталось в пределах самого строгого лимита.
X-RateLimit-ResetЧерез сколько секунд сбросится самый строгий лимит.
application/json
401Учётные данные не переданы (нет ни cookie сессии, ни ключа API) или ключ не найден.
Заголовки ответа
RateLimit-PolicyДействующие лимиты в формате черновика IETF
draft-ietf-httpapi-ratelimit-headers: элементы через запятую"<name>";q=<quota>;w=<window in seconds>.key— частота запросов ключа API (квота — допустимый всплеск, окно — время до полного восстановления; для сессии этоuser, без учётных данных —ip);minute,dayиmonth— квоты организации на календарную минуту, день и месяц по UTC.RateLimitСколько осталось по каждому лимиту из
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛимит самой строгой записи в
RateLimit-Policy(той, где осталось меньше всего запросов).X-RateLimit-RemainingСколько запросов осталось в пределах самого строгого лимита.
X-RateLimit-ResetЧерез сколько секунд сбросится самый строгий лимит.
application/json
402Организация достигла лимита тарифа (карточки, хранилище или пользователи). В `error.details` — `kind`, `limit` и `used`.
Заголовки ответа
RateLimit-PolicyДействующие лимиты в формате черновика IETF
draft-ietf-httpapi-ratelimit-headers: элементы через запятую"<name>";q=<quota>;w=<window in seconds>.key— частота запросов ключа API (квота — допустимый всплеск, окно — время до полного восстановления; для сессии этоuser, без учётных данных —ip);minute,dayиmonth— квоты организации на календарную минуту, день и месяц по UTC.RateLimitСколько осталось по каждому лимиту из
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛимит самой строгой записи в
RateLimit-Policy(той, где осталось меньше всего запросов).X-RateLimit-RemainingСколько запросов осталось в пределах самого строгого лимита.
X-RateLimit-ResetЧерез сколько секунд сбросится самый строгий лимит.
application/json
403Действие запрещено: недостаточно прав роли, нет доступа к коллекции или карточке, запрос выполняется в режиме «Смотреть как» либо организация приостановлена или удалена (`detail` — объект с `code: org_suspended | org_deleted`).
Заголовки ответа
RateLimit-PolicyДействующие лимиты в формате черновика IETF
draft-ietf-httpapi-ratelimit-headers: элементы через запятую"<name>";q=<quota>;w=<window in seconds>.key— частота запросов ключа API (квота — допустимый всплеск, окно — время до полного восстановления; для сессии этоuser, без учётных данных —ip);minute,dayиmonth— квоты организации на календарную минуту, день и месяц по UTC.RateLimitСколько осталось по каждому лимиту из
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛимит самой строгой записи в
RateLimit-Policy(той, где осталось меньше всего запросов).X-RateLimit-RemainingСколько запросов осталось в пределах самого строгого лимита.
X-RateLimit-ResetЧерез сколько секунд сбросится самый строгий лимит.
application/json
413Тело запроса больше допустимого размера.
Заголовки ответа
RateLimit-PolicyДействующие лимиты в формате черновика IETF
draft-ietf-httpapi-ratelimit-headers: элементы через запятую"<name>";q=<quota>;w=<window in seconds>.key— частота запросов ключа API (квота — допустимый всплеск, окно — время до полного восстановления; для сессии этоuser, без учётных данных —ip);minute,dayиmonth— квоты организации на календарную минуту, день и месяц по UTC.RateLimitСколько осталось по каждому лимиту из
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛимит самой строгой записи в
RateLimit-Policy(той, где осталось меньше всего запросов).X-RateLimit-RemainingСколько запросов осталось в пределах самого строгого лимита.
X-RateLimit-ResetЧерез сколько секунд сбросится самый строгий лимит.
application/json
422Ошибка проверки: тело или параметры не соответствуют схеме (`detail` — список ошибок проверки) либо значение параметра вне допустимого диапазона (`detail` — сообщение).
Заголовки ответа
RateLimit-PolicyДействующие лимиты в формате черновика IETF
draft-ietf-httpapi-ratelimit-headers: элементы через запятую"<name>";q=<quota>;w=<window in seconds>.key— частота запросов ключа API (квота — допустимый всплеск, окно — время до полного восстановления; для сессии этоuser, без учётных данных —ip);minute,dayиmonth— квоты организации на календарную минуту, день и месяц по UTC.RateLimitСколько осталось по каждому лимиту из
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛимит самой строгой записи в
RateLimit-Policy(той, где осталось меньше всего запросов).X-RateLimit-RemainingСколько запросов осталось в пределах самого строгого лимита.
X-RateLimit-ResetЧерез сколько секунд сбросится самый строгий лимит.
application/json
429Слишком много запросов (`api.rate_limited`), квота организации на минуту, день или месяц исчерпана (`api.quota_exceeded`; в `error.details` — `quota`, `limit` и `reset_at`), достигнут лимит организации или сервис ответов занят (`answers.engine_busy`). Подождите время, указанное в заголовке `Retry-After`.
Заголовки ответа
Retry-AfterСколько секунд подождать перед повтором запроса.
RateLimit-PolicyДействующие лимиты в формате черновика IETF
draft-ietf-httpapi-ratelimit-headers: элементы через запятую"<name>";q=<quota>;w=<window in seconds>.key— частота запросов ключа API (квота — допустимый всплеск, окно — время до полного восстановления; для сессии этоuser, без учётных данных —ip);minute,dayиmonth— квоты организации на календарную минуту, день и месяц по UTC.RateLimitСколько осталось по каждому лимиту из
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛимит самой строгой записи в
RateLimit-Policy(той, где осталось меньше всего запросов).X-RateLimit-RemainingСколько запросов осталось в пределах самого строгого лимита.
X-RateLimit-ResetЧерез сколько секунд сбросится самый строгий лимит.
application/json
Коды ошибок
Коды, которые эта операция может вернуть в error.code, помимо общих кодов любого запроса.
- 409api.idempotency_in_progress
- 400api.idempotency_key_invalid
- 409api.idempotency_mismatch
- 403auth.admin_required
- 401auth.not_authenticated
- 403api_keys.scope
- 402limits.users
- 402billing.seats_exceeded
- 400profiles.unknown
- 413users_import.too_many_rows
- 422users_import.csv_invalid
- 422users_import.no_email_column
- 422users_import.empty
- 422validation.failed
Безопасные повторы
Передавайте заголовок Idempotency-Key (например, UUID) с каждым POST и PATCH. Повтор с тем же ключом в течение 24 часов возвращает сохранённый ответ, а не выполняет запрос снова.
Лимиты частоты
В ответах есть заголовки RateLimit и RateLimit-Policy, а также прежние X-RateLimit-Limit, X-RateLimit-Remaining и X-RateLimit-Reset. В ответе 429 есть Retry-After в секундах: подождите и повторите запрос.