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

# Benutzer importieren/exportieren: CSV-Massenoperationen

> Didit-Benutzer per CSV massenhaft importieren und die Benutzertabelle für externe Compliance-Tools exportieren. Verfügbar in der Business Console.



Prompt für Massenimport und -export von Benutzern
        Prompt in die Zwischenablage kopieren



      
      

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



      
      

Einfügen in

Mit der Business Console kann Ihr Team Benutzerentitäten in großer Zahl verwalten, ohne Code zu schreiben. Es werden zwei Abläufe unterstützt: **CSV-Import** (Benutzer in großer Menge anlegen oder aktualisieren) und **CSV-Export** (die Benutzertabelle für externe Tools extrahieren).> [!NOTE]
>
> Der Massenimport und -export dient hier nur dazu, Benutzerprofile zu erstellen oder zu aktualisieren. Historische KYC-Sitzungen, Dokumentwarnungen, Liveness-Nachweise und Entscheidungen von Anbietern werden dabei nicht neu angelegt. Für eine vollständige Migration von Sumsub, MetaMap, Veriff, Onfido, Persona oder einem anderen Anbieter siehe [Daten von einem anderen Anbieter importieren](https://docs.didit.me/de/sessions-api/import-verifications.md).## Benutzer aus CSV importieren### Wann Sie das verwenden sollten- **Erstmigration** von einem anderen KYC-Anbieter: Übernehmen Sie Ihren bestehenden Benutzerbestand.
- **Migration von Gesichtsdaten eines Anbieters**: Hängen Sie vertrauenswürdige Gesichtsbilder an die importierten Benutzerprofile an, nachdem die Zeilen angelegt wurden.
- **Massen-Onboarding** einer Kundenliste eines Partners.
- **Nachträgliches Befüllen von Metadaten**: Aktualisieren Sie Tags, Stufe oder interne Kennungen für viele Benutzer gleichzeitig.### VorlagenspaltenLaden Sie die Vorlage unter *Users → Import → Download template* herunter. Spalten:| Spalte | Pflichtfeld | Beschreibung |
| - | - | - |
| `vendor_data` | Ja | Ihre Kennung für den Benutzer. Muss innerhalb einer Anwendung eindeutig sein. |
| `display_name` | Nein | Lesbarer Name, der in der Console angezeigt wird. |
| `full_name` | Nein | Rechtlicher Name. Wird durch verifizierte Sitzungsdaten überschrieben. |
| `email` | Nein | Bekannte Kontakt-E-Mail-Adresse. |
| `phone` | Nein | Bekannte Kontakttelefonnummer (Format E.164). |
| `country` | Nein | Ländercode nach ISO 3166-1 Alpha-3. |
| `status` | Nein | `ACTIVE`, `FLAGGED` oder `BLOCKED`. Standardmäßig `ACTIVE`. |
| `tags` | Nein | Durch Kommas getrennte Tags. |
| `metadata_json` | Nein | Als String serialisiertes JSON für benutzerdefinierte Metadaten. |### Import ausführen**1. CSV hochladen**Öffnen Sie *Users → Import → Upload CSV* und wählen Sie Ihre Datei aus.**2. Vorschau prüfen**Die Console validiert jede Zeile. Ungültige Zeilen werden mit Fehlergründen markiert (z. B. doppelter `vendor_data` oder ungültiger Ländercode).**3. Import starten**Didit verarbeitet die Zeilen asynchron. Sie können den Tab schließen; den Fortschritt sehen Sie unter *Users → Import history*.**4. Ergebnisse prüfen**Sobald der Import abgeschlossen ist, zeigt die Verlaufsansicht die Anzahl der angelegten, aktualisierten und übersprungenen Zeilen sowie einen herunterladbaren Fehlerbericht.### Aktualisieren oder anlegen- Wenn ein `vendor_data` noch nicht existiert, wird ein neuer Benutzer angelegt.
- Wenn ein `vendor_data` bereits existiert, aktualisiert die Zeile den vorhandenen Benutzer (Profilfelder und Metadaten).
- Aggregierte Zähler und verifizierte Felder (`full_name`, `date_of_birth` aus genehmigten Sitzungen) werden durch Importe **niemals überschrieben**.### Gesichter nach der Benutzererstellung importierenDer CSV-Import legt die Benutzerzeile an oder aktualisiert sie. Gesichtsbilder sind in der CSV-Datei nicht enthalten. Um biometrische Gesichtsdaten von einem anderen Anbieter zu übernehmen, laden Sie jedes Gesicht hoch, nachdem der Ziel-Benutzer existiert:**1. Benutzer anlegen oder importieren**Verwenden Sie den CSV-Import in der Console oder rufen Sie [`POST /v3/users/create/`](https://docs.didit.me/de/management-api/users/create) in einer Schleife auf.**2. didit\_internal\_id auslesen**Rufen Sie den Benutzer mit [`GET /v3/users/{vendor_data}/`](https://docs.didit.me/de/management-api/users/get) ab. Die Antwort enthält `didit_internal_id`.**3. Gesicht hochladen**Rufen Sie [`POST /v3/organization/{organization_id}/application/{application_id}/vendor-users/by-id/{didit_internal_id}/faces/upload/`](https://docs.didit.me/de/management-api/users/upload-face) mit einem Base64-kodierten Gesichtsbild im Rohformat auf.```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"
  }'
