POST/v1/users/import
Importar usuarios desde CSV
users_import
Envíe un archivo CSV en el campo csv. La primera fila es el encabezado. El delimitador es , o ; y se detecta a partir del encabezado. La codificación es UTF-8 (se admite BOM), con hasta 1000 filas de datos.
Columnas: email (obligatoria; alias e-mail, mail, почта), name (display_name, имя), role (admin, editor, verifier, viewer; alias роль), groups (группы; separe varios grupos con | o ;, por clave o por nombre de un grupo normal), profile (data_profile, профиль; la clave del perfil de datos). Las columnas desconocidas se omiten y se enumeran en ignored_columns.
Con dry_run: true (predeterminado), devuelve una vista previa sin cambios: la acción y los errores de cada fila. En otro caso, se ejecutan las filas sin errores:
- invite: envía una invitación con el rol, el perfil y el nombre del archivo. Se envía un correo electrónico si el correo está configurado, y el enlace se devuelve en la respuesta.
- exists: ya existe un usuario con este correo electrónico. El usuario se añade a los grupos del archivo; el rol y el perfil no cambian.
- pending: ya hay una invitación a esta dirección pendiente de aceptación. Se le añaden los grupos del archivo.
Las filas con errores se omiten. Los usuarios invitados se unen a sus grupos cuando aceptan la invitación. create_groups crea los grupos normales que faltan; sin él, un grupo desconocido es un error de la fila. El límite de usuarios del plan y las licencias de la suscripción se comprueban para todas las invitaciones nuevas a la vez: si no alcanzan, no se ejecuta nada (402). El límite de invitaciones manuales (50 pendientes) no se aplica a las importaciones. Requiere el permiso ORG_MANAGE_USERS. Anota el evento users.import en el registro de auditoría y invitation.create por cada invitación.
Autenticación
Envíe una clave de API en el encabezado Authorization: Authorization: Bearer <clave>.
Parámetros de encabezado
Idempotency-KeystringClave para reintentar de forma segura una escritura: de 1 a 255 caracteres ASCII imprimibles; se recomienda un UUID v4 por operación lógica. Un reintento con la misma clave en un plazo de 24 horas no vuelve a ejecutar la operación: devuelve la respuesta guardada (estado, encabezados y cuerpo) con el encabezado
Idempotency-Replayed: true. La misma clave con otro método, otra ruta, otroContent-Typeu otro cuerpo devuelve409 api.idempotency_mismatch; mientras la primera solicitud sigue en curso,409 api.idempotency_in_progressconRetry-After: 1. Tras una respuesta 5xx o 429, la clave se libera y un reintento vuelve a ejecutar la operación. La clave se aplica a la organización y a quien llama a la API (clave de API, usuario o clave de fuente personalizada).length ≥ 1, length ≤ 255
Cuerpo de la solicitud
application/json
csvstringobligatorioContenido del archivo CSV en UTF-8.
length ≥ 1, length ≤ 2000000
dry_runbooleanSolo vista previa (predeterminado).
falseejecuta las filas sin errores.Predeterminado: true
default_rolestringRol para las filas sin columna
roleo con la celda vacía.Predeterminado: "viewer"
default_profilestring | nullPerfil de datos para las filas sin perfil. Si está vacío, se usa el perfil predeterminado de la organización (los administradores reciben acceso completo).
create_groupsbooleanCrear los grupos normales que faltan. Sin esta marca, un grupo desconocido es un error de la fila.
Predeterminado: false
ttl_daysintegerValidez de las invitaciones en días.
Predeterminado: 7≥ 1, ≤ 30
Respuestas
200Vista previa o resultado de la importación, fila por fila
Encabezados de la respuesta
RateLimit-PolicyLímites vigentes, en el formato del borrador del IETF
draft-ietf-httpapi-ratelimit-headers: elementos separados por comas"<name>";q=<quota>;w=<window in seconds>.keyes la frecuencia de solicitudes de la clave de API (la cuota es la ráfaga y la ventana es el tiempo que tarda en recargarse por completo; para una sesión esusery sin credenciales,ip);minute,dayymonthson las cuotas de la organización para el minuto, el día y el mes naturales en UTC.RateLimitLo que queda de cada límite de
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLímite de la entrada más estricta de
RateLimit-Policy(la que tiene menos solicitudes restantes).X-RateLimit-RemainingSolicitudes restantes del límite más estricto.
X-RateLimit-ResetSegundos hasta que se restablece el límite más estricto.
Idempotency-Replayedtruesignifica que la respuesta se reprodujo a partir de la guardada para estaIdempotency-Key: la operación no se volvió a ejecutar.
application/json
dry_runbooleanobligatoriototalintegerobligatorioNúmero de filas de datos del archivo.
delimiterstringobligatorioSeparador detectado a partir del encabezado.
columnsarray of stringobligatorioColumnas reconocidas en forma canónica (
email,name,role,groups,profile).ignored_columnsarray of stringobligatoriocreated_groupsarray of stringobligatorioGrupos creados durante la ejecución.
400La solicitud no es válida: el valor de un parámetro o el estado del objeto no permiten la acción (`detail` es un mensaje).
Encabezados de la respuesta
RateLimit-PolicyLímites vigentes, en el formato del borrador del IETF
draft-ietf-httpapi-ratelimit-headers: elementos separados por comas"<name>";q=<quota>;w=<window in seconds>.keyes la frecuencia de solicitudes de la clave de API (la cuota es la ráfaga y la ventana es el tiempo que tarda en recargarse por completo; para una sesión esusery sin credenciales,ip);minute,dayymonthson las cuotas de la organización para el minuto, el día y el mes naturales en UTC.RateLimitLo que queda de cada límite de
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLímite de la entrada más estricta de
RateLimit-Policy(la que tiene menos solicitudes restantes).X-RateLimit-RemainingSolicitudes restantes del límite más estricto.
X-RateLimit-ResetSegundos hasta que se restablece el límite más estricto.
application/json
401No se enviaron credenciales (ni una cookie de sesión ni una clave de API) o no se encontró la clave.
Encabezados de la respuesta
RateLimit-PolicyLímites vigentes, en el formato del borrador del IETF
draft-ietf-httpapi-ratelimit-headers: elementos separados por comas"<name>";q=<quota>;w=<window in seconds>.keyes la frecuencia de solicitudes de la clave de API (la cuota es la ráfaga y la ventana es el tiempo que tarda en recargarse por completo; para una sesión esusery sin credenciales,ip);minute,dayymonthson las cuotas de la organización para el minuto, el día y el mes naturales en UTC.RateLimitLo que queda de cada límite de
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLímite de la entrada más estricta de
RateLimit-Policy(la que tiene menos solicitudes restantes).X-RateLimit-RemainingSolicitudes restantes del límite más estricto.
X-RateLimit-ResetSegundos hasta que se restablece el límite más estricto.
application/json
402La organización ha alcanzado un límite del plan (tarjetas, almacenamiento o usuarios). `error.details` contiene `kind`, `limit` y `used`.
Encabezados de la respuesta
RateLimit-PolicyLímites vigentes, en el formato del borrador del IETF
draft-ietf-httpapi-ratelimit-headers: elementos separados por comas"<name>";q=<quota>;w=<window in seconds>.keyes la frecuencia de solicitudes de la clave de API (la cuota es la ráfaga y la ventana es el tiempo que tarda en recargarse por completo; para una sesión esusery sin credenciales,ip);minute,dayymonthson las cuotas de la organización para el minuto, el día y el mes naturales en UTC.RateLimitLo que queda de cada límite de
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLímite de la entrada más estricta de
RateLimit-Policy(la que tiene menos solicitudes restantes).X-RateLimit-RemainingSolicitudes restantes del límite más estricto.
X-RateLimit-ResetSegundos hasta que se restablece el límite más estricto.
application/json
403La acción no está permitida: el rol no es suficiente, no hay acceso a la colección o a la tarjeta, la solicitud se ejecuta en modo «View as», o la organización está suspendida o eliminada (`detail` es un objeto con `code: org_suspended | org_deleted`).
Encabezados de la respuesta
RateLimit-PolicyLímites vigentes, en el formato del borrador del IETF
draft-ietf-httpapi-ratelimit-headers: elementos separados por comas"<name>";q=<quota>;w=<window in seconds>.keyes la frecuencia de solicitudes de la clave de API (la cuota es la ráfaga y la ventana es el tiempo que tarda en recargarse por completo; para una sesión esusery sin credenciales,ip);minute,dayymonthson las cuotas de la organización para el minuto, el día y el mes naturales en UTC.RateLimitLo que queda de cada límite de
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLímite de la entrada más estricta de
RateLimit-Policy(la que tiene menos solicitudes restantes).X-RateLimit-RemainingSolicitudes restantes del límite más estricto.
X-RateLimit-ResetSegundos hasta que se restablece el límite más estricto.
application/json
413El cuerpo de la solicitud supera el tamaño permitido.
Encabezados de la respuesta
RateLimit-PolicyLímites vigentes, en el formato del borrador del IETF
draft-ietf-httpapi-ratelimit-headers: elementos separados por comas"<name>";q=<quota>;w=<window in seconds>.keyes la frecuencia de solicitudes de la clave de API (la cuota es la ráfaga y la ventana es el tiempo que tarda en recargarse por completo; para una sesión esusery sin credenciales,ip);minute,dayymonthson las cuotas de la organización para el minuto, el día y el mes naturales en UTC.RateLimitLo que queda de cada límite de
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLímite de la entrada más estricta de
RateLimit-Policy(la que tiene menos solicitudes restantes).X-RateLimit-RemainingSolicitudes restantes del límite más estricto.
X-RateLimit-ResetSegundos hasta que se restablece el límite más estricto.
application/json
422Error de validación: el cuerpo o los parámetros no coinciden con el esquema (`detail` es una lista de errores de validación), o el valor de un parámetro está fuera del rango permitido (`detail` es un mensaje).
Encabezados de la respuesta
RateLimit-PolicyLímites vigentes, en el formato del borrador del IETF
draft-ietf-httpapi-ratelimit-headers: elementos separados por comas"<name>";q=<quota>;w=<window in seconds>.keyes la frecuencia de solicitudes de la clave de API (la cuota es la ráfaga y la ventana es el tiempo que tarda en recargarse por completo; para una sesión esusery sin credenciales,ip);minute,dayymonthson las cuotas de la organización para el minuto, el día y el mes naturales en UTC.RateLimitLo que queda de cada límite de
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLímite de la entrada más estricta de
RateLimit-Policy(la que tiene menos solicitudes restantes).X-RateLimit-RemainingSolicitudes restantes del límite más estricto.
X-RateLimit-ResetSegundos hasta que se restablece el límite más estricto.
application/json
429Demasiadas solicitudes (`api.rate_limited`), se agotó la cuota de la organización para el minuto, el día o el mes (`api.quota_exceeded`; `error.details` contiene `quota`, `limit` y `reset_at`), se alcanzó el límite de la organización o el servicio de respuestas está ocupado (`answers.engine_busy`). Espere el tiempo indicado en el encabezado `Retry-After`.
Encabezados de la respuesta
Retry-AfterNúmero de segundos que hay que esperar antes de reintentar la solicitud.
RateLimit-PolicyLímites vigentes, en el formato del borrador del IETF
draft-ietf-httpapi-ratelimit-headers: elementos separados por comas"<name>";q=<quota>;w=<window in seconds>.keyes la frecuencia de solicitudes de la clave de API (la cuota es la ráfaga y la ventana es el tiempo que tarda en recargarse por completo; para una sesión esusery sin credenciales,ip);minute,dayymonthson las cuotas de la organización para el minuto, el día y el mes naturales en UTC.RateLimitLo que queda de cada límite de
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLímite de la entrada más estricta de
RateLimit-Policy(la que tiene menos solicitudes restantes).X-RateLimit-RemainingSolicitudes restantes del límite más estricto.
X-RateLimit-ResetSegundos hasta que se restablece el límite más estricto.
application/json
Códigos de error
Códigos que este endpoint puede devolver en error.code, además de los códigos generales de cualquier solicitud.
- 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
Reintentos seguros
Envíe un encabezado Idempotency-Key (por ejemplo, un UUID) con cada POST y PATCH. Un reintento con la misma clave en un plazo de 24 horas devuelve la respuesta guardada en lugar de volver a ejecutar la solicitud.
Límites de frecuencia
Las respuestas incluyen los encabezados RateLimit y RateLimit-Policy y los anteriores X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset. Una respuesta 429 lleva Retry-After en segundos: espere y vuelva a intentarlo.