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

# Importar y exportar usuarios: operaciones masivas con CSV

> Importa usuarios de Didit en bloque desde CSV y exporta la tabla completa a herramientas de cumplimiento externas desde la Business Console.



Prompt para importar y exportar usuarios de forma masiva
        Copiar el prompt al portapapeles



      
      

\<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>



      
      

Pegar en

La Business Console permite a tu equipo gestionar entidades User de forma masiva sin escribir código. Se admiten dos flujos: **importación CSV** (crear o actualizar usuarios a escala) y **exportación CSV** (extraer la tabla de usuarios para herramientas externas).> [!NOTE]
>
> La importación y exportación masivas descritas aquí solo crean o actualizan perfiles de User. No recrea sesiones KYC históricas, advertencias de documentos, evidencias de detección de vida ni decisiones de proveedores. Para una migración completa desde Sumsub, MetaMap, Veriff, Onfido, Persona u otro proveedor, consulta [Importar datos desde otro proveedor](https://docs.didit.me/es/sessions-api/import-verifications.md).## Importar usuarios desde CSV### Cuándo usarla- **Migración inicial** desde otro proveedor de KYC: trae tu lista de usuarios existente.
- **Migración de rostros desde otro proveedor**: adjunta imágenes faciales de confianza a los perfiles de User importados una vez creadas las filas.
- **Onboarding masivo** de la lista de clientes de un socio.
- **Carga retroactiva de metadatos**: actualiza etiquetas, nivel o identificadores internos de muchos usuarios a la vez.### Columnas de la plantillaDescarga la plantilla desde *Users → Import → Download template*. Columnas:| Columna | Obligatoria | Descripción |
| - | - | - |
| `vendor_data` | Sí | Tu identificador para el usuario. Debe ser único por aplicación. |
| `display_name` | No | Nombre legible que se muestra en la consola. |
| `full_name` | No | Nombre legal. Se sobrescribirá con los datos de sesiones verificadas. |
| `email` | No | Correo electrónico de contacto conocido. |
| `phone` | No | Teléfono de contacto conocido (formato E.164). |
| `country` | No | Código de país ISO 3166-1 alfa-3. |
| `status` | No | `ACTIVE`, `FLAGGED` o `BLOCKED`. El valor predeterminado es `ACTIVE`. |
| `tags` | No | Etiquetas separadas por comas. |
| `metadata_json` | No | JSON serializado como cadena para metadatos personalizados. |### Ejecutar la importación**1. Sube el CSV**Ve a *Users → Import → Upload CSV* y selecciona tu archivo.**2. Revisa la vista previa**La consola valida cada fila. Las filas no válidas se resaltan con el motivo del error (p. ej., `vendor_data` duplicado o código de país no válido).**3. Inicia la importación**Didit procesa las filas de forma asíncrona. Puedes cerrar la pestaña: el progreso se registra en *Users → Import history*.**4. Revisa los resultados**Cuando termina la importación, la vista del historial muestra el número de filas creadas, actualizadas y omitidas, además de un informe de errores descargable.### Actualizar o crear- Si un `vendor_data` no existe, se crea un nuevo User.
- Si un `vendor_data` ya existe, la fila actualiza el User existente (campos del perfil y metadatos).
- Los contadores agregados y los campos verificados (`full_name`, `date_of_birth` de sesiones aprobadas) **nunca se sobrescriben** con las importaciones.### Importar rostros después de crear el usuarioLa importación CSV crea o actualiza la fila del User. No incluye imágenes faciales en el CSV. Para traer los datos biométricos faciales desde otro proveedor, sube cada rostro cuando el User de destino ya exista:**1. Crea o importa el User**Usa la importación CSV de la consola o invoca la API a través de [`POST /v3/users/create/`](https://docs.didit.me/es/management-api/users/create) en un bucle.**2. Lee didit\_internal\_id**Obtén el User con [`GET /v3/users/{vendor_data}/`](https://docs.didit.me/es/management-api/users/get). La respuesta incluye `didit_internal_id`.**3. Sube el rostro**Invoca la API a través de [`POST /v3/organization/{organization_id}/application/{application_id}/vendor-users/by-id/{didit_internal_id}/faces/upload/`](https://docs.didit.me/es/management-api/users/upload-face) con una imagen facial en base64 sin procesar.```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"
  }'
```El rostro debe ser una imagen válida, de 2 MB como máximo una vez decodificada, y contener un rostro detectable. Didit lo guarda en el perfil y lo indexa para la detección de duplicados y la búsqueda facial. No se añade a una lista de bloqueo de rostros a menos que uses por separado el endpoint [Subir rostro a una lista](https://docs.didit.me/es/management-api/lists/upload-face.md).## Exportar usuarios a CSV### Cuándo usarla- **Auditorías de cumplimiento**: entrega la tabla completa de usuarios a los auditores.
- **Sincronización con el almacén de datos**: volcado periódico en tus herramientas de BI.
- **Solicitudes de SAR o de reguladores**: extrae subconjuntos filtrados de usuarios.### Ejecutar una exportación1. Ve a *Users → Export*.
2. Aplica filtros (estado, país, rango de fechas, búsqueda).
3. Elige las columnas (de forma predeterminada se incluyen todos los campos; puedes quitar las que no necesites).
4. Envía la solicitud. Didit genera la exportación de forma asíncrona y envía por correo electrónico un enlace de descarga firmado al operador que la solicitó.> [!NOTE]
>
> Las exportaciones solo incluyen los datos que tu rol puede leer. COMPLIANCE\_OFFICER y los roles superiores pueden exportar la tabla completa; los roles DEVELOPER y READER tienen exportaciones restringidas.## Características de rendimiento| Operación | Escala habitual | Notas |
| - | - | - |
| Importación | Hasta 100,000 filas | Los archivos más grandes se dividen en fragmentos en el servidor; la interfaz consulta el progreso periódicamente |
| Exportación | Hasta 1,000,000 filas | Las exportaciones más grandes se transmiten a S3 y se entregan mediante una URL firmada |## Registro de actividadCada importación y exportación queda registrada en el [registro de auditoría](https://docs.didit.me/es/console/audit-logs.md):- El operador que la inició.
- Número de filas (importaciones) o instantánea de los filtros (exportaciones).
- Marcas de tiempo y estado de éxito o fallo.## Próximos pasos> [card] [API para crear usuarios](https://docs.didit.me/es/management-api/users/create.md)
>
> Creación programática para importaciones mediante scripts.> [card] [Subir el rostro del usuario](https://docs.didit.me/es/management-api/users/upload-face.md)
>
> Adjunta imágenes faciales importadas a los perfiles de usuario.> [card] [Retención de datos](https://docs.didit.me/es/console/data-retention.md)
>
> Cuánto tiempo se conservan los datos importados.> [card] [Registros de auditoría](https://docs.didit.me/es/console/audit-logs.md)
>
> Revisa el historial de importaciones y exportaciones.


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