Skip to Content

API Import ed Export Utenti

L’API Import ed Export Utenti consente operazioni massiva sugli utenti per scenari di migrazione, onboarding e backup. Gli amministratori possono importare utenti da file CSV o JSON ed esportare l’intera directory utenti in entrambi i formati.

Le operazioni di importazione vengono elaborate in modo asincrono. Dopo aver caricato un file, il job di importazione avanza attraverso vari stati mentre le righe vengono validate e gli utenti vengono creati. Anche le operazioni di esportazione sono asincrone — una volta completate, il file generato è disponibile per il download per 24 ore.

Importa Utenti

Carica File di Importazione

POST/api/users/importRequires: manage:users

Carica un file CSV o JSON contenente i record utente da importare. Il file viene validato e viene creato un job di importazione. L’elaborazione avviene in modo asincrono — interroga lo stato del job per monitorare il progresso. Dimensione massima del file: 10MB.

Corpo della richiesta — multipart/form-data

CampoTipoObbligatorioDescrizione
filefileSìFile CSV o JSON (max 10MB). L’estensione del file determina il formato

Risposta di successo

{ "ok": true, "data": { "id": "imp_abc123", "fileName": "users-batch-2025-02.csv", "format": "csv", "status": "PENDING", "totalRows": 150, "processedRows": 0, "successCount": 0, "errorCount": 0, "errors": [], "createdAt": "2025-02-18T10:00:00Z", "updatedAt": "2025-02-18T10:00:00Z" } }

Codici di errore

CodiceHTTPDescrizione
VALIDATION_ERROR400File mancante, formato non supportato, supera il limite di 10MB, o file vuoto
PARSE_ERROR400Il file non può essere analizzato (CSV malformato o struttura JSON non valida)

Elenca Job di Importazione

GET/api/users/importRequires: manage:users

Elenca tutti i job di importazione per il tenant. I job sono ordinati per data di creazione decrescente. Usalo per monitorare le importazioni in corso o rivedere la cronologia.

Parametri di query

ParametroTipoDescrizione
pageintegerNumero di pagina (default: 1)
limitintegerElementi per pagina (default: 20, max: 100)

Risposta di successo

{ "ok": true, "data": { "data": [ { "id": "imp_abc123", "fileName": "users-batch-2025-02.csv", "format": "csv", "status": "COMPLETED", "totalRows": 150, "processedRows": 150, "successCount": 142, "errorCount": 8, "createdAt": "2025-02-18T10:00:00Z", "updatedAt": "2025-02-18T10:05:00Z" } ], "pagination": { "page": 1, "limit": 20, "total": 3, "totalPages": 1 } } }

Recupera Dettaglio Job di Importazione

GET/api/users/import/[id]Requires: manage:users

Recupera informazioni dettagliate su un job di importazione, inclusi i dettagli degli errori per riga. Interroga questo endpoint mentre status è PENDING o PROCESSING.

Risposta di successo

{ "ok": true, "data": { "id": "imp_abc123", "fileName": "users-batch-2025-02.csv", "format": "csv", "status": "COMPLETED", "totalRows": 150, "processedRows": 150, "successCount": 142, "errorCount": 8, "errors": [ { "row": 12, "email": "[email protected]", "error": "Email already exists in this tenant" }, { "row": 34, "email": "invalid-email", "error": "Invalid email format" }, { "row": 56, "email": "[email protected]", "error": "Role 'super_admin' does not exist" } ], "createdAt": "2025-02-18T10:00:00Z", "updatedAt": "2025-02-18T10:05:00Z" } }

Codici di errore

CodiceHTTPDescrizione
NOT_FOUND404Il job di importazione non esiste

Progressione degli Stati

StatoDescrizione
PENDINGFile caricato e validato, in attesa di elaborazione
PROCESSINGLe righe vengono elaborate. processedRows si incrementa ad ogni riga
COMPLETEDTutte le righe elaborate con successo (errorCount è 0)
PARTIALTutte le righe elaborate ma alcune con errori (errorCount > 0, successCount > 0)
FAILEDElaborazione completamente fallita (corruzione del file, errore di sistema, o tutte le righe avevano errori)

Per importazioni di grandi dimensioni (500+ righe), l’elaborazione può richiedere diversi minuti. Interroga l’endpoint di dettaglio ogni 2-3 secondi per monitorare il progresso. Il campo processedRows si aggiorna in tempo reale.

Formati dei File di Importazione

Formato CSV

La prima riga deve essere una riga di intestazione con i nomi delle colonne. L’ordine delle colonne non ha importanza. Le colonne vengono abbinate per nome (senza distinzione tra maiuscole e minuscole).

email,firstName,lastName,roles,password [email protected],Jane,Doe,editor,SecurePass123! [email protected],Bob,Smith,"editor,viewer",AnotherPass456! [email protected],Alice,Johnson,admin, [email protected],Carol,Williams,,
  • Più ruoli sono separati da virgole tra virgolette: "editor,viewer"
  • Il campo password vuoto significa che l’utente deve usare il magic link o il reset password per impostarne uno
  • Il campo ruoli vuoto significa che l’utente viene creato senza ruoli assegnati

