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

# Importer et exporter des utilisateurs (CSV, en masse)

> Importez en masse des utilisateurs Didit via CSV et exportez toute la table vers vos outils de conformité, depuis la Business Console.



Prompt d'import et d'export en masse des utilisateurs
        Copier le prompt dans le presse-papiers



      
      

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



      
      

Coller dans

La Business Console vous permet de gérer en masse les entités User sans écrire de code. Deux flux sont disponibles : l'**import CSV** (créer ou mettre à jour des utilisateurs à grande échelle) et l'**export CSV** (extraire la table des utilisateurs pour des outils externes).> [!NOTE]
>
> L'import et l'export en masse ne créent ni ne mettent à jour que les profils utilisateur. Ils ne recréent pas les sessions KYC historiques, les avertissements liés aux documents, les preuves de vivacité ni les décisions des fournisseurs. Pour une migration complète depuis Sumsub, MetaMap, Veriff, Onfido, Persona ou tout autre fournisseur, consultez [Importer des données depuis un autre fournisseur](https://docs.didit.me/fr/sessions-api/import-verifications.md).## Importer des utilisateurs depuis un CSV### Quand l'utiliser- **Migration dès le premier jour** depuis un autre fournisseur KYC : importez votre liste d'utilisateurs existante.
- **Migration des visages depuis un fournisseur** : associez des images faciales fiables aux profils utilisateur importés, une fois les lignes créées.
- **Intégration en masse** de la liste de clients d'un partenaire.
- **Rétro-remplissage des métadonnées** : mettez à jour les tags, le niveau ou les identifiants internes de nombreux utilisateurs à la fois.### Colonnes du modèleTéléchargez le modèle depuis *Users → Import → Download template*. Colonnes :| Colonne | Obligatoire | Description |
| - | - | - |
| `vendor_data` | Oui | Votre identifiant pour l'utilisateur. Doit être unique par application. |
| `display_name` | Non | Nom lisible affiché dans la console. |
| `full_name` | Non | Nom légal. Sera écrasé par les données de session vérifiées. |
| `email` | Non | Adresse e-mail de contact connue. |
| `phone` | Non | Numéro de téléphone de contact connu (format E.164). |
| `country` | Non | Code pays ISO 3166-1 alpha-3. |
| `status` | Non | `ACTIVE`, `FLAGGED` ou `BLOCKED`. Valeur par défaut : `ACTIVE`. |
| `tags` | Non | Tags séparés par des virgules. |
| `metadata_json` | Non | JSON sérialisé en chaîne pour les métadonnées personnalisées. |### Lancer l'import**1. Téléverser le CSV**Rendez-vous dans *Users → Import → Upload CSV* et sélectionnez votre fichier.**2. Vérifier l'aperçu**La console valide chaque ligne. Les lignes invalides sont signalées avec le motif de l'erreur (par exemple, `vendor_data` en double ou code pays non valide).**3. Démarrer l'import**Didit traite les lignes de manière asynchrone. Vous pouvez fermer l'onglet : la progression est suivie dans *Users → Import history*.**4. Consulter les résultats**Une fois l'import terminé, l'historique affiche le nombre de lignes créées, mises à jour et ignorées, ainsi qu'un rapport d'erreurs téléchargeable.### Mise à jour ou création- Si un `vendor_data` n'existe pas, un nouvel utilisateur est créé.
- Si un `vendor_data` existe déjà, la ligne met à jour l'utilisateur existant (champs du profil et métadonnées).
- Les compteurs agrégés et les champs vérifiés (`full_name`, `date_of_birth` issus des sessions approuvées) ne sont **jamais écrasés** par les imports.### Importer les visages après la création des utilisateursL'import CSV crée ou met à jour la ligne utilisateur. Il n'inclut pas d'images de visage dans le CSV. Pour récupérer les données biométriques faciales d'un autre fournisseur, téléversez chaque visage une fois l'utilisateur cible créé :**1. Créer ou importer l'utilisateur**Utilisez l'import CSV de la console, ou appelez [`POST /v3/users/create/`](https://docs.didit.me/fr/management-api/users/create) dans une boucle.**2. Lire didit\_internal\_id**Récupérez l'utilisateur avec [`GET /v3/users/{vendor_data}/`](https://docs.didit.me/fr/management-api/users/get). La réponse contient `didit_internal_id`.**3. Téléverser le visage**Appelez [`POST /v3/organization/{organization_id}/application/{application_id}/vendor-users/by-id/{didit_internal_id}/faces/upload/`](https://docs.didit.me/fr/management-api/users/upload-face) avec une image de visage au format base64 brut.```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"
  }'
```Le visage doit être une image valide, de 2 Mo maximum une fois décodée, et contenir un visage détectable. Didit le stocke sur le profil et l'indexe pour la détection de doublons et la recherche faciale. Il n'est pas ajouté à une liste de blocage de visages, sauf si vous utilisez séparément l'endpoint [Upload face to list](https://docs.didit.me/fr/management-api/lists/upload-face.md).## Exporter des utilisateurs vers un CSV### Quand l'utiliser- **Audits de conformité** : transmettez la table complète des utilisateurs aux auditeurs.
- **Synchronisation avec un entrepôt de données** : export périodique vers vos outils de BI.
- **Demandes SAR ou de régulateurs** : extrayez des sous-ensembles filtrés d'utilisateurs.### Lancer un export1. Rendez-vous dans *Users → Export*.
2. Appliquez des filtres (statut, pays, plage de dates, recherche).
3. Choisissez les colonnes (par défaut, tous les champs ; vous pouvez retirer les colonnes dont vous n'avez pas besoin).
4. Soumettez. Didit génère l'export de manière asynchrone et envoie par e-mail un lien de téléchargement signé à l'opérateur qui l'a demandé.> [!NOTE]
>
> Les exports ne contiennent que les données que votre rôle est autorisé à lire. COMPLIANCE\_OFFICER et les rôles supérieurs peuvent exporter la table complète ; les rôles DEVELOPER et READER ont des exports restreints.## Caractéristiques de performance| Opération | Volume typique | Remarques |
| - | - | - |
| Import | Jusqu'à 100 000 lignes | Les fichiers plus volumineux sont découpés côté serveur ; la progression est interrogée par l'interface |
| Export | Jusqu'à 1 000 000 de lignes | Les exports plus volumineux sont diffusés vers S3 et livrés via une URL signée |## Piste d'auditChaque import et export est enregistré dans le [journal d'audit](https://docs.didit.me/fr/console/audit-logs.md) :- L'opérateur qui l'a déclenché.
- Le nombre de lignes (imports) ou l'instantané des filtres (exports).
- Les horodatages et l'état de réussite ou d'échec.## Étapes suivantes> [card] [API de création d'utilisateur](https://docs.didit.me/fr/management-api/users/create.md)
>
> Création programmatique pour les imports scriptés.> [card] [Téléverser le visage d'un utilisateur](https://docs.didit.me/fr/management-api/users/upload-face.md)
>
> Associez les images de visage importées aux profils utilisateur.> [card] [Conservation des données](https://docs.didit.me/fr/console/data-retention.md)
>
> Durée de conservation des données importées.> [card] [Journaux d'audit](https://docs.didit.me/fr/console/audit-logs.md)
>
> Consultez l'historique des imports et exports.


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