```Das Gesicht muss ein gültiges Bild sein, nach der Dekodierung maximal 2 MB groß sein und ein erkennbares Gesicht enthalten. Didit speichert es im Profil und indexiert es für die Duplikaterkennung und die Gesichtssuche. Es wird nur dann in eine Gesichts-Sperrliste aufgenommen, wenn Sie zusätzlich den Endpoint [Gesicht zu einer Liste hochladen](https://docs.didit.me/de/management-api/lists/upload-face.md) verwenden.## Benutzer nach CSV exportieren### Wann Sie das verwenden sollten- **Compliance-Prüfungen**: Stellen Sie den vollständigen Benutzerbestand den Prüfern zur Verfügung.
- **Synchronisation mit dem Data Warehouse**: regelmäßiger Export in Ihre BI-Tools.
- **SAR-Anfragen und Anfragen von Aufsichtsbehörden**: Extrahieren Sie gefilterte Teilmengen von Benutzern.### Export ausführen1. Öffnen Sie *Users → Export*.
2. Wenden Sie Filter an (Status, Land, Datumsbereich, Suche).
3. Wählen Sie die Spalten aus. Standardmäßig sind alle Felder enthalten; Sie können Spalten entfernen, die Sie nicht benötigen.
4. Senden Sie den Export ab. Didit erstellt den Export asynchron und sendet einen signierten Download-Link per E-Mail an den anfragenden Bediener.> [!NOTE]
>
> Exporte enthalten nur Daten, die Ihre Rolle lesen darf. COMPLIANCE\_OFFICER und höhere Rollen können die vollständige Tabelle exportieren; die Rollen DEVELOPER und READER haben eingeschränkte Exporte.## Leistungsmerkmale| Vorgang | Typische Größenordnung | Hinweise |
| - | - | - |
| Import | Bis zu 100.000 Zeilen | Größere Dateien werden serverseitig in Blöcke aufgeteilt; die UI fragt den Fortschritt ab |
| Export | Bis zu 1.000.000 Zeilen | Größere Exporte werden nach S3 gestreamt und über eine signierte URL bereitgestellt |## Audit-TrailJeder Import und jeder Export wird im [Audit-Log](https://docs.didit.me/de/console/audit-logs.md) protokolliert:- Der Bediener, der ihn ausgelöst hat.
- Zeilenanzahl (Importe) bzw. Momentaufnahme der Filter (Exporte).
- Zeitstempel und Erfolgs- bzw. Fehlerstatus.## Nächste Schritte> [card] [API zum Anlegen von Benutzern](https://docs.didit.me/de/management-api/users/create.md)
>
> Programmatisches Anlegen für skriptgesteuerte Importe.> [card] [Benutzergesicht hochladen](https://docs.didit.me/de/management-api/users/upload-face.md)
>
> Importierte Gesichtsbilder an Benutzerprofile anhängen.> [card] [Datenaufbewahrung](https://docs.didit.me/de/console/data-retention.md)
>
> Wie lange importierte Daten gespeichert bleiben.> [card] [Audit-Logs](https://docs.didit.me/de/console/audit-logs.md)
>
> Import- und Export-Verlauf einsehen.


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