Formato JSON

Il file deve contenere un array JSON di oggetti utente al livello principale.

[ { "email": "[email protected]", "firstName": "Jane", "lastName": "Doe", "roles": ["editor"], "password": "SecurePass123!" }, { "email": "[email protected]", "firstName": "Bob", "lastName": "Smith", "roles": ["editor", "viewer"] } ]

Riferimento Campi

CampoTipoObbligatorioDescrizione
emailstringSìIndirizzo email dell’utente. Deve essere univoco nel tenant
firstNamestringNoNome dell’utente
lastNamestringNoCognome dell’utente
rolesstring/arrayNoNome/i dei ruoli da assegnare. Devono corrispondere ai ruoli esistenti nel tenant
passwordstringNoPassword iniziale. Deve soddisfare i requisiti di policy del tenant

Le password sono opzionali. Quando omesse, l’account utente viene creato senza password. L’utente deve usare il magic link o il flusso di reset password per impostare la propria password al primo accesso. Questo è l’approccio consigliato per le importazioni massiva.

Gestione degli Errori per Riga

Ogni riga viene elaborata indipendentemente. Se una riga fallisce la validazione, viene saltata e l’errore viene registrato. L’elaborazione continua con le righe rimanenti.

ErroreDescrizione
Email is requiredIl campo email è mancante o vuoto
Invalid email formatL’indirizzo email non è sintatticamente valido
Email already exists in this tenantUn utente con questa email esiste già
Role 'X' does not existIl nome del ruolo specificato non è stato trovato
Password does not meet minimum length requirementLa password è più corta del minimo configurato
Password does not meet complexity requirementsLa password non soddisfa i requisiti di complessità

Esporta Utenti

Avvia Esportazione

POST/api/users/exportRequires: manage:users

Avvia un’esportazione di tutti gli utenti nel tenant. L’esportazione viene eseguita in modo asincrono — interroga lo stato del job quando il file è pronto per il download.

Corpo della richiesta

{ "format": "csv" }
CampoTipoObbligatorioDescrizione
formatstringSìFormato di output: csv o json

Risposta di successo

{ "ok": true, "data": { "id": "exp_abc123", "format": "csv", "status": "PENDING", "totalUsers": 0, "createdAt": "2025-02-18T11:00:00Z", "expiresAt": "2025-02-19T11:00:00Z" } }

Le password non vengono mai incluse nelle esportazioni. Gli hash delle password sono non reversibili e vengono esclusi per ragioni di sicurezza. Gli utenti esportati importati in un altro tenant dovranno impostare nuove password.

Scarica File di Esportazione

GET/api/users/export/[id]/downloadRequires: manage:users

Scarica il file di esportazione generato. Il file è disponibile per 24 ore dopo il completamento dell’esportazione.

Intestazioni di risposta

Content-Type: text/csv (o application/json) Content-Disposition: attachment; filename="users-export-2025-02-18.csv"

Codici di errore

CodiceHTTPDescrizione
NOT_FOUND404Il job di esportazione non esiste
NOT_READY400L’esportazione è ancora in elaborazione
EXPIRED410Il file di esportazione è scaduto ed è stato eliminato

Campi Esportati

CampoColonna CSVChiave JSONDescrizione
EmailemailemailIndirizzo email dell’utente
NomefirstNamefirstNameNome dell’utente
CognomelastNamelastNameCognome dell’utente
RuolirolesrolesNomi dei ruoli separati da virgola (CSV) o array di stringhe (JSON)
Email VerificataemailVerifiedemailVerifiedSe l’email è stata verificata
AbilitatoisEnabledisEnabledSe l’account è attivo
Creato IlcreatedAtcreatedAtTimestamp di creazione account (ISO 8601)
Ultimo LoginlastLoginAtlastLoginAtTimestamp del login più recente (ISO 8601), o vuoto/null

I file di esportazione scadono dopo 24 ore e vengono eliminati definitivamente. Scarica il file prontamente dopo che la generazione è completata. Puoi sempre avviare una nuova esportazione se necessario.

Flusso di Migrazione

Una tipica migrazione tra tenant segue questo schema:

  1. Esporta gli utenti dal tenant sorgente tramite POST /api/users/export con formato json.
  2. Scarica il file di esportazione tramite GET /api/users/export/[id]/download.
  3. Opzionalmente modifica il file per aggiustare i ruoli o rimuovere utenti.
  4. Importa il file nel tenant di destinazione tramite POST /api/users/import.
  5. Monitora il job di importazione tramite GET /api/users/import/[id] finché lo stato non è COMPLETED o PARTIAL.
  6. Esamina eventuali errori a livello di riga nell’array errors.
  7. Notifica gli utenti importati di impostare le proprie password tramite magic link o reset password (poiché le password non vengono esportate).

Riferimento Permessi

PermessoDescrizione
manage:usersCarica file di importazione, avvia esportazioni, scarica file e visualizza la cronologia dei job

Le operazioni di import ed export vengono registrate nel log di audit con i tipi di evento user_import.created e user_export.created.


Correlati