> ## 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 e Exportar Utilizadores: Operações em Massa CSV

> Importe e exporte utilizadores Didit por CSV, em massa, a partir da Business Console. Exporte a tabela completa para ferramentas de conformidade.



Prompt de importação e exportação de utilizadores em massa
        Copiar o prompt para a área de transferência



      
      

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



      
      

Colar em

A Business Console permite à sua equipa gerir em massa entidades de Utilizador sem escrever código. Há dois fluxos suportados: **importação CSV** (criar ou atualizar utilizadores em grande escala) e **exportação CSV** (extrair a tabela de utilizadores para ferramentas externas).> [!NOTE]
>
> A importação e exportação em massa aqui criam ou atualizam apenas perfis de Utilizador. Não recriam sessões KYC históricas, avisos de documentos, provas de vida nem decisões do fornecedor. Para uma migração completa a partir de Sumsub, MetaMap, Veriff, Onfido, Persona ou outro fornecedor, consulte [Importar dados de outro fornecedor](https://docs.didit.me/pt/sessions-api/import-verifications.md).## Importar utilizadores a partir de CSV### Quando usar- **Migração no primeiro dia** a partir de outro fornecedor de KYC: trazer a lista de utilizadores existente.
- **Migração de imagens faciais de fornecedor**: anexar imagens faciais fidedignas aos perfis de Utilizador importados, depois de as linhas serem criadas.
- **Onboarding em massa** da lista de clientes de um parceiro.
- **Preenchimento retroativo de metadados**: atualizar etiquetas, nível ou identificadores internos de muitos utilizadores de uma só vez.### Colunas do modeloTransfira o modelo em *Utilizadores → Importar → Transferir modelo*. Colunas:| Coluna | Obrigatório | Descrição |
| - | - | - |
| `vendor_data` | Sim | O seu identificador para o utilizador. Tem de ser único por aplicação. |
| `display_name` | Não | Nome legível apresentado na consola. |
| `full_name` | Não | Nome legal. Será substituído pelos dados da sessão verificada. |
| `email` | Não | Endereço de e-mail de contacto conhecido. |
| `phone` | Não | Número de telefone de contacto conhecido (formato E.164). |
| `country` | Não | Código de país ISO 3166-1 alfa-3. |
| `status` | Não | `ACTIVE`, `FLAGGED` ou `BLOCKED`. Predefinido: `ACTIVE`. |
| `tags` | Não | Etiquetas separadas por vírgulas. |
| `metadata_json` | Não | JSON serializado como texto para metadados personalizados. |### Executar a importação**1. Carregar o CSV**Aceda a *Utilizadores → Importar → Carregar CSV* e selecione o seu ficheiro.**2. Rever a pré-visualização**A consola valida cada linha. As linhas inválidas são realçadas com os motivos do erro (por exemplo, `vendor_data` duplicado ou código de país inválido).**3. Iniciar a importação**A Didit processa as linhas de forma assíncrona. Pode fechar o separador: o progresso é acompanhado em *Utilizadores → Histórico de importações*.**4. Rever os resultados**Quando a importação terminar, o histórico mostra o número de linhas criadas, atualizadas e ignoradas, além de um relatório de erros para transferir.### Atualizar ou criar- Se um `vendor_data` não existir, é criado um novo Utilizador.
- Se um `vendor_data` já existir, a linha atualiza o Utilizador existente (campos de perfil e metadados).
- Os contadores agregados e os campos verificados (`full_name`, `date_of_birth` das sessões aprovadas) **nunca são substituídos** por importações.### Importar imagens faciais depois de criar o utilizadorA importação CSV cria ou atualiza a linha do Utilizador. Não inclui imagens faciais no CSV. Para trazer dados biométricos faciais de outro fornecedor, carregue cada face depois de o Utilizador de destino existir:**1. Criar ou importar o Utilizador**Use a importação CSV da consola ou chame [`POST /v3/users/create/`](https://docs.didit.me/pt/management-api/users/create) num ciclo.**2. Ler o didit\_internal\_id**Obtenha o Utilizador com [`GET /v3/users/{vendor_data}/`](https://docs.didit.me/pt/management-api/users/get). A resposta inclui `didit_internal_id`.**3. Carregar a face**Chame [`POST /v3/organization/{organization_id}/application/{application_id}/vendor-users/by-id/{didit_internal_id}/faces/upload/`](https://docs.didit.me/pt/management-api/users/upload-face) com uma imagem facial em base64 não processada.```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"
  }'
```A face tem de ser uma imagem válida, com no máximo 2 MB após descodificação, e tem de conter um rosto detetável. A Didit guarda-a no perfil e indexa-a para deteção de duplicados e pesquisa facial. Não é adicionada a uma lista de bloqueio de faces, a menos que utilize separadamente o endpoint [Carregar face para lista](https://docs.didit.me/pt/management-api/lists/upload-face.md).## Exportar utilizadores para CSV### Quando usar- **Auditorias de conformidade**: entregar a tabela completa de utilizadores aos auditores.
- **Sincronização com um armazém de dados**: exportação periódica para as suas ferramentas de BI.
- **Pedidos de SAR ou de reguladores**: extrair subconjuntos filtrados de utilizadores.### Executar uma exportação1. Aceda a *Utilizadores → Exportar*.
2. Aplique filtros (estado, país, intervalo de datas, pesquisa).
3. Escolha as colunas (por predefinição, estão incluídos todos os campos; pode remover as colunas de que não precisa).
4. Submeta. A Didit gera a exportação de forma assíncrona e envia por e-mail uma ligação de transferência assinada ao operador que a pediu.> [!NOTE]
>
> As exportações incluem apenas os dados que a sua função tem permissão para ler. As funções COMPLIANCE\_OFFICER e superiores podem exportar a tabela completa; as funções DEVELOPER e READER têm exportações restritas.## Características de desempenho| Operação | Escala típica | Notas |
| - | - | - |
| Importação | Até 100.000 linhas | Os ficheiros maiores são divididos em blocos do lado do servidor; o progresso é consultado pela interface |
| Exportação | Até 1.000.000 de linhas | As exportações maiores são transmitidas para o S3 e entregues através de um URL assinado |## Registo de auditoriaCada importação e exportação fica registada no [registo de auditoria](https://docs.didit.me/pt/console/audit-logs.md):- O operador que a iniciou.
- Número de linhas (importações) / instantâneo dos filtros (exportações).
- Data e hora e estado de sucesso ou falha.## Próximos passos> [card] [API para criar utilizadores](https://docs.didit.me/pt/management-api/users/create.md)
>
> Criação programática para importações por script.> [card] [Carregar face do utilizador](https://docs.didit.me/pt/management-api/users/upload-face.md)
>
> Anexe imagens faciais importadas aos perfis de Utilizador.> [card] [Conservação de dados](https://docs.didit.me/pt/console/data-retention.md)
>
> Durante quanto tempo os dados importados são mantidos.> [card] [Registos de auditoria](https://docs.didit.me/pt/console/audit-logs.md)
>
> Consulte o histórico de importações e exportações.


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