> ## 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 i exportar usuaris: operacions massives CSV

> Importa entitats d'usuari de Didit des de CSV i exporta la taula completa per a eines externes de compliment. Disponible a la Business Console.



Prompt d'importació / exportació massiva d'usuaris
        Copia el prompt al porta-retalls



      
      

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



      
      

Enganxa a

La Business Console permet al vostre equip gestionar en massa les entitats User sense escriure codi. S'admeten dos fluxos: **importació CSV** (crear o actualitzar usuaris a gran escala) i **exportació CSV** (extreure la taula d'usuaris per a eines externes).> [!NOTE]
>
> La importació i l'exportació massives aquí només creen o actualitzen perfils d'usuari (User). No recreen sessions KYC històriques, advertències de documents, evidències de prova de vida ni decisions del proveïdor. Per a una migració completa des de Sumsub, MetaMap, Veriff, Onfido, Persona o un altre proveïdor, consulteu [Importar dades d'un altre proveïdor](https://docs.didit.me/ca/sessions-api/import-verifications.md).## Importar usuaris des de CSV### Quan utilitzar-la- **Migració del primer dia** des d'un altre proveïdor de KYC: porteu el vostre cens d'usuaris existent.
- **Migració de dades facials del proveïdor**: adjunteu imatges facials fiables als perfils d'usuari importats després de crear les files.
- **Alta massiva** de la llista de clients d'un soci.
- **Emplenament retroactiu de metadades**: actualitzeu etiquetes, nivell o identificadors interns de molts usuaris alhora.### Columnes de la plantillaDescarregueu la plantilla des de *Users → Import → Download template*. Columnes:| Columna | Obligatòria | Descripció |
| - | - | - |
| `vendor_data` | Sí | El vostre identificador de l'usuari. Ha de ser únic dins de cada aplicació. |
| `display_name` | No | Nom llegible per a humans que es mostra a la consola. |
| `full_name` | No | Nom legal. Serà sobreescrit per les dades de la sessió verificada. |
| `email` | No | Adreça de correu electrònic de contacte coneguda. |
| `phone` | No | Número de telèfon de contacte conegut (format E.164). |
| `country` | No | Codi de país ISO 3166-1 alfa-3. |
| `status` | No | `ACTIVE`, `FLAGGED` o `BLOCKED`. Per defecte, `ACTIVE`. |
| `tags` | No | Etiquetes separades per comes. |
| `metadata_json` | No | JSON serialitzat per a metadades personalitzades. |### Executar la importació**1. Pujar el CSV**Aneu a *Users → Import → Upload CSV* i seleccioneu el fitxer.**2. Revisar la vista prèvia**La consola valida cada fila. Les files no vàlides es ressalten amb els motius de l'error (per exemple, `vendor_data` duplicat o codi de país no vàlid).**3. Iniciar la importació**Didit processa les files de manera asíncrona. Podeu tancar la pestanya: se'n fa el seguiment a *Users → Import history*.**4. Revisar els resultats**Quan acaba la importació, la vista d'historial mostra el recompte de files creades, actualitzades i omeses, i un informe d'errors descarregable.### Actualitzar o crear- Si un `vendor_data` no existeix, es crea un User nou.
- Si un `vendor_data` ja existeix, la fila actualitza l'User existent (camps del perfil i metadades).
- Els comptadors agregats i els camps verificats (`full_name`, `date_of_birth` de les sessions aprovades) **mai no són sobreescrits** per les importacions.### Importar cares després de crear els usuarisLa importació CSV crea o actualitza la fila de l'User. No inclou imatges facials al CSV. Per incorporar dades biomètriques facials d'un altre proveïdor, pugeu cada cara després que existeixi l'User de destí:**1. Crear o importar l'User**Utilitzeu la importació CSV de la consola o crideu [`POST /v3/users/create/`](https://docs.didit.me/ca/management-api/users/create) en un bucle.**2. Llegir didit\_internal\_id**Obteniu l'User amb [`GET /v3/users/{vendor_data}/`](https://docs.didit.me/ca/management-api/users/get). La resposta inclou `didit_internal_id`.**3. Pujar la cara**Crideu [`POST /v3/organization/{organization_id}/application/{application_id}/vendor-users/by-id/{didit_internal_id}/faces/upload/`](https://docs.didit.me/ca/management-api/users/upload-face) amb una imatge facial en base64 sense processar.```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"
  }'
```La cara ha de ser una imatge vàlida, de 2 MB com a màxim una vegada descodificada, i ha de contenir una cara detectable. Didit l'emmagatzema al perfil i l'indexa per a la detecció de duplicats i la cerca facial. No s'afegeix a una llista de bloqueig de cares, tret que utilitzeu per separat l'endpoint [Pujar cara a la llista](https://docs.didit.me/ca/management-api/lists/upload-face.md).## Exportar usuaris a CSV### Quan utilitzar-la- **Auditories de compliment**: lliureu la taula completa d'usuaris als auditors.
- **Sincronització amb un magatzem de dades**: volcat periòdic a les vostres eines de BI.
- **Sol·licituds de SAR o del regulador**: extraieu subconjunts filtrats d'usuaris.### Executar una exportació1. Aneu a *Users → Export*.
2. Apliqueu filtres (estat, país, interval de dates, cerca).
3. Trieu les columnes (per defecte són tots els camps; podeu eliminar les columnes que no necessiteu).
4. Envieu. Didit genera l'exportació de manera asíncrona i envia per correu electrònic un enllaç de descàrrega signat a l'operador que l'ha sol·licitada.> [!NOTE]
>
> Les exportacions només inclouen les dades que el vostre rol pot llegir. COMPLIANCE\_OFFICER i rols superiors poden exportar la taula completa; els rols DEVELOPER i READER tenen exportacions restringides.## Característiques de rendiment| Operació | Escala habitual | Notes |
| - | - | - |
| Importació | Fins a 100.000 files | Els fitxers més grans es divideixen en blocs al servidor; la UI consulta el progrés |
| Exportació | Fins a 1.000.000 de files | Les exportacions més grans es transmeten a S3 i es lliuren mitjançant un URL signat |## Registre d'auditoriaCada importació i exportació es registra al [registre d'auditoria](https://docs.didit.me/ca/console/audit-logs.md):- L'operador que l'ha activada.
- Recompte de files (importacions) / instantània dels filtres (exportacions).
- Marques de temps i estat d'èxit o fallada.## Propers passos> [card] [API per crear usuaris](https://docs.didit.me/ca/management-api/users/create.md)
>
> Creació programàtica per a importacions automatitzades.> [card] [Pujar la cara de l'usuari](https://docs.didit.me/ca/management-api/users/upload-face.md)
>
> Adjunteu les imatges facials importades als perfils d'usuari.> [card] [Conservació de dades](https://docs.didit.me/ca/console/data-retention.md)
>
> Quant de temps persisteixen les dades importades.> [card] [Registres d'auditoria](https://docs.didit.me/ca/console/audit-logs.md)
>
> Reviseu l'historial d'importacions i exportacions.


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