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

# API de Obtenção de Sessão: Dados de Decisão KYC e KYB

> Obtenha as decisões completas de verificação KYC ou KYB com a Didit. Identidade, prova de vida, AML, registo e OCR numa só resposta. Inferência em menos de 2 s.



Prompt para obter a decisão da sessão
        Copiar o prompt para a área de transferência



      
      

\<pre>

\``Fetch the full decision for a Didit verification session.

Endpoint:
GET https://verification.didit.me/v3/session/{session_id}/decision/

Authentication:
Use the x-api-key header with your Didit API key. The key must hold the read:sessions privilege.

Path parameter:
\- session_id (UUID) — returned by POST /v3/session/. Didit resolves it as a User Verification session first, then as a Business Verification session — you do not need to know the kind in advance.

curl example:
curl https://verification.didit.me/v3/session/<SESSION_ID>/decision/ \
-H "x-api-key: <API_KEY>"

Response — top-level keys (both kinds share these):
\- session_id (UUID)
\- session_kind ("user" | "business") — discriminator, ALWAYS branch on this.
\- session_number (int)
\- session_url (string) — hosted URL.
\- status (string) — "Approved", "Declined", "In Review", "In Progress", "Not Started", "Expired", "Abandoned", "Kyc Expired", "Resubmitted", "Awaiting User".
\- workflow_id (workflow_version, workflow_type and workflow_version_id come only with ?include=events)
\- vendor_data, metadata, callback
\- features (string or array) — feature list the workflow runs.
\- expected_details — what you sent on create, if any.
\- created_at, expires_at (ISO 8601).
\- contact_details — { email, email_lang, send_notification_emails, phone }.
\- reviews — array of manual-review activity.
\- status_override ({ overridden_at, automatic_status } | null) — set when a reviewer changed the status by hand.
\- decision_trace — how the status was reached: status, decided_by (manual | automatic | investigator), decided_at, automatic_status, terminal_node_id, actor, warning_counts, status_warnings.
\- linked_records — same_face, earlier_verifications and networks summaries, or null.
\- biometric_retention ({ jurisdictions, deletes_at }) — the date the live biometric data of the session is deleted.
\- assignee, waiting_since, sla_due_at — the Console reviewer holding the session and its review clock; null unless the session is In Review.
\- database_validation_not_performed_reason — why a configured database validation produced no result, when database_validations is null.
\- geolocation_checks, geolocation_attempts — Location verification results and every attempt (see /core-technology/location-verification/report-location-verification).
\- shared_from_session, shared_from_session_number, sandbox_scenario, fraud_check — set only for imported sessions, sandbox scenarios and Fraud Check sessions.
\- full_session_video, full_session_video_recorded_at — only when your organization records full-session video.

Feature arrays — KYC only (session_kind: "user"):
\- id_verifications, liveness_checks, face_matches, nfc_verifications, poa_verifications, database_validations
\- `id_verifications[].barcodes` is always an array. Each entry preserves the reader output, including `type`, `position`, `data`, `data_raw`, and `side`; documents without barcode output return `[]`.
\- nfc_verifications[] items carry is_nfc_skipped (boolean) and skip_reason (string | null) alongside status/chip_data/authenticity — read the reason from the report when one exists. chip_protocol is "icao" or "jpki"; a Japan My Number Card read ("jpki") has its evidence under jpki (chain_valid, signature_valid, revocation_status, attributes, attributes_match_ocr) and null ICAO fields.
\- nfc_skip_reason (string | null), top level — why NFC did not run (USER_SKIPPED, DOCUMENT_WITHOUT_CHIP, CHIP_CERTIFICATE_UNAVAILABLE, DEVICE_WITHOUT_NFC, INTEGRATION_WITHOUT_NFC_ACCESS, MRZ_KEY_UNAVAILABLE, JPKI_UNAVAILABLE), including when the step was bypassed and nfc_verifications stays null.

Feature arrays — KYB only (session_kind: "business"):
\- registry_checks (includes company + officers + beneficial_owners + ownership_structure)
\- document_verifications
\- key_people_checks (officers + beneficial_owners + submitted parties + ubo_kyc_summary)

Shared by both kinds:
\- aml_screenings, phone_verifications, email_verifications, questionnaire_responses, ip_analyses, document_ai_documents
\- bank_verifications: Bank Verification results, one item per Bank Verification step. Read method: "open_banking" (bank sign-in) or "account_lookup" (account check), or a "microdeposits" or "statement" fallback; null until an account is evaluated. "none" when the person chose Continue without your bank before any attempt was evaluated. continued_without_bank: true when the person chose Continue without your bank, also after an evaluated attempt, whose verdict stands; continuation.reason says why (no_route, institution_unsupported, attempts_exhausted, person_choice). financial_data.not_collected lists the data an account check could not collect. See /core-technology/bank-verification/verification-methods and /core-technology/bank-verification/fallbacks.
\- signatures: E-signature results, one item per signer. Present only when the workflow has an E-signature step. Read status ("signed" means signed), verdict, signer, confirmation, certificate, timestamp, documents[] (sha256_original, sha256_signed, signed_file, fields[]) and evidence_file. See /core-technology/electronic-signature/report-electronic-signature.

V3 contract: feature arrays are ALWAYS plural arrays. If a feature was not run on the session, the field is absent or null — never a placeholder.

See /reference/data-models for the full schema (every nested field).

Handler pattern:
const decision = await (await fetch(url, { headers: { "x-api-key": API_KEY } })).json();
switch (decision.session_kind) {
case "user": return handleUserDecision(decision);
case "business": return handleBusinessDecision(decision);
}

Failure modes:
\- 404 — { "detail": "Not found." } when the session does not exist (both session types are checked) or belongs to a different application.
\- 403 — { "detail": "You do not have permission to perform this action." } when the key lacks read:sessions.
\- 401 — invalid API key.

When to call:
\- Eagerly after receiving a status.updated webhook (recommended pattern — see /integration/webhooks).
\- On-demand when your support agent or analyst opens the session in your dashboard.

Caching:
Decision payloads are mutable until the session reaches a terminal status. Cache only if you also subscribe to data.updated and status.updated webhooks.

For end-to-end Didit integration, paste in the full prompt at /integration/integration-prompt.``

\</pre>



      
      

Colar em

## Suporte a KYC e KYBEste endpoint funciona tanto para sessões de **Verificação de utilizadores (KYC)** como de **Verificação de empresas (KYB)**. A resposta inclui sempre um campo `session_kind` de nível superior:- `"user"`: sessão de **Verificação de utilizadores (KYC)**. A resposta contém `id_verifications`, `liveness_checks`, `face_matches`, `nfc_verifications`, `poa_verifications`, `database_validations`.
- `"business"`: sessão de **Verificação de empresas (KYB)**. A resposta contém `registry_checks`, `document_verifications`, `key_people_checks`.Os dois tipos partilham `aml_screenings`, `phone_verifications`, `email_verifications`, `questionnaire_responses`, `ip_analyses`, `document_ai_documents`, `bank_verifications`, `reviews`, `contact_details`, além dos campos comuns de nível superior (`session_id`, `session_number`, `session_url`, `status`, `workflow_id`, `vendor_data`, `metadata`, `callback`, `features`, `expected_details`, `created_at`, `expires_at`).A Didit procura o `session_id` nos dois tipos de sessão (primeiro nas sessões de Verificação de utilizadores, depois nas de Verificação de empresas) e devolve a que corresponder. Os UUIDs são únicos por aplicação, pelo que não há ambiguidade.Consulte a [visão geral das sessões](https://docs.didit.me/pt/sessions-api/overview.md) para ver a matriz completa de funcionalidades específicas de cada tipo.## Exemplos> [tab] Verificação de utilizadores (KYC)
>
> ```bash theme={null}
> curl https://verification.didit.me/v3/session/4c5c7f3a-1f82-4f3b-8d8e-1a8d2d2f9b7a/decision/ \
>   -H "x-api-key: YOUR_API_KEY"
> ```
>
> **Resposta (truncada):**
>
> ```json theme={null}
> {
>   "session_id": "4c5c7f3a-1f82-4f3b-8d8e-1a8d2d2f9b7a",
>   "session_kind": "user",
>   "session_number": 1024,
>   "session_url": "https://verify.didit.me/...",
>   "status": "APPROVED",
>   "workflow_id": "wf_kyc_standard",
>   "vendor_data": "user-42",
>   "features": "ID_VERIFICATION,LIVENESS,FACE_MATCH,AML",
>   "id_verifications": [
>     { "node_id": "feature_ocr_1", "status": "Approved", "document_type": "Passport", "full_name": "John Doe", "barcodes": [], "...": "..." }
>   ],
>   "liveness_checks": [
>     { "node_id": "feature_liveness_1", "status": "Approved", "score": 0.98 }
>   ],
>   "face_matches": [
>     { "node_id": "feature_face_match_1", "status": "Approved", "score": 0.94 }
>   ],
>   "aml_screenings": [
>     { "node_id": "feature_aml_1", "status": "Approved", "total_hits": 0, "score": 0 }
>   ],
>   "phone_verifications": [],
>   "email_verifications": [],
>   "questionnaire_responses": [],
>   "ip_analyses": [],
>   "reviews": [],
>   "contact_details": { "email": "alex.sample@example.com", "phone": null },
>   "expected_details": null,
>   "metadata": {},
>   "callback": null,
>   "created_at": "2026-04-16T10:00:00Z",
>   "expires_at": "2026-04-23T10:00:00Z"
> }
> ```> [tab] Verificação de empresas (KYB)
>
> ```bash theme={null}
> curl https://verification.didit.me/v3/session/bs-01HJX1.../decision/ \
>   -H "x-api-key: YOUR_API_KEY"
> ```
>
> **Resposta (truncada):**
>
> ```json theme={null}
> {
>   "session_id": "bs-01HJX1...",
>   "session_kind": "business",
>   "session_number": 89,
>   "session_url": "https://verify.didit.me/...",
>   "status": "APPROVED",
>   "workflow_id": "wf_kyb_standard",
>   "vendor_data": "biz-acme-001",
>   "features": ["KYB_REGISTRY", "KYB_COMPANY_AML", "KYB_DOCUMENTS", "KYB_KEY_PEOPLE"],
>   "registry_checks": [
>     {
>       "status": "Approved",
>       "node_id": "feature_kyb_registry",
>       "data_resolved": true,
>       "company": {
>         "uuid": "...",
>         "node_id": "feature_kyb_registry",
>         "status": "Approved",
>         "registry_status": "active",
>         "company_name": "Acme Corporation Limited",
>         "registration_number": "12345678",
>         "country_code": "GBR",
>         "company_type": "Private Limited",
>         "incorporation_date": "2010-05-14",
>         "registered_address": "1 Main Street, London EC1A 1AA, United Kingdom",
>         "tax_number": "SAMPLE-TAX-12345",
>         "risk_level": "LOW",
>         "verification_status": "verified",
>         "is_from_registry": true,
>         "fetch_status": "resolved",
>         "alternative_names": ["Acme Ltd"],
>         "nature_of_business": "Software publishing",
>         "registered_capital": "100000 GBP",
>         "website": "https://acme.example",
>         "email": "alex.sample@example.com",
>         "phone": "+15550101000",
>         "legal_entity_identifier": "529900XXXXXXXXXXXXX",
>         "financial_summary": {},
>         "officers": [
>           { "uuid": "...", "name": "Jane Doe", "role": "director", "nationality": "USA", "is_active": true, "kyc_status": "Approved", "kyc_session_url": "https://verify.didit.me/..." }
>         ],
>         "beneficial_owners": [
>           { "uuid": "...", "name": "John Smith", "entity_type": "person", "roles": ["ubo"], "ownership_min_shares": 40, "ownership_max_shares": 40, "kyc_status": "Pending", "effective_ownership_percent": 40.0 }
>         ],
>         "addresses": [],
>         "industries": [],
>         "accounts": [],
>         "registry_data": { },
>         "user_provided_data": { },
>         "confirmed_by_user_at": "2026-04-16T10:10:00Z",
>         "is_editable": false
>       },
>       "ownership_structure": { },
>       "warnings": []
>     }
>   ],
>   "aml_screenings": [
>     {
>       "node_id": "feature_kyb_company_aml",
>       "status": "Approved",
>       "total_hits": 0,
>       "score": 0,
>       "entity_type": "COMPANY",
>       "hits": []
>     }
>   ],
>   "document_verifications": [
>     {
>       "status": "Approved",
>       "node_id": "feature_kyb_documents",
>       "items": [
>         { "uuid": "...", "document_type": "certificate_of_incorporation", "status": "Approved", "file_url": "https://...", "ocr_data": { } }
>       ],
>       "groups": { "legal_presence": { "approved": 1, "pending": 0, "missing": 0 } },
>       "required_groups": ["legal_presence", "ownership_structure"],
>       "warnings": []
>     }
>   ],
>   "key_people_checks": [
>     {
>       "status": "Approved",
>       "node_id": "feature_kyb_key_people",
>       "officers": [
>         { "uuid": "...", "name": "Jane Doe", "role": "director", "kyc_status": "Approved", "kyc_session_url": "..." }
>       ],
>       "beneficial_owners": [
>         { "uuid": "...", "name": "John Smith", "roles": ["ubo"], "ownership_min_shares": 40, "ownership_max_shares": 40, "kyc_status": "Pending" }
>       ],
>       "registry": {
>         "officers": [
>           { "uuid": "...", "name": "Jane Doe", "role": "director", "kyc_status": "Approved" }
>         ],
>         "beneficial_owners": [
>           { "uuid": "...", "name": "John Smith", "roles": ["ubo"], "ownership_min_shares": 40, "kyc_status": "Pending" }
>         ]
>       },
>       "submitted": {
>         "parties": [
>           { "uuid": "...", "entity_type": "person", "name": "Alice Chen", "role": "ubo", "ownership_percent": 35.0, "requires_verification": true, "kyc_session_status": "Not Started", "kyc_session_url": "https://verify.didit.me/..." }
>         ]
>       },
>       "ubo_kyc_summary": {
>         "total": 2,
>         "approved": 1,
>         "flagged": 0,
>         "pending": 1
>       },
>       "warnings": []
>     }
>   ],
>   "phone_verifications": null,
>   "email_verifications": null,
>   "questionnaire_responses": null,
>   "ip_analyses": null,
>   "reviews": [],
>   "contact_details": { "email": "alex.sample@example.com", "email_lang": "en", "send_notification_emails": true, "phone": null },
>   "expected_details": null,
>   "metadata": {},
>   "callback": null,
>   "created_at": "2026-04-16T10:00:00Z",
>   "expires_at": "2026-04-23T10:00:00Z"
> }
> ```## Tratamento da resposta do seu lado```typescript theme={null}
const res = await fetch(`${BASE}/v3/session/${sessionId}/decision/`, {
  headers: { "x-api-key": API_KEY },
});
const decision = await res.json();

switch (decision.session_kind) {
  case "user":
    handleUserDecision(decision);
    break;
  case "business":
    handleBusinessDecision(decision);
    break;
}
```## Estado, rastreio da decisão e campos de revisãoCada decisão explica como o respetivo `status` foi atingido.| Campo | O que ler |
| - | - |
| `status_override` | `null` quando o estado é o automático. Depois de um revisor definir o estado manualmente, o valor é `{ overridden_at, automatic_status }`, em que `automatic_status` é o estado a que as verificações chegam. Use-o para distinguir uma aprovação manual de uma automática. |
| `decision_trace` | `status`, `decided_by` (`manual`, `automatic` ou `investigator`; `null` enquanto a sessão não tiver decisão), `decided_at`, `automatic_status`, `terminal_node_id`, `actor` (o revisor responsável por uma decisão manual), `warning_counts` por `log_type` mais `total`, e `status_warnings`, os avisos que definem o estado como `Declined` ou `In Review`. |
| `linked_records` | Um resumo do que mais está ligado à verificação: `same_face` (outras pessoas cujo rosto teve correspondência, e a correspondência mais próxima), `earlier_verifications` (uma contagem para a mesma pessoa) e `networks`. `null` quando não há nada a mostrar. |
| `assignee`, `waiting_since`, `sla_due_at` | O revisor da Console responsável pela sessão, desde quando está em espera e o prazo para a revisão. `waiting_since` e `sla_due_at` são `null` salvo se a sessão estiver `In Review` e a sua aplicação definir um prazo de revisão. |
| `database_validation_not_performed_reason` | `{ code, message }`, que explica por que razão uma Validação de base de dados configurada não produziu resultado. Permite distinguir «o registo confirmou» de «nada foi executado» quando `database_validations` é `null`. |
| `shared_from_session`, `shared_from_session_number` | A sessão de origem quando esta foi importada com `POST /v3/session/import-shared/`; caso contrário, `null`. |
| `sandbox_scenario` | O cenário com que a sessão de sandbox foi criada. |
| `full_session_video`, `full_session_video_recorded_at` | Um URL com validade limitada para a gravação e o momento em que foi feita. Devolvido apenas quando a sua organização grava vídeo da sessão completa. |## Conservação de dados biométricos`biometric_retention` está sempre presente. `deletes_at` é a data em que os dados biométricos ativos da sessão são eliminados, e `jurisdictions` lista os estados dos EUA cujas regras biométricas definem um limite de eliminação para a pessoa (`US` quando o estado é desconhecido). `deletes_at` é `null` quando ainda não se aplica nenhuma data.## Verificação de localizaçãoQuando o fluxo tem um passo de [Verificação de localização](https://docs.didit.me/pt/core-technology/location-verification/overview.md), a decisão inclui dois arrays. `geolocation_checks[]` tem um item por passo: a sua tentativa aceite, com o resultado, as coordenadas e a respetiva precisão, as verificações face à localização do IP e à morada registada, e os `warnings` do passo. `geolocation_attempts[]` lista todas as tentativas de todos os passos, das mais antigas para as mais recentes, com o momento em que cada uma foi recebida. Os fluxos sem o passo devolvem ambos como `null`. Todos os campos e resultados estão no [relatório de Verificação de localização](https://docs.didit.me/pt/core-technology/location-verification/report-location-verification.md).## Eventos de encaminhamento do fluxo`?include=events` acrescenta a cronologia de eventos da sessão. Para além das alterações de passo e de estado, um fluxo que encaminha através de nós de ramificação deixa um evento por cada decisão de encaminhamento. Assim, uma integração (ou a cronologia da Consola) consegue explicar porque é que uma sessão terminou num determinado resultado, sem ter de reproduzir manualmente o grafo do fluxo:| `event_type` | Quando é registado | `details` |
| - | - | - |
| `WORKFLOW_BRANCH_EVALUATED` | Um nó com condições de ramificação foi avaliado enquanto a sessão avançava (nós de ramificação, e nós de funcionalidade ou de webhook com ramificações) | `node_id`, `node_label`, `node_type`, `matched_branch_id` (a ramificação correspondente, ou `null` se nenhuma correspondeu), `fallback` (`true` quando nenhuma condição correspondeu e foi seguida a ligação predefinida do nó), `next_node_id`, `next_node_label` |
| `WORKFLOW_STATUS_NODE_REACHED` | Um nó de estado foi executado | `node_id`, `node_label`, `session_status` (o valor configurado, incluindo `Determine`), `resolved_session_status` (o valor a que foi resolvido), `feature_statuses` (`[{target, status}]`) |Ambos os eventos incluem `sent_at` em milissegundos, como todos os outros eventos, e não têm `component`, `feature_step` nem `step`: provêm do motor do fluxo, e não do dispositivo do utilizador. Uma ramificação "else" (uma ramificação sem condições) conta como ramificação correspondente; `fallback` só é `true` quando nada correspondeu. Os nós com uma única ligação de saída não tomam decisão e não deixam evento.A mesma estrutura também devolve `workflow_terminal_node_id`: o `node_id` do último nó de estado do fluxo registado que definiu um estado da sessão, ou `null` se não tiver sido registado nenhum ID de nó desse tipo. Trata-se da proveniência histórica do fluxo. As aprovações manuais, as recusas e os reenvios não o limpam; um nó de estado do fluxo posterior substitui-o. Por exemplo, se um fluxo encaminhar uma sessão para um nó *Em análise* e um revisor a aprovar mais tarde, o `status` atual é `Approved`, enquanto `workflow_terminal_node_id` continua a identificar o nó *Em análise*. Pode também continuar preenchido enquanto um reenvio está em curso. Para distinguir os resultados do fluxo das decisões manuais posteriores, consulte o `status` atual e as cronologias de eventos e de `activity_reviews`.```json theme={null}
{
  "event_type": "WORKFLOW_BRANCH_EVALUATED",
  "sent_at": 1789336414007,
  "details": {
    "node_id": "branch-d57da8aa",
    "node_label": "Credential required?",
    "node_type": "branch",
    "matched_branch_id": null,
    "fallback": true,
    "next_node_id": "status-6ba0bd0d",
    "next_node_label": "In Review"
  }
}
```## Submissões anteriores (`?include=resubmissions`)Um reenvio devolve o utilizador aos passos que selecionar e mantém o que esses passos devolveram antes.
`?include=resubmissions` acrescenta um array `resubmissions`, do mais antigo para o mais recente, com uma entrada por cada pedido de reenvio.
Cada entrada inclui os resultados que esse pedido substituiu, para que possa consultar sempre o que o utilizador submeteu anteriormente.
Funciona para sessões de utilizadores (KYC) e de empresas (KYB), e pode combiná-lo com eventos (`?include=events,resubmissions`).
Sem o parâmetro, a resposta não muda.| Campo | Descrição |
| - | - |
| `number` | 1 para o primeiro reenvio da sessão, 2 para o segundo, e assim sucessivamente. |
| `created_at` | Quando o reenvio foi pedido. |
| `previous_status` | O estado da sessão imediatamente antes do pedido. |
| `nodes` | Os passos do fluxo devolvidos ao utilizador (`[{node_id, feature}]`). |
| `reasons` | O motivo indicado para cada passo, identificado por `node_id`, ou `null`. |
| `requested_by` | Quem o pediu (`name`, `email`, `type`), ou `null`. |
| `results` | O que esses passos devolveram antes do pedido, com as mesmas chaves e a mesma estrutura dos resultados atuais (`id_verifications`, `nfc_verifications`, `liveness_checks`, `face_matches`, `poa_verifications`, `phone_verifications`, `email_verifications`, `aml_screenings`, `ip_analyses`, `database_validations`, `questionnaire_responses`, `document_ai_documents`, `geolocation_checks`; nas sessões de empresas, também `document_verifications`). Só aparecem as chaves dos passos que foram devolvidos. |Os resultados atuais (`id_verifications` e os restantes ao nível superior) descrevem sempre a submissão mais recente. Os passos que não foram devolvidos mantêm aí um único resultado.```json theme={null}
{
  "status": "In Review",
  "id_verifications": [{ "node_id": "feature_ocr", "status": "Approved" }],
  "resubmissions": [
    {
      "number": 1,
      "created_at": "2026-10-01T08:31:04.512Z",
      "previous_status": "In Review",
      "nodes": [{ "node_id": "feature_ocr", "feature": "OCR" }],
      "reasons": { "feature_ocr": "Passport photo too blurry" },
      "requested_by": { "name": "<reviewer name>", "email": "<reviewer email>", "type": "USER" },
      "results": {
        "id_verifications": [
          {
            "node_id": "feature_ocr",
            "status": "Declined",
            "warnings": [{ "risk": "IMAGE_TOO_BLURRY", "log_type": "error" }]
          }
        ]
      }
    }
  ]
}
```Eliminar uma sessão elimina os resultados de todas as submissões associadas a ela.## Métodos de verificação de identidadeCada item de `id_verifications[]` indica qual dos três [métodos de Verificação de identidade](https://docs.didit.me/pt/core-technology/id-verification/verification-methods.md) o produziu, para que consiga distinguir uma leitura de documento de uma consulta a um registo ou de um início de sessão com carteira, sem ter de adivinhar a partir dos campos que, por acaso, estão preenchidos:| Campo | Valor |
| - | - |
| `verification_method` | `document`, `id_lookup` ou `wallet` |
| `assurance` | `documentary`, `data_match` ou `cryptographic` |
| `wallet_provider` | ID da carteira do catálogo quando foi uma carteira a produzi-lo, caso contrário `null` |
| `id_lookup` | Prova do registo: origem, tentativas, comparação campo a campo e retrato do registo, ou `null` |
| `wallet_verification` | Prova da credencial: fornecedor, entidade emissora, nível de garantia, validade da assinatura, atributos partilhados, ou `null` |
| `fallback_from` | Motivo pelo qual um método que não é o de documento não concluiu o passo de identidade: o método, o motivo e se o utilizador recorreu à captura de documento ou foi recusado |Uma sessão de documento indica `document` e `documentary` e deixa os restantes campos como `null`, pelo que as integrações existentes não precisam de alterações. Os tipos de cada campo estão em [Modelos de dados](https://docs.didit.me/pt/reference/data-models.md#verificação-de-identidade).## Consentimento biométricoAs decisões de Verificação de utilizadores incluem um objeto `biometric_consent`: se a sessão exigiu consentimento biométrico explícito, o `trigger` que o exigiu, o `status` da resposta e a respetiva prova. Dois valores indicam que o consentimento não foi recolhido:| Campo | Valor | Significado |
| - | - | - |
| `status` + `reason` | `pending` + `BIOMETRIC_CONSENT_UNSUPPORTED_SDK` | Um SDK nativo anterior à versão 4.10.0, ou um que não tenha indicado a sua versão, captou um rosto sem o passo de consentimento. A sessão decorreu como antes. |
| `status` + `reason` | `declined` + `BIOMETRIC_CONSENT_DECLINED` | Foi registada uma recusa. A sessão fica `Declined` e os dados faciais foram eliminados. Nenhum ecrã da Didit oferece atualmente a opção de recusa. |Quando o passo aparece e o que significa cada valor estão descritos em [Consentimento biométrico](https://docs.didit.me/pt/getting-started/biometric-consent.md); todos os campos estão em [Modelos de dados](https://docs.didit.me/pt/reference/data-models.md#consentimento-biométrico).## Verificação bancáriaQuando o fluxo tem um passo de [Verificação bancária](https://docs.didit.me/pt/core-technology/bank-verification/verification-methods.md), a decisão inclui `bank_verifications[]`, em ambos os tipos de sessão: um item por passo, com o valor `null` até que um passo produza um.| Campo | O que ler |
| - | - |
| `status` | O veredicto do passo: `Approved`, `In Review`, `Declined`, `Not Finished` ou `Expired`. |
| `method` | Como a conta foi verificada: `open_banking` (início de sessão no banco), `account_lookup` (verificação da conta), `microdeposits` ou `statement`. Fica `null` até que uma conta seja avaliada, e `none` quando a pessoa continuou sem banco antes de qualquer tentativa ser avaliada. |
| `continued_without_bank`, `continuation` | Se a pessoa escolheu **Continue without your bank**, e porquê: `continuation.reason` é `no_route`, `institution_unsupported`, `attempts_exhausted` ou `person_choice`. Para `institution_unsupported`, `continuation.institution_name` indica o banco que a pessoa não conseguiu utilizar. |
| `ownership` | Como o titular da conta se compara com a identidade verificada: `result` é `match`, `partial_match` (uma correspondência próxima), `no_match`, `not_verifiable` ou `unknown`. |
| `account` | A conta verificada, mascarada. |
| `financial_data` | Saldos, transações e rendimentos, lidos apenas através do início de sessão no banco. `not_collected` lista os dados que o passo pediu e que o método não recolheu, por exemplo após uma verificação da conta. |
| `connection` | A tentativa mais recente: o seu estado, o banco, as tentativas gastas e um `reason_code`. |Para distinguir o início de sessão no banco da verificação da conta, leia `method`, e não `ownership.method`: `ownership.method` é a comparação de nomes que produziu a pontuação. Todos os campos estão no esquema `BankVerificationResult` da resposta deste endpoint.## Assinatura eletrónicaQuando o fluxo tem um passo de [Assinatura eletrónica](https://docs.didit.me/pt/core-technology/electronic-signature/overview.md), a decisão inclui `signatures[]`, em ambos os tipos de sessão. Há um item por signatário: um para uma Verificação de utilizadores e um por cada pessoa-chave que assina numa Verificação de empresas (KYB). Os fluxos sem este passo não devolvem de todo a chave.| Campo | O que ler |
| - | - |
| `status` | `signed` quando os documentos estiverem assinados. Qualquer outro valor significa que ainda não existe assinatura. |
| `verdict` | `Approved`, `In Review`, `Declined` ou `Not Finished`, definido pelas regras do passo. |
| `signer`, `identity_used` | Quem assinou e a identidade verificada associada ao signatário. |
| `confirmation`, `certificate`, `timestamp` | A confirmação com código de utilização única e a evidência criptográfica. |
| `documents[]` | Os hashes de cada documento, o seu estado, o caminho `signed_file` e os `fields[]` com os respetivos valores. |
| `evidence_file` | Caminho do PDF de prova do signatário. |Transfira os ficheiros a partir dos caminhos, com a sua chave de API. Consulte o [Relatório de assinatura eletrónica](https://docs.didit.me/pt/core-technology/electronic-signature/report-electronic-signature.md) para ver todos os campos.## Erros| Estado | Motivo |
| - | - |
| `404` | Não existe nenhuma sessão com esse `session_id` para esta aplicação (são verificados ambos os tipos de sessão). |
| `403` | Falta a permissão `read:sessions`. |
| `401` | Chave de API inválida. |## Relacionados- [Visão geral das sessões](https://docs.didit.me/pt/sessions-api/overview.md): distinção entre tipos de sessão e matriz de funcionalidades.
- [Esquema de resposta KYB](https://docs.didit.me/pt/business-verification/response-schema.md): referência campo a campo da decisão empresarial.
- [Estados de verificação](https://docs.didit.me/pt/integration/verification-statuses.md): máquina de estados partilhada pelos dois tipos.
- [Webhooks](https://docs.didit.me/pt/integration/webhooks.md): subscreva `status.updated` para sessões de Verificação de utilizadores e de Verificação de empresas (filtre por `session_kind`).
- [Métodos de verificação de identidade](https://docs.didit.me/pt/core-technology/id-verification/verification-methods.md): captura de documentos, consulta sem documento e carteiras de identidade digital, e o que cada um coloca na sessão.
- [Consentimento biométrico](https://docs.didit.me/pt/getting-started/biometric-consent.md): quando o fluxo pede consentimento biométrico explícito, e o objeto `biometric_consent`.
- [Relatório de assinatura eletrónica](https://docs.didit.me/pt/core-technology/electronic-signature/report-electronic-signature.md): `signatures[]`, os PDF assinados e as provas.
- [Métodos de verificação bancária](https://docs.didit.me/pt/core-technology/bank-verification/verification-methods.md): `bank_verifications[]` e o seu `method`.
- [Quando a pessoa não consegue verificar o banco](https://docs.didit.me/pt/core-technology/bank-verification/fallbacks.md): `continued_without_bank`, `continuation` e o resultado de cada motivo.


## OpenAPI

````yaml pt/openapi-25.json GET /v3/session/{sessionId}/decision/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de Verificação de identidade. Autentique-se com o cabeçalho x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/decision/:
    get:
      tags:
        - Sessions
      summary: Obter a decisão completa para uma sessão de verificação
      description: >-
        Obtenha o relatório de decisão completo para uma sessão de verificação —
        o `status` consolidado da sessão mais um relatório por funcionalidade de
        verificação que o fluxo executou. Este é o endpoint canónico de leitura
        para sessões de Verificação de utilizadores (KYC) e de Verificação de
        empresas (KYB): o mesmo caminho serve ambas, e o discriminador de nível
        superior `session_kind` indica que estrutura recebeu (`"user"` ou
        `"business"`).


        **Cada relatório de funcionalidade é um array no plural.** Os fluxos V3
        são grafos que podem executar a mesma funcionalidade mais do que uma
        vez, pelo que cada bloco (`id_verifications`, `nfc_verifications`,
        `liveness_checks`, `face_matches`, `poa_verifications`,
        `document_ai_documents`, `phone_verifications`, `email_verifications`,
        `aml_screenings`, `ip_analyses`, `database_validations`,
        `questionnaire_responses`) é um array JSON cujos itens contêm, cada um,
        um `node_id` que identifica o nó do grafo do fluxo que os gerou. Leia o
        NFC como `response.nfc_verifications[0]` — nunca como um campo `nfc` no
        singular. Um bloco é `null` até que o fluxo tenha executado essa
        funcionalidade pelo menos uma vez; as funcionalidades que o fluxo não
        inclui nunca aparecem com dados. Os resultados da Assinatura eletrónica
        estão em `signatures`, que só está presente quando o fluxo tem um passo
        de Assinatura eletrónica.


        **Quando chamar.** O padrão recomendado é orientado a eventos: aguarde
        pelo webhook `status.updated` emitido quando a sessão atinge uma decisão
        (`Approved`, `Declined`, `In Review`) e, em seguida, chame este endpoint
        uma vez para obter o relatório completo. O polling também funciona — o
        endpoint pode ser chamado em qualquer ponto do ciclo de vida da sessão e
        devolve os dados gerados até ao momento —, mas a abordagem de webhook
        seguido de obtenção é mais económica e rápida. Os URLs de multimédia na
        resposta (imagens de documentos, vídeos, PDFs) são ligações
        pré-assinadas de curta duração: obtenha-os prontamente ou volte a pedir
        a decisão para obter novos URLs, e não os persista como referências de
        longo prazo.


        **Estados.** O `status` de nível superior é o estado do ciclo de vida da
        sessão (`Not Started`, `In Progress`, `Awaiting User`, `In Review`,
        `Approved`, `Declined`, `Resubmitted`, `Expired`, `Kyc Expired`,
        `Abandoned`). Cada item de funcionalidade contém adicionalmente o seu
        próprio `status` ao nível da funcionalidade (`Not Finished`, `Approved`,
        `Declined`, `In Review`, ...). Uma sessão pode estar globalmente
        `Approved` enquanto uma funcionalidade individual está `In Review`,
        dependendo das regras de decisão do fluxo.


        **Autenticação e visibilidade.** Autentique-se com a chave de API da
        aplicação no cabeçalho `x-api-key` (um token Bearer de utilizador da
        consola com a permissão `read:sessions` também funciona). Apenas as
        sessões que pertencem à aplicação autenticada estão visíveis. Se o seu
        fluxo restringir atributos de resposta, os campos não permitidos dentro
        dos itens de funcionalidade são devolvidos como `null`, enquanto
        `status`, `warnings` e `node_id` são sempre preservados.


        **Limites de pedidos.** Os pedidos GET estão limitados a 600 por minuto
        por chave de API. Exceder o limite devolve `429` com os cabeçalhos
        `Retry-After` e `X-RateLimit-*`.
      operationId: get_v3_session_decision
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            UUID da sessão de verificação cuja decisão pretende obter. Este é o
            `session_id` retornado por `POST /v3/session/`. O mesmo caminho
            funciona para sessões de Verificação de utilizadores (KYC) e de
            Verificação de empresas (KYB) — o servidor resolve o ID em ambos os
            tipos de sessão.


            **Deve ser um UUID válido.** A rota apenas faz correspondência com
            UUIDs bem formatados, pelo que um valor mal formatado é rejeitado
            pelo router de URL antes da execução de qualquer código da aplicação
            e a resposta é uma página **HTML** de `404` em vez do envelope JSON
            `{"detail": ...}` apresentado abaixo. Valide o formato do UUID no
            lado do cliente para que possa distinguir um erro de introdução de
            dados de um verdadeiro `404` de sessão em falta.
          schema:
            type: string
            format: uuid
            example: 11111111-2222-3333-4444-555555555555
        - name: include
          in: query
          required: false
          description: >-
            Lista separada por vírgulas de secções adicionais do payload.
            Valores suportados: `events` e `resubmissions`, isolados ou em
            conjunto (`events,resubmissions`). Quando `include=events` é
            transmitido, a resposta contém adicionalmente a cronologia de
            eventos da sessão (`events`, incluindo os eventos de encaminhamento
            `WORKFLOW_BRANCH_EVALUATED` / `WORKFLOW_STATUS_NODE_REACHED`
            descritos na página Obter sessão), o registo de atividade completo
            (`activity_reviews`), indicadores de lista de bloqueio
            (`blocklisted`), um `cost_breakdown` por sessão, metadados do fluxo
            (`workflow_type`, `workflow_version`, `workflow_version_id` e
            `workflow_terminal_node_id` - o último nó de estado do fluxo
            registado que definiu um estado de sessão, ou `null` se nenhum tiver
            sido registado; proveniência histórica que não é limpa por
            aprovações manuais, recusas ou novos envios, sendo substituída por
            um nó de estado do fluxo posterior) e metadados da sessão
            (`api_service` — string ou `null`, definido apenas para sessões de
            API autónoma; `session_type` — `API`, `HOSTED` ou `MIGRATED`;
            `has_device_nfc_support` — booleano). Dois campos mudam em relação à
            estrutura simples: o discriminador `session_kind` de nível superior
            é **omitido** (a estrutura de eventos existe apenas para sessões de
            utilizador) e o array `features` passa de strings simples para
            objetos `{feature, node_id}` — onde a funcionalidade de e-mail é
            comunicada como `EMAIL` em vez de `EMAIL_VERIFICATION`. Esta
            estrutura expandida é utilizada principalmente pela consola da
            Didit; a maioria das integrações de API deve omitir o parâmetro.
            **Limitação de KYB:** `include=events` aplica-se apenas a sessões de
            utilizador (KYC). As sessões de empresas (`session_kind =
            "business"`) devolvem sempre a estrutura normal de decisão de
            empresa — `events`, `activity_reviews`, `blocklisted`,
            `cost_breakdown` e os metadados adicionais de `workflow_*`/sessão
            nunca são devolvidos para sessões de empresas, e o respetivo array
            `features` permanece um array simples de strings. Com
            `include=resubmissions` (tanto em sessões de utilizador como de
            empresas), a resposta também contém `resubmissions`: uma entrada por
            pedido de novo envio, do mais antigo para o mais recente, cada uma
            com `number`, `created_at`, `previous_status`, `nodes`, `reasons`,
            `requested_by` e `results` (o que os passos reenviados devolveram
            antes do pedido, sob as mesmas chaves e com a mesma estrutura dos
            resultados atuais). Cada item de `cost_breakdown` contém
            `usage_type`, `price`, `details` e `created_at`: um passo reenviado
            que seja executado novamente é faturado como um novo item.
          schema:
            type: string
            enum:
              - events
              - resubmissions
              - events,resubmissions
            example: events
      responses:
        '200':
          description: >-
            Relatório completo de decisão. `session_kind` distingue as duas
            estruturas: sessões `user` contêm os arrays de funcionalidades de
            KYC apresentados abaixo; sessões `business` contêm, em vez disso,
            `registry_checks`, `document_verifications` e `key_people_checks`
            juntamente com os arrays partilhados. Os arrays de funcionalidades
            são `null` até que o fluxo tenha executado essa funcionalidade; os
            URLs dos ficheiros multimédia são ligações pré-assinadas de curta
            duração.
          content:
            application/json:
              examples:
                Example:
                  summary: Exemplo completo
                  value:
                    session_id: 11111111-2222-3333-4444-555555555555
                    session_kind: user
                    session_number: 43762
                    session_url: >-
                      https://verify.didit.me/session/11111111-2222-3333-4444-555555555555
                    status: In Review
                    environment: live
                    workflow_id: 11111111-2222-3333-4444-555555555555
                    features:
                      - ID_VERIFICATION
                      - NFC
                      - LIVENESS
                      - FACE_MATCH
                      - POA
                      - PHONE
                      - DATABASE_VALIDATION
                      - AML
                      - IP_ANALYSIS
                    vendor_data: 11111111-1111-1111-1111-111111111111
                    metadata:
                      user_type: premium
                      account_id: ABC123
                    expected_details:
                      first_name: Carmen
                      last_name: Española Española
                    contact_details:
                      email: carmen@example.com
                      email_lang: es
                      send_notification_emails: false
                      phone: null
                    callback: https://verify.didit.me/
                    id_verifications:
                      - node_id: feature_ocr_1
                        status: Approved
                        document_type: Identity Card
                        document_subtype: ID_CARD_GENERIC
                        document_number: CAA000000
                        personal_number: 99999999R
                        portrait_image: https://<media-host>/portrait.jpg
                        front_image: https://<media-host>/front.jpg
                        front_video: https://<media-host>/front.mp4
                        back_image: https://<media-host>/back.jpg
                        back_video: https://<media-host>/back.mp4
                        full_front_image: https://<media-host>/full_front.jpg
                        full_back_image: https://<media-host>/full_back.jpg
                        front_image_camera_front: https://<media-host>/front_camera_front.jpg
                        back_image_camera_front: https://<media-host>/back_camera_front.jpg
                        date_of_birth: '1980-01-01'
                        age: 45
                        expiration_date: '2031-06-02'
                        date_of_issue: '2021-06-02'
                        issuing_state: ESP
                        issuing_state_name: Spain
                        first_name: Carmen
                        last_name: Española Española
                        full_name: Carmen Española Española
                        gender: F
                        address: Avda de Madrid 34, Madrid, Madrid
                        formatted_address: Avda de Madrid 34, Madrid, Madrid 28822, Spain
                        place_of_birth: Madrid
                        marital_status: Single
                        nationality: ESP
                        extra_fields:
                          dl_categories: []
                          blood_group: null
                        mrz:
                          surname: ESPANOLA ESPANOLA
                          name: CARMEN
                          country: ESP
                          nationality: ESP
                          birth_date: '800101'
                          expiry_date: '310602'
                          sex: F
                          document_type: ID
                          document_number: CAA000000
                          optional_data: 99999999R
                          optional_data_2: ''
                          birth_date_hash: '4'
                          expiry_date_hash: '8'
                          document_number_hash: '4'
                          final_hash: '1'
                          personal_number: 99999999R
                          warnings: []
                          errors: []
                          mrz_type: TD1
                          mrz_string: |-
                            IDESPCAA000000499999999R<<<<<<
                            8001014F3106028ESP<<<<<<<<<<<1
                            ESPANOLA<ESPANOLA<<CARMEN<<<<<
                          mrz_key: CAA000000480010143106028
                        parsed_address:
                          city: Madrid
                          label: Spain ID Card Address
                          region: Madrid
                          country: ES
                          category: Residential
                          street_1: Avda de Madrid 34
                          street_2: null
                          is_verified: true
                          postal_code: '28822'
                          raw_results:
                            types:
                              - street_address
                            geometry:
                              location:
                                lat: 37.4222804
                                lng: -122.0843428
                              viewport:
                                northeast:
                                  lat: 37.4237349802915
                                  lng: -122.083183169709
                                southwest:
                                  lat: 37.4210370197085
                                  lng: -122.085881130292
                              location_type: ROOFTOP
                            place_id: ChIJN1t_tDeuEmsRUsoyG83frY4
                            formatted_address: Avda de Madrid 34, 28822 Madrid, Spain
                            navigation_points:
                              - location:
                                  latitude: 37.4222804
                                  longitude: -122.0843428
                            address_components:
                              - types:
                                  - street_number
                                long_name: '34'
                                short_name: '34'
                              - types:
                                  - route
                                long_name: Avda de Madrid
                                short_name: Avda de Madrid
                              - types:
                                  - locality
                                  - political
                                long_name: Madrid
                                short_name: Madrid
                              - types:
                                  - country
                                  - political
                                long_name: Spain
                                short_name: ES
                              - types:
                                  - postal_code
                                long_name: '28822'
                                short_name: '28822'
                          address_type: Avda
                          document_location:
                            latitude: 37.4222804
                            longitude: -122.0843428
                          formatted_address: Avda de Madrid 34, 28822 Madrid, Spain
                        front_image_camera_front_face_match_score: 95.5
                        back_image_camera_front_face_match_score: 93.2
                        document_selfie_face_matches:
                          - session_id: 3f0c9a52-7b1e-4d68-a2c4-5e9d8b7f1a20
                            session_number: 1180
                            similarity_percentage: 97.4
                            vendor_data: user_ref_001
                            vendor_user_id: null
                            biometric_template_id: null
                            verification_date: '2026-09-02T09:15:00Z'
                            user_details:
                              full_name: Jane Doe
                            match_image_url: https://<media-host>/match_face.jpg
                            status: Approved
                            is_blocklisted: false
                            is_allowlisted: false
                            api_service: null
                            source: session
                        front_image_quality_score:
                          focus_score: 85.3
                          brightness_score: 92.1
                          brightness_issue: ok
                          is_document_fully_visible: true
                          resolution_score: 72.4
                          overall_score: 88.7
                        back_image_quality_score:
                          focus_score: 79.1
                          brightness_score: 90.5
                          brightness_issue: ok
                          is_document_fully_visible: true
                          resolution_score: 72.4
                          overall_score: 85.2
                        extra_files:
                          - https://<media-host>/extra_id_verification.jpg
                        matches:
                          - session_id: 7d4f1f60-9c2e-4b8a-8f3d-2a1b5c6d7e8f
                            session_number: 1234
                            vendor_data: user_ref_001
                            verification_date: '2024-06-15T10:30:00Z'
                            user_details:
                              name: John Smith
                              document_type: ID
                              document_number: CLM148418
                            status: Approved
                            is_blocklisted: false
                            api_service: null
                            front_image_url: https://<media-host>/document_front.jpg
                          - session_id: b2c8e4d1-6a3f-4e7b-95c0-1d8f2a6b4c9e
                            session_number: 1235
                            vendor_data: null
                            verification_date: '2024-05-20T14:45:00Z'
                            user_details:
                              name: John Smith
                              document_type: ID
                              document_number: CLM148418
                            status: Declined
                            is_blocklisted: true
                            api_service: ID_VERIFICATION
                            front_image_url: https://<media-host>/document_front_2.jpg
                        warnings:
                          - feature: ID_VERIFICATION
                            risk: QR_NOT_DETECTED
                            additional_data: null
                            log_type: information
                            short_description: QR not detected
                            long_description: >-
                              The system couldn't find or read the QR code on
                              the document, which is necessary for document
                              verification. This could be due to poor image
                              quality or an unsupported document type.
                            node_id: feature_ocr_1
                        verification_method: document
                        assurance: documentary
                        wallet_provider: null
                        fallback_from: null
                        id_lookup: null
                        wallet_verification: null
                        document_liveness:
                          portrait_replace:
                            score: 96.46
                            front: 96.46
                            back: 98.2
                            decline_threshold: 35
                            review_threshold: 70
                            bucket: approve
                          printed_copy:
                            score: 91.2
                            front: 91.2
                            back: 93.7
                            decline_threshold: 35
                            review_threshold: 77
                            bucket: approve
                          screen_replay:
                            score: 99.9
                            front: 99.9
                            back: 99.5
                            decline_threshold: 30
                            review_threshold: 70
                            bucket: approve
                      - node_id: feature_ocr_2
                        status: Approved
                        issuing_state: ZAF
                        issuing_state_name: South Africa
                        first_name: Thabo
                        last_name: Mokoena
                        full_name: Thabo Mokoena
                        date_of_birth: '1991-06-15'
                        personal_number: '9106155043088'
                        verification_method: id_lookup
                        assurance: data_match
                        wallet_provider: null
                        fallback_from: null
                        id_lookup:
                          source: Department of Home Affairs
                          checked_at: '2026-09-04T09:12:44Z'
                          attempts: 1
                          max_attempts: 2
                          outcome: match
                          comparison:
                            - field: identification_number
                              label: ID number
                              provided: '9106155043088'
                              record: '9106155043088'
                              result: match
                            - field: full_name
                              label: Full name
                              provided: Thabo Mokoena
                              record: Thabo Mokoena
                              result: match
                            - field: date_of_birth
                              label: Date of birth
                              provided: '1991-06-15'
                              record: '1991-06-15'
                              result: match
                          registry_portrait: https://<media-host>/registry_portrait.jpg
                          face_match_score: 96.4
                          source_errors: []
                        wallet_verification: null
                        warnings: []
                      - node_id: feature_ocr_3
                        status: Approved
                        issuing_state: DNK
                        issuing_state_name: Denmark
                        first_name: Freja
                        last_name: Nielsen
                        full_name: Freja Nielsen
                        date_of_birth: '1988-03-02'
                        verification_method: wallet
                        assurance: cryptographic
                        wallet_provider: mitid
                        fallback_from: null
                        id_lookup: null
                        wallet_verification:
                          provider: mitid
                          provider_name: MitID
                          issuing_authority: Danish Agency for Digital Government
                          issuing_country: DNK
                          credential_type: person_identification
                          level_of_assurance: substantial
                          verified_at: '2026-09-04T09:12:44Z'
                          signature_valid: true
                          attributes:
                            full_name: Freja Nielsen
                            date_of_birth: '1988-03-02'
                            cpr_alias: b0f1c2d3-e4f5-4678-9abc-def012345678
                          portrait: null
                          face_match_score: null
                        warnings: []
                    nfc_verifications:
                      - node_id: feature_nfc_1
                        status: In Review
                        is_nfc_skipped: false
                        skip_reason: null
                        chip_protocol: icao
                        jpki: null
                        portrait_image: https://<media-host>/portrait.jpg
                        signature_image: https://<media-host>/signature.jpg
                        chip_data:
                          document_type: ID
                          issuing_country: ESP
                          document_number: '123456789'
                          expiration_date: '2030-01-01'
                          first_name: John
                          last_name: Smith
                          birth_date: '1990-05-15'
                          gender: M
                          nationality: ESP
                          address: CALLE MAYOR 123 4B, MADRID, MADRID
                          place_of_birth: MADRID, MADRID
                        authenticity:
                          sod_integrity: true
                          dg_integrity: true
                        certificate_summary:
                          issuer: >-
                            Common Name: CSCA SPAIN, Serial Number: 3,
                            Organization: DIRECCION GENERAL DE LA POLICIA,
                            Country: ES
                          subject: >-
                            Common Name: DS n-eID SPAIN 2, Organizational Unit:
                            PASSPORT, Organization: DIRECCION GENERAL DE LA
                            POLICIA, Country: ES
                          serial_number: '118120836164494130086420187336801405660'
                          not_valid_after: '2031-02-18 10:21:11'
                          not_valid_before: '2020-11-18 10:21:11'
                        warnings:
                          - feature: NFC
                            risk: DATA_INCONSISTENT
                            additional_data: null
                            log_type: warning
                            short_description: OCR and NFC mrz code extracted are not the same
                            long_description: >-
                              The Optical Character Recognition (OCR) data and
                              the NFC chip data don't match, indicating
                              potential document tampering or data
                              inconsistency.
                            node_id: feature_nfc_1
                    liveness_checks:
                      - node_id: feature_liveness_1
                        status: Approved
                        method: ACTIVE_3D
                        score: 89.92
                        reference_image: https://<media-host>/reference.jpg
                        video_url: https://<media-host>/video.mp4
                        age_estimation: 24.3
                        matches:
                          - session_id: 7d4f1f60-9c2e-4b8a-8f3d-2a1b5c6d7e8f
                            session_number: 1234
                            vendor_data: user_ref_001
                            verification_date: '2024-06-15T10:30:00Z'
                            user_details:
                              full_name: John Smith
                              document_type: ID
                              document_number: CLM148418
                            status: Approved
                            is_blocklisted: false
                            is_allowlisted: false
                            api_service: null
                            source: session
                            match_image_url: https://<media-host>/face_match.jpg
                            similarity_percentage: 98.5
                          - session_id: 3e9a7c21-5b48-4f0e-9c6a-8d2f4b1e0a35
                            session_number: 1100
                            vendor_data: customer_xyz
                            verification_date: '2024-04-10T09:15:00Z'
                            user_details:
                              full_name: John Smith
                              document_type: P
                              document_number: DZ8375806
                            status: Approved
                            is_blocklisted: false
                            is_allowlisted: false
                            api_service: PASSIVE_LIVENESS
                            source: session
                            match_image_url: https://<media-host>/face_match_2.jpg
                            similarity_percentage: 95.2
                        warnings:
                          - feature: LIVENESS
                            risk: LOW_LIVENESS_SCORE
                            additional_data: null
                            log_type: information
                            short_description: Low liveness score
                            long_description: >-
                              The liveness check resulted in a low score,
                              indicating potential use of non-live facial
                              representations or poor-quality biometric data.
                            node_id: feature_liveness_1
                        face_quality: null
                        face_luminance: null
                    face_matches:
                      - node_id: feature_face_match_1
                        status: In Review
                        score: 65.43
                        source_image_session_id: null
                        source_image: https://<media-host>/source-image.jpg
                        target_image: https://<media-host>/target-image.jpg
                        warnings:
                          - feature: FACEMATCH
                            risk: LOW_FACE_MATCH_SIMILARITY
                            additional_data: null
                            log_type: warning
                            short_description: Low face match similarity
                            long_description: >-
                              The facial features of the provided image don't
                              closely match the reference image, suggesting a
                              potential identity mismatch.
                            node_id: feature_face_match_1
                    phone_verifications:
                      - node_id: feature_phone_1
                        status: Approved
                        phone_number_prefix: '+34'
                        phone_number: '600600600'
                        full_number: '+34600600600'
                        country_code: ES
                        country_name: Spain
                        carrier:
                          name: Orange
                          type: mobile
                        is_disposable: false
                        is_virtual: false
                        verification_method: sms
                        verification_attempts: 1
                        verified_at: '2024-07-28T06:47:35.654321Z'
                        lifecycle:
                          - type: PHONE_VERIFICATION_MESSAGE_SENT
                            timestamp: '2025-08-24T09:12:39.580554+00:00'
                            details:
                              status: Success
                              reason: null
                              channel: sms
                              actual_channel: sms
                            fee: 0.1
                          - type: VALID_CODE_ENTERED
                            timestamp: '2025-08-24T09:12:39.662157+00:00'
                            details:
                              code_tried: '123456'
                              status: Approved
                            fee: 0
                          - type: PHONE_VERIFICATION_APPROVED
                            timestamp: '2025-08-24T09:12:39.684292+00:00'
                            details: null
                            fee: 0
                        warnings: []
                        matches:
                          - session_id: null
                            session_number: null
                            vendor_data: null
                            verification_date: null
                            phone_number: '+34600000000'
                            status: null
                            is_blocklisted: true
                            api_service: null
                            source: list_entry
                    email_verifications:
                      - node_id: feature_email_1
                        status: Approved
                        email: test@example.com
                        is_breached: true
                        breaches:
                          - name: TAPAirPortugal
                            domain: flytap.com
                            logo_path: https://logos.example.com/TAPAirPortugal.png
                            breach_date: '2022-08-25'
                            description: >-
                              In August 2022, the Portuguese airline <a
                              href="https://www.bleepingcomputer.com/news/security/ragnar-locker-ransomware-claims-attack-on-portugals-flag-airline/"
                              target="_blank" rel="noopener">TAP Air Portugal
                              was the target of a ransomware attack perpetrated
                              by the Ragnar Locker gang</a> who later leaked the
                              compromised data via a public dark web site. Over
                              5M unique email addresses were exposed alongside
                              other personal data including names, genders,
                              DoBs, phone numbers and physical addresses.
                            is_verified: true
                            data_classes:
                              - dates_of_birth
                              - email_addresses
                              - genders
                              - names
                              - nationalities
                              - phone_numbers
                              - physical_addresses
                              - salutations
                              - spoken_languages
                            breach_emails_count: 6083479
                        is_disposable: false
                        is_undeliverable: false
                        verification_attempts: 1
                        verified_at: '2025-09-15T17:36:19.963451Z'
                        warnings:
                          - feature: EMAIL
                            risk: BREACHED_EMAIL_DETECTED
                            additional_data: null
                            log_type: information
                            short_description: Breached email detected
                            long_description: >-
                              This email address was found in one or more known
                              data breaches.
                            node_id: feature_email_1
                        lifecycle:
                          - type: EMAIL_VERIFICATION_MESSAGE_SENT
                            timestamp: '2025-09-15T17:36:19.792684+00:00'
                            details:
                              status: Success
                              reason: null
                            fee: 0.02
                          - type: VALID_CODE_ENTERED
                            timestamp: '2025-09-15T17:36:19.963427+00:00'
                            details:
                              code_tried: '123456'
                              status: Approved
                            fee: 0
                          - type: EMAIL_VERIFICATION_DECLINED
                            timestamp: '2025-09-15T17:36:20.081471+00:00'
                            details:
                              reason: BREACHED_EMAIL_DETECTED
                            fee: 0
                        matches:
                          - session_id: null
                            session_number: null
                            vendor_data: null
                            verification_date: null
                            email: test@example.com
                            status: null
                            is_blocklisted: true
                            api_service: null
                            source: list_entry
                    poa_verifications:
                      - node_id: feature_poa_1
                        status: Declined
                        document_file: https://<media-host>/poa_document.pdf
                        issuing_state: AR
                        document_type: UTILITY_BILL
                        document_subtype: null
                        document_language: es
                        document_metadata:
                          file_size: 1000
                          content_type: application/pdf
                          creation_date: '2021-01-01'
                          modified_date: '2021-01-01'
                          overlay_manipulation: null
                          creator: null
                          producer: PDF Generator
                          software: null
                          encryption: null
                          is_signed: false
                          is_tampered: false
                          signature_info: null
                          exif_original_date: null
                          exif_digitized_date: null
                          processed_by_known_editor: false
                          has_different_creation_mod_date: true
                        issuer: Aguas del Norte
                        issue_date: '2021-02-01'
                        expiration_date: null
                        poa_address: AVDA. MONSEÑOR TAVELLA N° 3396, SALTA
                        poa_formatted_address: Av. Monseñor Tavella 3396, A4400 Salta, Argentina
                        poa_parsed_address:
                          address_type: Avenida
                          street_1: Avenida Monseñor Tavella 3396
                          street_2: null
                          city: Salta
                          region: Salta
                          country: AR
                          postal_code: A4400
                          document_location:
                            latitude: -24.8208664
                            longitude: -65.4131
                        name_on_document: Fernando De Lima
                        name_match_score_expected_details: null
                        name_match_score_id_verification: 38.5
                        expected_details_address: null
                        expected_details_formatted_address: null
                        expected_details_parsed_address: {}
                        extra_fields:
                          bank_account_number: '1234567890'
                          bank_iban: null
                          bank_sort_code: null
                          bank_routing_number: null
                          bank_swift_bic: null
                          bank_branch_name: null
                          bank_branch_address: null
                          document_phone_number: '+5491112345678'
                          additional_names: []
                        extra_files:
                          - https://<media-host>/extra_poa.pdf
                        detected_codes:
                          - type: QR_CODE
                            page_number: 1
                            position:
                              - - 820
                                - 1120
                              - - 1002
                                - 1120
                              - - 1002
                                - 1302
                              - - 820
                                - 1302
                            x: 820
                            'y': 1120
                            width: 182
                            height: 182
                            page_width: 1190
                            page_height: 1684
                            raw_payload: >-
                              aHR0cHM6Ly9hZ3Vhc2RlbG5vcnRlLmNvbS9mYWN0dXJhLzk5ODgxMQ==
                            parsed_payload: https://aguasdelnorte.com/factura/998811
                          - type: CODE_128
                            page_number: 1
                            position:
                              - - 112
                                - 1480
                              - - 560
                                - 1480
                              - - 560
                                - 1540
                              - - 112
                                - 1540
                            x: 112
                            'y': 1480
                            width: 448
                            height: 60
                            page_width: 1190
                            page_height: 1684
                            raw_payload: MDA5OTg4MTEwMDA0Mg==
                            parsed_payload: '0099881100042'
                        warnings: []
                    document_ai_documents:
                      - status: Approved
                        node_id: feature_document_ai_1
                        items:
                          - uuid: c1a2b3c4-d5e6-7f80-9a1b-2c3d4e5f6071
                            node_id: feature_document_ai_1
                            document_key: proof_of_funds
                            original_filename: bank_statement.pdf
                            file_size: 184320
                            file_url: >-
                              https://<media-host>/document_ai/proof_of_funds.pdf
                            status: Approved
                            extracted_data:
                              account_holder: John Doe
                              balance: 15230.55
                              currency: EUR
                              statement_date: '2026-05-31'
                            detected_codes:
                              - type: QR_CODE
                                page_number: 2
                                position:
                                  - - 124
                                    - 86
                                  - - 306
                                    - 86
                                  - - 306
                                    - 268
                                  - - 124
                                    - 268
                                x: 124
                                'y': 86
                                width: 182
                                height: 182
                                page_width: 1190
                                page_height: 1684
                                raw_payload: SU5WLTIwMjYtMDA0Mg==
                                parsed_payload: INV-2026-0042
                            fields:
                              - key: account_holder
                                name: Account holder
                                instruction: Extract the full name of the account holder.
                                type: text
                                required: true
                              - key: balance
                                name: Closing balance
                                instruction: Extract the closing balance amount.
                                type: number
                                required: true
                            document_metadata:
                              is_tampered: false
                            cross_check_result: null
                            created_at: '2026-06-01T12:34:56Z'
                        warnings: []
                    questionnaire_responses:
                      - node_id: feature_questionnaire_1
                        questionnaire_id: 9f7485e0-b00b-4d56-9d3e-7859b68d1213
                        title: Source of Funds
                        description: >-
                          Reply to this questionnaire to help us understand the
                          source of funds.
                        languages:
                          - en
                        default_language: en
                        is_active: true
                        is_simple_questionnaire: true
                        questionnaire_group_id: 2b6a9d40-13a8-4b1e-9a6c-3f1d2e4b5a60
                        version: 1
                        published_at: '2025-11-02T09:14:55.000000Z'
                        sections:
                          - title: null
                            description: null
                            items:
                              - uuid: 618636d9-7d5c-41ce-b8d0-1ab2a4be20db
                                value: question_1
                                element_type: DROPDOWN
                                is_required: true
                                title: What is your primary source of funds?
                                description: null
                                placeholder: null
                                choices:
                                  - label: Salary
                                    value: salary
                                  - label: Business Income
                                    value: business_income
                                  - label: Savings
                                    value: savings
                                  - label: Investments
                                    value: investments
                                  - label: Sale of Asset
                                    value: sale_of_asset
                                  - label: Inheritance/Gift
                                    value: inheritance_gift
                                  - label: Pension
                                    value: pension
                                  - label: Crypto Proceeds
                                    value: crypto_proceeds
                                  - label: Other
                                    value: other
                                    requires_text_input: true
                                max_files: 1
                                answer:
                                  value: salary
                                required_if: null
                                repeatable_config: null
                              - uuid: 2d16b527-72be-42e0-8e96-b164b818386c
                                value: question_2
                                element_type: LONG_TEXT
                                is_required: true
                                title: Provide details of the primary source.
                                description: null
                                placeholder: null
                                choices: null
                                max_files: 1
                                answer:
                                  value: Test answer
                                required_if: null
                                repeatable_config: null
                              - uuid: a9239b7c-fbfb-4ea7-b7e4-c835cd4016e0
                                value: question_3
                                element_type: DROPDOWN
                                is_required: true
                                title: What is your annual income range (pre-tax)?
                                description: null
                                placeholder: null
                                choices:
                                  - label: Less than $25,000
                                    value: <25k
                                  - label: $25,000 - $50,000
                                    value: 25k-50k
                                  - label: $50,001 - $100,000
                                    value: 50k-100k
                                  - label: $100,001 - $250,000
                                    value: 100k-250k
                                  - label: More than $250,000
                                    value: '>250k'
                                max_files: 1
                                answer:
                                  value: <25k
                                required_if: null
                                repeatable_config: null
                              - uuid: 93dede62-6d0c-4a7f-934d-42175eb94011
                                value: question_4
                                element_type: DROPDOWN
                                is_required: true
                                title: What is your approximate net worth (range)?
                                description: null
                                placeholder: null
                                choices:
                                  - label: Less than $50,000
                                    value: <50k
                                  - label: $50,000 - $250,000
                                    value: 50k-250k
                                  - label: $250,001 - $1,000,000
                                    value: 250k-1m
                                  - label: $1,000,001 - $5,000,000
                                    value: 1m-5m
                                  - label: More than $5,000,000
                                    value: '>5m'
                                max_files: 1
                                answer:
                                  value: <50k
                                required_if: null
                                repeatable_config: null
                              - uuid: 2af60d6f-6961-4692-9ee7-24b3033610a6
                                value: question_5
                                element_type: LONG_TEXT
                                is_required: true
                                title: >-
                                  For your initial deposit/funding, indicate the
                                  exact source and amount.
                                description: null
                                placeholder: null
                                choices: null
                                max_files: 1
                                answer:
                                  value: Test answer
                                required_if: null
                                repeatable_config: null
                              - uuid: 0ad9d1aa-736f-46cf-947b-9e1241b53e40
                                value: question_6
                                element_type: LONG_TEXT
                                is_required: true
                                title: Breakdown of sources by percentage.
                                description: null
                                placeholder: null
                                choices: null
                                max_files: 1
                                answer:
                                  value: Test answer
                                required_if: null
                                repeatable_config: null
                              - uuid: 1bf8a2a3-14ee-48a8-bb3d-175481aae4aa
                                value: question_7
                                element_type: SINGLE_CHOICE
                                is_required: true
                                title: >-
                                  Will any funds originate from third parties?
                                  If yes, please provide details.
                                description: null
                                placeholder: null
                                choices:
                                  - label: 'Yes'
                                    value: 'yes'
                                    requires_text_input: true
                                  - label: 'No'
                                    value: 'no'
                                max_files: 1
                                answer:
                                  text: Additional details
                                  value: 'yes'
                                required_if: null
                                repeatable_config: null
                              - uuid: e18d4dd3-b7bf-4883-ba18-d6046adbe313
                                value: question_8
                                element_type: SINGLE_CHOICE
                                is_required: true
                                title: >-
                                  Do you hold or plan to use virtual assets
                                  (e.g., crypto) to fund this account? If yes,
                                  please provide details.
                                description: null
                                placeholder: null
                                choices:
                                  - label: 'Yes'
                                    value: 'yes'
                                    requires_text_input: true
                                  - label: 'No'
                                    value: 'no'
                                max_files: 1
                                answer:
                                  text: Additional details
                                  value: 'yes'
                                required_if: null
                                repeatable_config: null
                              - uuid: a90a073d-e098-404c-bbce-5130d8b12a13
                                value: question_9
                                element_type: FILE_UPLOAD
                                is_required: true
                                title: Upload a proof of funds document
                                description: >-
                                  You can upload your three (3) most recent bank
                                  statements, three (3) most recent payslips,
                                  your most recent tax return, proof of company
                                  ownership, trading exchange statement, sale of
                                  property, or proof of inheritance.
                                placeholder: null
                                choices: null
                                max_files: 3
                                answer:
                                  files:
                                    - /media/ocr/
                                    - /media/ocr/
                                required_if: null
                                repeatable_config: null
                              - uuid: 9503b486-7cb8-4c3b-a97d-4b64926a5a47
                                value: question_10
                                element_type: LONG_TEXT
                                is_required: false
                                title: >-
                                  Would you like to add any details to help us
                                  expedite our review of the documents you
                                  submitted?
                                description: null
                                placeholder: null
                                choices: null
                                max_files: 1
                                answer:
                                  value: Test answer
                                required_if: null
                                repeatable_config: null
                        status: Approved
                    aml_screenings:
                      - node_id: feature_aml_1
                        status: In Review
                        total_hits: 1
                        entity_type: person
                        hits:
                          - id: hit_7c1e9a40b2d35f86e0a4c912
                            url: https://news.example.org/articles/sample
                            match: false
                            score: 0.73
                            target: null
                            caption: Javier Ejemplo Modelo
                            datasets:
                              - PEP
                            features: null
                            rca_name: ''
                            last_seen: '2025-06-13T00:00:00'
                            risk_view:
                              crimes:
                                score: 0
                                weightage: 20
                                risk_level: Low
                                risk_scores: {}
                              countries:
                                score: 0
                                weightage: 30
                                risk_level: Low
                                risk_scores: {}
                              categories:
                                score: 100
                                weightage: 50
                                risk_level: High
                                risk_scores:
                                  PEP: 100
                              custom_list: {}
                            first_seen: '2025-01-18T00:00:00'
                            properties:
                              name:
                                - Javier Ejemplo Modelo
                              alias:
                                - Javier Ejemplo Modelo
                                - David Azagra
                              notes:
                                - Spanish orchestra conductor
                              title: null
                              gender:
                                - male
                              height: null
                              topics: null
                              weight: null
                              address: null
                              country: null
                              website: null
                              eyeColor: null
                              keywords: null
                              lastName:
                                - Ejemplo
                                - Modelo
                              position: null
                              religion: null
                              birthDate:
                                - '1974'
                              education:
                                - Tokyo Arts and Space (2012-2012)
                                - Saint Petersburg Conservatory (-2010)
                                - Comillas Pontifical University
                              ethnicity: null
                              firstName:
                                - David
                              hairColor: null
                              weakAlias: null
                              birthPlace:
                                - Madrid
                              modifiedAt: null
                              wikidataId: null
                              citizenship: null
                              nationality: null
                            match_score: 98
                            risk_score: 73
                            review_status: Unreviewed
                            score_breakdown:
                              name_score: 95
                              name_weight: 60
                              name_weight_normalized: 70.59
                              name_contribution: 67.06
                              dob_score: 100
                              dob_weight: 25
                              dob_weight_normalized: 29.41
                              dob_contribution: 29.41
                              country_score: 0
                              country_weight: 15
                              country_weight_normalized: 0
                              country_contribution: 0
                              document_number_match_type: NEUTRAL
                              document_number_effect: No document number provided for screening
                              total_score: 98
                            pep_matches:
                              - aliases:
                                  - Javier Ejemplo Modelo
                                  - David Azagra
                                education:
                                  - Tokyo Arts and Space (2012-2012)
                                  - Saint Petersburg Conservatory (-2010)
                                  - Comillas Pontifical University
                                list_name: Wikidata
                                publisher: Wikidata
                                source_url: https://news.example.org/articles/sample
                                description: >-
                                  Wikidata is the structured data project of the
                                  Wikipedia community, providing fact-based
                                  information edited by humans and machines
                                matched_name: Javier Ejemplo Modelo
                                pep_position: ''
                                date_of_birth: '1974'
                                other_sources: []
                                place_of_birth: Madrid
                            linked_entities:
                              - name:
                                  - Antonio Ejemplo
                                active: []
                                status: []
                                details: []
                                relation: []
                            warning_matches: []
                            sanction_matches: []
                            adverse_media_details:
                              sentiment: Moderately Negative
                              entity_type: person
                              sentiment_score: -2
                              adverse_keywords:
                                fraud: 3
                                juicio: 1
                                delitos: 2
                                imputado: 1
                                impunidad: 1
                                corruption: 2
                                favoritism: 2
                                privilegio: 1
                                corrupción: 1
                                persecution: 2
                                desconfianza: 1
                                desprestigio: 1
                                fraude de ley: 2
                                manipulación: 1
                                investigación: 3
                                prevaricación: 8
                                trato de favor: 1
                                irregularidades: 2
                                crisis de confianza: 1
                                tráfico de influencias: 8
                            adverse_media_matches:
                              - country: spain
                                summary: >-
                                  Javier Ejemplo is implicated in legal
                                  violations related to favoritism and influence
                                  trafficking, leading to a negative portrayal
                                  in the article.
                                headline: >-
                                  La Diputación de Villaejemplo consolida la
                                  plaza a medida para el ex asesor de Moncloa
                                  amigo del "hermanito" de Ejemplo
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - fraud
                                  - prevaricación
                                  - tráfico de influencias
                                  - irregularidades
                                  - imputado
                                sentiment_score: -2
                                publication_date: '2025-06-10T20:46:38'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo is implicated in legal issues
                                  regarding favoritism and corruption, leading
                                  to a negative portrayal in the article.
                                headline: >-
                                  La Diputación de Villaejemplo consolida la
                                  plaza a medida para el ex asesor de Moncloa
                                  amigo del "hermanito" de Ejemplo
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - fraud
                                  - prevaricación
                                  - tráfico de influencias
                                  - irregularidades
                                  - trato de favor
                                sentiment_score: -2
                                publication_date: '2025-06-10T20:46:38'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo Modelo is mentioned in
                                  connection with Carlos Ficticio's corruption
                                  case, indicating his involvement in alleged
                                  influence peddling.
                                headline: España, paraíso del aforado
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - prevaricación
                                  - tráfico de influencias
                                  - corrupción
                                  - impunidad
                                  - privilegio
                                  - desconfianza
                                  - manipulación
                                  - fraude de ley
                                sentiment_score: -2
                                publication_date: '2025-06-10T05:05:34'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo Modelo is implicated in the
                                  same investigation as Ficticio, which raises
                                  questions about his conduct and political
                                  ethics.
                                headline: 'Aforamientos: esa figura incómoda'
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - prevaricación
                                  - tráfico de influencias
                                  - investigación
                                  - juicio
                                  - fraude de ley
                                  - desprestigio
                                  - crisis de confianza
                                  - delitos
                                sentiment_score: -2
                                publication_date: '2025-06-08T06:01:00'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo is implicated in a legal
                                  investigation regarding irregularities in his
                                  hiring, which raises serious concerns about
                                  his conduct.
                                headline: >-
                                  La jueza del 'caso Javier Ejemplo' denuncia un
                                  «fraude de ley» en el aforamiento de Ficticio
                                  (Partido Ejemplo)
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - fraud
                                  - irregularities
                                  - prevaricación
                                  - tráfico de influencias
                                sentiment_score: -2
                                publication_date: '2025-06-09T10:19:10'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo Modelo is mentioned in
                                  connection with legal allegations of
                                  corruption, contributing to a negative
                                  perception.
                                headline: >-
                                  'Caso aforamiento': la letrada mayor de la
                                  Asamblea certifica a la juez que Ficticio es
                                  diputado desde antes de prometer su cargo en
                                  el Pleno
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - prevaricación
                                  - tráfico de influencias
                                sentiment_score: -2
                                publication_date: '2025-06-09T08:08:30'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo Modelo is implicated in the
                                  same investigation as Ficticio, raising
                                  concerns about political corruption and
                                  influence.
                                headline: 'Aforamientos: esa figura incómoda'
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - prevaricación
                                  - tráfico de influencias
                                  - investigación
                                sentiment_score: -2
                                publication_date: '2025-06-08T06:01:00'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo Modelo is implicated in the
                                  same investigation as Ficticio, which raises
                                  concerns about political misconduct.
                                headline: 'Aforamientos: esa figura incómoda'
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - prevaricación
                                  - tráfico de influencias
                                  - investigación
                                  - delitos
                                sentiment_score: -2
                                publication_date: '2025-06-08T06:00:59'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo is implicated in a case of
                                  favoritism and corruption, which casts a
                                  negative light on his character and actions.
                                headline: >-
                                  'Caso Javier Ejemplo': las asociaciones
                                  judiciales salen en defensa de la juez Luisa
                                  Inventada ante las "presiones externas" que
                                  sufre
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - favoritism
                                  - corruption
                                  - persecution
                                sentiment_score: -2
                                publication_date: '2025-06-06T10:08:15'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo is implicated in a case of
                                  alleged favoritism and corruption, which casts
                                  a negative light on his character and actions.
                                headline: >-
                                  'Caso Javier Ejemplo': las asociaciones
                                  judiciales salen en defensa de la juez Luisa
                                  Inventada ante las "presiones externas" que
                                  sufre
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - favoritism
                                  - corruption
                                  - persecution
                                sentiment_score: -2
                                publication_date: '2025-06-06T08:08:15'
                            additional_information: {}
                        score: 80
                        screened_data:
                          full_name: Javier Ejemplo Modelo
                          nationality: ES
                          date_of_birth: '1974-01-01'
                          document_number: null
                        is_ongoing_monitoring_enabled: true
                        next_ongoing_monitoring_bill_date: '2026-07-24'
                        last_ongoing_screening_at: '2026-09-12T04:03:11Z'
                        last_ongoing_screening_datasets_updated_at: '2026-09-11T06:00:00Z'
                        warnings:
                          - feature: AML
                            risk: POSSIBLE_MATCH_FOUND
                            additional_data: null
                            log_type: warning
                            short_description: Possible match found in AML screening
                            long_description: >-
                              The Anti-Money Laundering (AML) screening process
                              identified potential matches with watchlists or
                              high-risk databases, requiring further review.
                            node_id: feature_aml_1
                    ip_analyses:
                      - node_id: feature_ip_1
                        status: Approved
                        device_brand: Apple
                        device_model: iPhone
                        browser_family: Mobile Safari
                        os_family: iOS
                        platform: mobile
                        device_fingerprint: didit-fp-a1b2c3d4e5f6g7h8
                        ip_country: Spain
                        ip_country_code: ES
                        ip_state: Barcelona
                        ip_city: Barcelona
                        latitude: 41.4022
                        longitude: 2.1407
                        ip_address: 83.50.226.71
                        isp: null
                        organization: null
                        is_vpn_or_tor: false
                        is_data_center: false
                        time_zone: Europe/Madrid
                        time_zone_offset: '+0100'
                        ip:
                          location:
                            latitude: 40.2206327
                            longitude: 1.5770097
                          distance_from_id_document: 23.4
                          distance_from_poa_document: 12.3
                        id_document:
                          location:
                            latitude: 41.2706327
                            longitude: 1.9770097
                          distance_from_ip: 23.4
                          distance_from_poa_document: 18.7
                        poa_document:
                          location:
                            latitude: 41.2706327
                            longitude: 1.9770097
                          distance_from_ip: 12.3
                          distance_from_id_document: 18.7
                        warnings: []
                        matches:
                          - session_id: 99999999-8888-7777-6666-555555555555
                            session_number: 41205
                            vendor_data: 22222222-2222-2222-2222-222222222222
                            verification_date: '2024-07-20T10:15:30Z'
                            match_type: ip_address
                            match_source: ip_address
                            matched_value: 83.50.226.71
                            status: Approved
                            is_blocklisted: false
                            api_service: null
                            source: session
                            device_info:
                              device_brand: Apple
                              device_model: iPhone
                              browser_family: Mobile Safari
                              os_family: iOS
                              platform: mobile
                              device_fingerprint: didit-fp-f9e8d7c6b5a40312
                            location_info:
                              ip_address: 83.50.226.71
                              ip_country: Spain
                              ip_country_code: ES
                              ip_state: Barcelona
                              ip_city: Barcelona
                              is_vpn_or_tor: false
                              is_data_center: false
                            confidence: 0
                            match_mode: co_occurrence
                          - session_id: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
                            session_number: 42830
                            vendor_data: 33333333-3333-3333-3333-333333333333
                            verification_date: '2024-06-30T18:22:05Z'
                            match_type: device_fingerprint
                            match_source: recovered_high
                            matched_value: f47ac10b-58cc-4372-a567-0e02b2c3d479
                            status: Declined
                            is_blocklisted: false
                            api_service: null
                            source: session
                            device_info:
                              device_brand: Samsung
                              device_model: SM-G991B
                              browser_family: Chrome Mobile
                              os_family: Android
                              platform: mobile
                              device_fingerprint: null
                            location_info:
                              ip_address: 83.50.231.18
                              ip_country: Spain
                              ip_country_code: ES
                              ip_state: Madrid
                              ip_city: Madrid
                              is_vpn_or_tor: false
                              is_data_center: false
                            confidence: 1
                            match_mode: deterministic
                            recovery_similarity: 0.9874
                            tls_ja4_corroborated: true
                            recovery_gate_reason: hardware_root_match
                    database_validations:
                      - node_id: feature_db_validation_1
                        issuing_state: BRA
                        validation_type: one_by_one
                        screened_data:
                          last_name: De Lima
                          first_name: Fernando
                          tax_number: '01234567890'
                          date_of_birth: '1980-01-01'
                          document_type: ID
                          expiration_date: '2030-01-01'
                        validations:
                          - service_id: bra_cpf
                            service_name: Brazil - CPF status check
                            outcome_code: MATCH
                            validation:
                              full_name: full_match
                              date_of_birth: full_match
                              identification_number: full_match
                            source_data:
                              identification_number: '01234567890'
                              first_name: FERNANDO
                              last_name: DE LIMA
                              date_of_birth: '1980-01-01'
                              gender: M
                              nationality: BRA
                        match_type: full_match
                        status: Approved
                        warnings: []
                    reviews:
                      - user: compliance@example.com
                        new_status: Declined
                        comment: Possible match found in AML screening
                        created_at: '2024-07-18T13:29:00.366811Z'
                    created_at: '2024-07-24T08:54:25.443172Z'
                    expires_at: '2025-07-24T08:54:25.443172Z'
                    biometric_consent:
                      required: false
                      trigger: null
                      status: not_required
                      given_at: null
                      declined_at: null
                      text_version: null
                      text_hash: null
                      locale: null
                      policy_url: null
                      step: null
                      node_id: null
                      ip_address: null
                      ip_country_code: null
                      ip_state: null
                      ip_city: null
                      user_agent: null
                      detected_ip_address: 83.50.226.71
                      detected_country_code: ES
                      detected_state: ES-B
                      detected_city: Barcelona
                      declared_state: null
                      document_state: null
                      jurisdictions: []
                      retention_months: null
                      reason: null
                      decline_reason: null
                      face_data_deleted_at: null
                BusinessExample:
                  summary: Exemplo de sessão de empresa (KYB)
                  description: >-
                    Uma decisão de `session_kind = "business"`: as sessões de
                    KYB substituem os arrays de funcionalidades de KYC por
                    `registry_checks`, `document_verifications` e
                    `key_people_checks`, partilhando simultaneamente
                    `aml_screenings`, `phone_verifications`,
                    `email_verifications`, `questionnaire_responses`,
                    `ip_analyses`, `reviews` e o envelope da sessão.
                  value:
                    session_id: 66666666-7777-8888-9999-000000000000
                    session_kind: business
                    session_number: 31415
                    session_url: https://verify.didit.me/session/business123
                    status: In Review
                    environment: live
                    workflow_id: abababab-cdcd-efef-0101-232323232323
                    features:
                      - KYB_REGISTRY
                      - KYB_DOCUMENTS
                      - KYB_KEY_PEOPLE
                    vendor_data: merchant-001234
                    metadata: null
                    callback: https://example.com/verification/callback
                    registry_checks:
                      - status: Approved
                        node_id: feature_kyb_registry_1
                        data_resolved: true
                        company:
                          uuid: dddd4444-eeee-5555-ffff-666677778888
                          node_id: feature_kyb_registry_1
                          status: Approved
                          registry_status: active
                          data_resolved: true
                          company_name: ACME HOLDINGS LTD
                          registration_number: '12345678'
                          country_code: GB
                          region: null
                          company_type: Private Limited Company
                          incorporation_date: '2015-03-12'
                          registered_address: 1 Example Street, London, EC1A 1AA
                          tax_number: null
                          risk_level: null
                          verification_status: verified
                          is_from_registry: true
                          fetch_status: resolved
                          alternative_names: null
                          nature_of_business: 62012 - Business and domestic software development
                          registered_capital: 100 GBP
                          registered_capital_amount: '100.00'
                          registered_capital_currency: GBP
                          website: null
                          email: null
                          phone: null
                          legal_entity_identifier: null
                          location_of_registration: England and Wales
                          financial_summary: null
                          officers:
                            - uuid: aaaa1111-bbbb-2222-cccc-333344445555
                              name: Jane Smith
                              designation: Director
                              role: director
                              nationality: British
                              is_active: true
                              kyc_status: Approved
                              kyc_session_url: https://verify.didit.me/session/abc123def456
                          beneficial_owners:
                            - uuid: bbbb2222-cccc-3333-dddd-444455556666
                              name: John Doe
                              first_name: John
                              last_name: Doe
                              entity_type: person
                              roles:
                                - ubo
                                - shareholder
                              ownership_min_shares: '50'
                              ownership_max_shares: '75'
                              is_active: true
                              kyc_status: Pending
                              kyc_session_url: https://verify.didit.me/session/def456ghi789
                              effective_ownership_percent: 75
                          addresses:
                            - type: registered
                              address: 1 Example Street, London, EC1A 1AA
                              country: GB
                          industries:
                            - code: '62012'
                              description: Business and domestic software development
                          accounts: null
                          registry_data: {}
                          user_provided_data:
                            company_name: ACME HOLDINGS
                            registration_number: '12345678'
                          confirmed_by_user_at: '2026-06-10T12:01:30.000000Z'
                          last_console_edit_at: null
                          is_editable: false
                        ownership_structure:
                          shareholders:
                            - name: John Doe
                              first_name: John
                              last_name: Doe
                              date_of_birth: null
                              country_of_birth: null
                              company_name: null
                              registration_number: null
                              entity_type: person
                              nationality: null
                              designation: null
                              roles:
                                - shareholder
                              ownership_min_shares: '75'
                              ownership_max_shares: '75'
                              voting_min_shares: null
                              voting_max_shares: null
                              appointment_date: null
                              is_active: true
                              shareholding:
                                share_class: ORDINARY
                                number_of_shares: 750
                                currency: GBP
                                nominal_value: 1
                                total_value: null
                                percentage: 75
                          beneficial_owners: []
                        warnings: []
                    aml_screenings: null
                    document_verifications:
                      - status: In Review
                        node_id: feature_kyb_documents_1
                        items:
                          - uuid: eeee5555-ffff-6666-0000-777788889999
                            document_type: LEGAL_PRESENCE
                            document_subtype: CERTIFICATE_OF_INCORPORATION
                            document_group: LEGAL_PRESENCE
                            file_url: >-
                              https://<media-host>/kyb/certificate-of-incorporation.pdf
                            original_filename: certificate_of_incorporation.pdf
                            file_size: 482133
                            status: Approved
                            created_at: '2026-06-10T12:03:11.000000Z'
                            cross_check_result:
                              critical:
                                company_name:
                                  document: ACME HOLDINGS LTD
                                  registry: ACME HOLDINGS LTD
                                  score: 1
                                  match: true
                                registration_number:
                                  document: '12345678'
                                  registry: '12345678'
                                  match: true
                              non_critical: {}
                              people: {}
                            document_metadata:
                              file_size: 482133
                              content_type: application/pdf
                              creation_date: '2015-03-12T09:00:00'
                              modified_date: '2015-03-12T09:00:00'
                              creator: null
                              producer: null
                              software: null
                              encryption: null
                              is_signed: true
                              is_tampered: false
                              signature_info: null
                              exif_original_date: null
                              exif_digitized_date: null
                              processed_by_known_editor: false
                              has_different_creation_mod_date: false
                              overlay_manipulation: null
                            description: null
                            is_requested: false
                            ocr_data:
                              company_name: ACME HOLDINGS LTD
                              registration_number: '12345678'
                              incorporation_date: '2015-03-12'
                            is_console_upload: false
                            is_confirmed: true
                          - uuid: ffff6666-0000-7777-1111-888899990000
                            document_type: OWNERSHIP_STRUCTURE
                            document_subtype: null
                            document_group: OWNERSHIP_STRUCTURE
                            file_url: null
                            original_filename: null
                            file_size: null
                            status: Not Finished
                            created_at: '2026-06-10T15:40:02.000000Z'
                            cross_check_result: null
                            document_metadata: null
                            description: Please upload an up-to-date shareholder registry
                            is_requested: true
                            ocr_data: null
                            is_console_upload: false
                            is_confirmed: true
                        groups:
                          LEGAL_PRESENCE:
                            total: 1
                            approved: 1
                            pending: 0
                            declined: 0
                            in_review: 0
                            other: 0
                            missing: 0
                          OWNERSHIP_STRUCTURE:
                            total: 1
                            approved: 0
                            pending: 0
                            declined: 0
                            in_review: 0
                            other: 0
                            missing: 1
                        required_groups:
                          - LEGAL_PRESENCE
                          - OWNERSHIP_STRUCTURE
                        warnings: []
                    key_people_checks:
                      - status: In Review
                        node_id: feature_kyb_key_people_1
                        registry:
                          officers:
                            - uuid: aaaa1111-bbbb-2222-cccc-333344445555
                              name: Jane Smith
                              designation: Director
                              role: director
                              nationality: British
                              appointment_date: '2015-03-12'
                              termination_date: null
                              is_active: true
                              address: 1 Example Street, London, EC1A 1AA
                              aml_status: Approved
                              kyc_status: Approved
                              kyc_session_url: https://verify.didit.me/session/abc123def456
                              kyc_session_id: 77777777-8888-9999-aaaa-bbbbbbbbbbbb
                              verification_workflow_type: kyc
                              verification_workflow_id: 12121212-3434-5656-7878-909090909090
                              verification_workflow_label: Key People KYC
                              verification_workflow_features:
                                - feature: ID_VERIFICATION
                                  status: Approved
                                - feature: LIVENESS
                                  status: Approved
                                - feature: AML
                                  status: Approved
                              didit_internal_id: 99999999-0000-1111-2222-333333333333
                              kyc_document_type: P
                              kyc_nationality: GBR
                              kyc_liveness_passed: true
                              kyc_verified_at: '2026-06-10T14:22:31.123456Z'
                              kyc_aml_categories:
                                sanctions: clear
                                pep: clear
                                adverse_media: clear
                                warnings: clear
                              kyc_notification_sent_at: '2026-06-09T09:00:00.000000Z'
                          beneficial_owners:
                            - uuid: bbbb2222-cccc-3333-dddd-444455556666
                              name: John Doe
                              first_name: John
                              last_name: Doe
                              date_of_birth: '1980-05-04'
                              country_of_birth: null
                              email: null
                              company_name: null
                              registration_number: null
                              entity_type: person
                              nationality: British
                              designation: null
                              roles:
                                - ubo
                                - shareholder
                              ownership_min_shares: '50'
                              ownership_max_shares: '75'
                              is_active: true
                              aml_status: null
                              kyc_status: In Progress
                              kyc_session_url: https://verify.didit.me/session/def456ghi789
                              kyc_session_id: 88888888-9999-aaaa-bbbb-cccccccccccc
                              verification_workflow_type: kyc
                              verification_workflow_id: 12121212-3434-5656-7878-909090909090
                              verification_workflow_label: Key People KYC
                              verification_workflow_features:
                                - feature: ID_VERIFICATION
                                  status: Not Finished
                                - feature: LIVENESS
                                  status: Not Finished
                                - feature: AML
                                  status: Not Finished
                              didit_internal_id: null
                              kyc_document_type: null
                              kyc_nationality: null
                              kyc_liveness_passed: null
                              kyc_verified_at: null
                              kyc_aml_categories: null
                              kyc_notification_sent_at: null
                              child_beneficial_owners: []
                              effective_ownership_percent: 75
                        submitted:
                          parties:
                            - uuid: cccc3333-dddd-4444-eeee-555566667777
                              entity_type: person
                              source: USER
                              name: John Doe
                              first_name: John
                              last_name: Doe
                              company_name: null
                              registration_number: null
                              email: john.doe@example.com
                              nationality: GBR
                              phone_number: '+447700900123'
                              date_of_birth: '1980-05-04'
                              position: Chief Executive Officer
                              custom_fields: {}
                              is_active: true
                              is_skipped: false
                              requires_verification: true
                              roles:
                                - role: ubo
                                  ownership_percent: 75
                                  voting_percent: 75
                                - role: director
                                  ownership_percent: null
                                  voting_percent: null
                              kyc_session_id: 88888888-9999-aaaa-bbbb-cccccccccccc
                              kyc_session_status: In Progress
                              kyc_session_url: https://verify.didit.me/session/def456ghi789
                              kyb_sub_session_id: null
                              kyb_sub_session_status: null
                              kyb_sub_session_url: null
                              verification_workflow_type: kyc
                              verification_workflow_id: 12121212-3434-5656-7878-909090909090
                              verification_workflow_label: Key People KYC
                              verification_workflow_features:
                                - feature: ID_VERIFICATION
                                  status: Not Finished
                                - feature: LIVENESS
                                  status: Not Finished
                                - feature: AML
                                  status: Not Finished
                              didit_internal_id: null
                        ubo_kyc_summary:
                          total: 1
                          approved: 0
                          flagged: 0
                          pending: 1
                        warnings: []
                    phone_verifications: null
                    email_verifications: null
                    questionnaire_responses: null
                    ip_analyses: null
                    reviews: []
                    contact_details: null
                    expected_details:
                      company_name: Tesco PLC
                      registry_country: GB
                      registration_number: '00445790'
                    created_at: '2026-06-10T11:58:04.000000Z'
                    expires_at: '2026-06-24T11:58:04.000000Z'
              schema:
                $ref: '#/components/schemas/SessionDecision'
        '403':
          description: >-
            Falha na autenticação ou autorização. Uma chave em falta devolve
            `403`; uma chave incorreta, revogada ou expirada devolve `401`. Duas
            cadeias de carateres em `detail` distinguem os modos de falha:


            - `"Authentication credentials were not provided or are invalid."` —
            nenhum cabeçalho `x-api-key` (e nenhum token `Authorization:
            Bearer`), ou a credencial fornecida falhou a introspeção (revogada,
            expirada ou mal formatada).

            - `"You do not have permission to perform this action."` — a
            credencial é válida, mas não tem permissão para ler esta sessão: um
            token Bearer de um utilizador da consola carece da permissão
            `read:sessions` ou não consegue aceder à aplicação proprietária, ou
            uma chave de API pertence a uma organização diferente da sessão.


            Tenha em atenção que, para um `sessionId` completamente
            desconhecido, o endpoint resolve a aplicação proprietária antes de
            validar as credenciais; logo, uma sessão em falta devolve `404`
            mesmo quando a credencial está em falta ou é inválida.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    example: >-
                      Authentication credentials were not provided or are
                      invalid.
              examples:
                Missing or invalid credentials:
                  summary: Sem cabeçalho x-api-key ou a chave falhou a introspeção
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Insufficient permissions:
                  summary: >-
                    Credencial válida sem read:sessions ou sem acesso à
                    aplicação à qual pertence
                  value:
                    detail: You do not have permission to perform this action.
        '404':
          description: >-
            Sessão não encontrada. Retornado quando nenhuma sessão ativa
            corresponde ao `sessionId` fornecido como uma sessão de Verificação
            de utilizadores (KYC) ou de Verificação de empresas (KYB) — uma
            sessão que tenha sido eliminada também vai parar aqui. O corpo é o
            invólucro padrão `{"detail": ...}`.


            **Duas strings `detail` distintas.** Se o `sessionId` for
            desconhecido tanto como sessão KYC como KYB, a pesquisa de
            proprietário pré-autenticação falha e recebe `{"detail": "Not
            found."}` — isto acontece antes da validação de credenciais, pelo
            que é retornado mesmo para chamadas não autenticadas. Se a sessão
            existir mas não puder ser obtida sob a aplicação autenticada (por
            exemplo, um registo obsoleto ou acabado de eliminar), a vista
            retorna `{"detail": "Session not found."}`. Ambas indicam o mesmo
            resultado — a sessão não está acessível — portanto, compare pelo
            código de estado `404` em vez da string.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    example: Not found.
              examples:
                Unknown session id:
                  summary: sessionId é desconhecido para esta aplicação
                  value:
                    detail: Not found.
                Session not retrievable:
                  summary: A sessão existe, mas não pode ser obtida para esta aplicação
                  value:
                    detail: Session not found.
        '429':
          description: >-
            Limite de pedidos excedido. Os pedidos GET estão limitados a **600
            por minuto por credencial** (chave de API, token Bearer ou IP de
            origem quando não autenticado). Inspecione `Retry-After` /
            `X-RateLimit-Reset` e aguarde antes de tentar novamente. Se atingir
            este limite enquanto faz polling por decisões, mude para o webhook
            `status.updated` e obtenha a decisão uma vez por alteração de
            estado.
          headers:
            Retry-After:
              description: Segundos a aguardar antes de tentar novamente o pedido.
              schema:
                type: integer
                minimum: 1
                example: 30
            X-RateLimit-Limit:
              description: >-
                Número máximo de pedidos permitidos na janela atual (600 para
                pedidos GET).
              schema:
                type: integer
                example: 600
            X-RateLimit-Remaining:
              description: Pedidos restantes na janela atual.
              schema:
                type: integer
                example: 0
            X-RateLimit-Reset:
              description: >-
                Carimbo de data/hora Unix (segundos) em que a janela atual é
                reposta.
              schema:
                type: integer
                example: 1750000000
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Explicação legível da violação do limite de pedidos.
                    example: >-
                      GET request rate limit exceeded. You can make up to 600
                      requests per minute.
              examples:
                Throttled:
                  summary: >-
                    Mais de 600 pedidos GET num minuto a partir da mesma
                    credencial
                  value:
                    detail: >-
                      GET request rate limit exceeded. You can make up to 600
                      requests per minute.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: >-
            curl -X GET
            'https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/decision/'
            \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Accept: application/json'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.sessions.retrieve_decision(
                "11111111-2222-3333-4444-555555555555",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: >-
            import Didit from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY.

            const didit = new Didit();


            const result = await
            didit.sessions.retrieveDecision("11111111-2222-3333-4444-555555555555");

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.RetrieveDecision(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsRetrieveDecisionParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.sessions().retrieveDecision("11111111-2222-3333-4444-555555555555");

            System.out.println(result);
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Reads DIDIT_API_KEY.

            $didit = new DiditClient();


            $result =
            $didit->sessions->retrieveDecision('11111111-2222-3333-4444-555555555555');

            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: >-
            require "didit"


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            result =
            didit.sessions.retrieve_decision("11111111-2222-3333-4444-555555555555")

            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await
            client.Sessions.RetrieveDecisionAsync("11111111-2222-3333-4444-555555555555");

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    SessionDecision:
      type: object
      properties:
        session_id:
          type: string
          format: uuid
          description: O identificador único da sessão.
        session_kind:
          type: string
          enum:
            - user
            - business
          description: >-
            Discriminador que indica se esta é uma sessão de Verificação de
            utilizadores (KYC) ou de Verificação de empresas (KYB). Quando for
            `user`, aplicam-se os arrays de funcionalidades de KYC
            (`id_verifications`, `nfc_verifications`, `liveness_checks`,
            `face_matches`, `poa_verifications`, `document_ai_documents`,
            `database_validations`, ...) e os arrays da empresa estão ausentes.
            Quando for `business`, o payload inclui `registry_checks`,
            `document_verifications`, `key_people_checks`, além dos arrays
            partilhados (`aml_screenings`, `phone_verifications`,
            `email_verifications`, `ip_analyses`, `questionnaire_responses`).
            **Omitido quando `include=events` é transmitido** — a estrutura de
            eventos apenas existe para sessões de utilizador, pelo que o
            discriminador é removido nessa variante.
        shared_from_session:
          type: string
          format: uuid
          nullable: true
          description: >-
            Para uma sessão clonada com `POST /v3/session/import-shared/`: o
            `session_id` da sessão original na aplicação de origem. `null` para
            qualquer outra sessão. Omitido quando `include=events` é
            especificado.
        shared_from_session_number:
          type: integer
          nullable: true
          description: >-
            `session_number` da sessão de origem quando esta sessão foi
            importada de outra aplicação da sua organização. Caso contrário,
            `null`.
        session_number:
          type: integer
          description: O número da sessão.
          nullable: true
        session_url:
          type: string
          format: uri
          description: O URL da sessão.
          nullable: true
        status:
          type: string
          enum:
            - Not Started
            - In Progress
            - Awaiting User
            - In Review
            - Approved
            - Declined
            - Resubmitted
            - Expired
            - Kyc Expired
            - Abandoned
          description: >-
            Estado global do ciclo de vida da sessão — o resultado agregado do
            fluxo. Os valores finais são `Approved`, `Declined`, `In Review`,
            `Expired`, `Kyc Expired` e `Abandoned`; `Not Started`, `In
            Progress`, `Awaiting User` e `Resubmitted` indicam que a sessão
            ainda está a avançar no fluxo.
        status_override:
          type: object
          nullable: true
          description: >-
            Presente quando um revisor definiu `status` manualmente. `null`
            quando o estado é automático. Utilize-o para distinguir uma
            aprovação manual de uma automática.
          properties:
            overridden_at:
              type: string
              format: date-time
              nullable: true
            automatic_status:
              type: string
              nullable: true
              description: O estado determinado pelas próprias verificações da plataforma.
        decision_trace:
          type: object
          description: >-
            Como o estado foi alcançado: quem o definiu e que avisos o
            originaram.
          properties:
            status:
              type: string
              description: O estado da sessão.
            decided_by:
              type: string
              nullable: true
              enum:
                - manual
                - automatic
                - investigator
                - null
              description: >-
                Quem definiu o estado. `null` enquanto a sessão não estiver
                decidida.
            decided_at:
              type: string
              format: date-time
              nullable: true
            automatic_status:
              type: string
              nullable: true
              description: >-
                O que as próprias verificações da plataforma concluem, o que
                difere de `status` após uma decisão manual.
            terminal_node_id:
              type: string
              nullable: true
              description: >-
                O nó de estado do fluxo que terminou a sessão, quando um deles
                tiver terminado a sessão.
            actor:
              type: object
              nullable: true
              description: O revisor responsável por uma decisão manual.
              properties:
                user:
                  type: string
                  nullable: true
                actor_type:
                  type: string
                  nullable: true
            warning_counts:
              type: object
              description: >-
                Avisos por `log_type` (`error`, `warning`, `information`) e
                `total`.
              additionalProperties:
                type: integer
            status_warnings:
              type: array
              description: Os avisos que definem o estado `Declined` ou `In Review`.
              items:
                type: object
                properties:
                  risk:
                    type: string
                  feature:
                    type: string
                    nullable: true
                  node_id:
                    type: string
                    nullable: true
                  log_type:
                    type: string
                    nullable: true
                  check_status:
                    type: string
                    nullable: true
                  source:
                    type: string
                    description: >-
                      A lista do payload de onde o aviso teve origem, por
                      exemplo `id_verifications`.
                  short_description:
                    type: string
                    nullable: true
        linked_records:
          type: object
          nullable: true
          description: >-
            Um resumo de outros registos associados à sessão. `null` quando não
            há nada a apresentar e para fluxos que declarem um padrão de
            garantia de idade.
          properties:
            same_face:
              type: object
              nullable: true
              description: >-
                Outras pessoas cuja face coincidiu com uma das pesquisas faciais
                desta sessão.
              properties:
                count:
                  type: integer
                best_match:
                  type: object
                  nullable: true
                  properties:
                    session_id:
                      type: string
                      format: uuid
                      nullable: true
                    session_number:
                      type: integer
                      nullable: true
                    vendor_user_id:
                      type: string
                      format: uuid
                      nullable: true
                    similarity_percentage:
                      type: number
                      nullable: true
            earlier_verifications:
              type: object
              nullable: true
              properties:
                count:
                  type: integer
                vendor_user_id:
                  type: string
                  format: uuid
                  nullable: true
            networks:
              type: object
              nullable: true
              properties:
                count:
                  type: integer
                open:
                  type: integer
                dismissed:
                  type: integer
                items:
                  type: array
                  items:
                    type: object
                    properties:
                      network_id:
                        type: string
                        format: uuid
                      display_number:
                        type: integer
                        nullable: true
                      name:
                        type: string
                      status:
                        type: string
                      risk_score:
                        type: number
                        nullable: true
        workflow_id:
          type: string
          format: uuid
          description: >-
            Identificador estável do grupo de fluxos que gerou esta sessão. Os
            fluxos são versionados — este valor identifica o fluxo em si, e não
            a versão específica.
          nullable: true
        features:
          type: array
          items:
            type: string
            description: A funcionalidade da sessão.
          description: >-
            Lista de funcionalidades de verificação configuradas para esta
            sessão, como nomes de apresentação: `ID_VERIFICATION`, `NFC`,
            `LIVENESS`, `FACE_MATCH`, `POA`, `PHONE`, `EMAIL_VERIFICATION`,
            `AML`, `IP_ANALYSIS`, `DATABASE_VALIDATION`, `QUESTIONNAIRE`,
            `AGE_ESTIMATION`, `FACE_SEARCH`, `GEOLOCATION` (verificação de
            localização) (as sessões de Verificação de empresas (KYB) utilizam o
            conjunto de funcionalidades de KYB: `KYB_REGISTRY`, `KYB_DOCUMENTS`,
            `KYB_KEY_PEOPLE`, `AML`, `PHONE`, `EMAIL_VERIFICATION`,
            `IP_ANALYSIS`, `QUESTIONNAIRE`). Com `include=events`, cada entrada
            torna-se um objeto `{feature, node_id}` em vez de uma string
            simples, e a funcionalidade de e-mail é renomeada: aparece como
            `EMAIL` no modo de eventos em vez do `EMAIL_VERIFICATION` aqui
            utilizado.
        vendor_data:
          type: string
          description: Os dados de fornecedor da sessão.
          nullable: true
        metadata:
          type: object
          description: Os metadados da sessão.
          nullable: true
        expected_details:
          type: object
          description: >-
            Dados esperados fornecidos na criação da sessão — utilizados para
            validação cruzada com os dados extraídos (KYC) ou para pré-preencher
            a pesquisa no registo de empresas (KYB). Devolve exatamente as
            mesmas chaves que foram fornecidas; `null` quando nenhum dado foi
            fornecido. As sessões de KYC contêm os campos da pessoa; as sessões
            de empresas (KYB) contêm `company_name`, `registry_country` e
            `registration_number`.
          properties:
            first_name:
              type: string
              description: Primeiro nome do utilizador. Por exemplo, `John`.
            last_name:
              type: string
              description: Apelido do utilizador. Por exemplo, `Doe`.
            date_of_birth:
              type: string
              format: date
              description: >-
                Data de nascimento do utilizador no formato: YYYY-MM-DD. Por
                exemplo, `1990-05-15`.
            gender:
              type: string
              nullable: true
              enum:
                - M
                - F
              default: null
              description: Género do utilizador. Deve ser 'M', 'F' ou null.
            nationality:
              type: string
              description: >-
                Código de país ISO 3166-1 alfa-3 que representa o país de origem
                do requerente. Por exemplo, `USA`.
            country:
              type: string
              description: >-
                Código de país ISO 3166-1 alfa-3 que representa o país do
                documento de Comprovativo de morada, ou o país do documento de
                identificação do requerente, que pode diferir da nacionalidade.
                Por exemplo, `GBR`.
            address:
              type: string
              description: >-
                A morada num formato legível por humanos, incluindo o máximo de
                informação possível. Por exemplo, `123 Main St, San Francisco,
                CA 94105, USA`.
            identification_number:
              type: string
              description: >-
                O número de documento, número de identificação pessoal ou número
                de identificação fiscal do utilizador. Por exemplo, `123456789`.
            ip_address:
              type: string
              format: ipv4
              description: >-
                Endereço IP previsto para a sessão. Se o endereço IP real
                diferir deste valor, será registado um aviso. Por exemplo,
                `192.168.1.100`.
            expected_document_types:
              type: array
              description: >-
                Tipos de documento aos quais o passo de verificação de
                identidade foi restrito na criação da sessão. Vazio/não definido
                significa sem restrição. Códigos: `P` (passaporte), `ID`
                (documento de identificação nacional), `DL` (carta de condução),
                `RP` (autorização de residência), `HIC` (cartão de seguro de
                saúde), `TC` (cartão fiscal), `SSC` (cartão de segurança
                social).
              items:
                type: string
                enum:
                  - P
                  - ID
                  - DL
                  - RP
                  - HIC
                  - TC
                  - SSC
            id_country:
              type: string
              nullable: true
              description: >-
                País emissor previsto para o documento de identificação (ISO
                3166-1 alfa-3), quando restrito no momento da criação.
              example: ESP
            poa_country:
              type: string
              nullable: true
              description: >-
                País previsto do documento de Comprovativo de morada (ISO 3166-1
                alfa-3), quando restrito no momento da criação.
              example: ESP
            company_name:
              type: string
              description: >-
                Nome legal esperado da empresa. Apenas para sessões de empresas
                (KYB).
            registry_country:
              type: string
              description: >-
                País do registo esperado como `XX` ou `XX-YY` (ISO 3166-1
                alfa-2, opcionalmente com uma subdivisão ISO 3166-2 para
                registos a nível estadual, por exemplo, `US-CA`). Apenas para
                sessões de Business (KYB).
            registration_number:
              type: string
              description: >-
                Número de registo da empresa previsto. Apenas sessões de
                empresas (KYB).
          nullable: true
        contact_details:
          type: object
          description: >-
            Detalhes de contacto fornecidos quando a sessão foi criada
            (utilizados para e-mails de notificação, verificação pré-preenchida
            de telefone/e-mail e idioma de comunicação). `null` quando não foi
            fornecido nem um e-mail nem um número de telefone.
          properties:
            email:
              type: string
              description: >-
                Endereço de e-mail do utilizador (ex.: "john.doe@example.com")
                que será utilizado durante o passo de Verificação de e-mail. Se
                não for fornecido, o utilizador terá de o indicar durante o
                fluxo de verificação.
            email_lang:
              type: string
              description: >-
                Código de idioma (ISO 639-1) para notificações por e-mail.
                Controla o idioma de todas as comunicações por e-mail (por
                exemplo, "en", "es", "fr").
            send_notification_emails:
              type: boolean
              default: false
              description: >-
                Se for true e for fornecido um e-mail, a Didit envia o e-mail
                inicial "Verifique a sua identidade" de forma assíncrona quando
                a sessão de Verificação de utilizadores (KYC) ou de Verificação
                de empresas (KYB) é criada. A Didit também envia notificações de
                estado da verificação para sessões que exijam revisão manual
                para o endereço de e-mail fornecido.
            phone:
              type: string
              nullable: true
              description: >-
                Número de telefone do utilizador no formato E.164, se disponível
                (por exemplo, +14155552671). `null` quando apenas um e-mail foi
                fornecido na criação da sessão. Nota: Este campo devolve o
                número de telefone original fornecido durante a criação da
                sessão. Se o número for inválido, pode não estar no formato
                E.164.
          nullable: true
        callback:
          type: string
          format: uri
          description: O URL de retorno da sessão.
          nullable: true
        id_verifications:
          type: array
          nullable: true
          description: >-
            **Array de relatórios de verificação de identidade (OCR)**
            produzidos por passos de documento de identificação no grafo do
            fluxo. Sempre um array JSON — leia `id_verifications[0]` e itere se
            o seu fluxo puder executar mais do que uma verificação de
            identificação (por exemplo, uma verificação principal mais uma
            verificação adicional). `null` até que pelo menos um passo de
            identificação tenha produzido dados. Cada item é o relatório
            completo, incluindo `node_id`, `status` ao nível da funcionalidade,
            campos do documento extraídos, URLs de imagens, pontuações de
            qualidade, MRZ, análise da morada, correspondências entre sessões e
            `warnings[]`.
          items:
            type: object
            description: >-
              Um relatório de Verificação de identidade - o relatório completo
              de um único passo de Verificação de identidade.
              `verification_method` indica qual dos três métodos o gerou
              (captura de documento, consulta sem documento ou início de sessão
              com carteira) e o bloco de evidências específico do método é
              preenchido em conformidade.
            properties:
              node_id:
                type: string
                description: >-
                  ID do nó do grafo do fluxo do passo de OCR que gerou este
                  relatório.
              verification_method:
                type: string
                enum:
                  - document
                  - id_lookup
                  - wallet
                description: >-
                  Qual o método de Verificação de identidade que gerou este
                  relatório. `document` - o utilizador fotografou um documento
                  de identificação físico (a predefinição e o valor em todas as
                  sessões criadas antes da existência dos outros métodos).
                  `id_lookup` - o utilizador introduziu o seu número de
                  identificação nacional e este foi verificado num registo
                  governamental ou noutra fonte oficial desse país
                  (`id_lookup.source` indica qual). `wallet` - o utilizador
                  iniciou sessão com uma identidade digital governamental ou
                  bancária.
              assurance:
                type: string
                enum:
                  - documentary
                  - data_match
                  - cryptographic
                description: >-
                  Nível de garantia derivado de `verification_method`:
                  `documentary` para um documento que foi capturado e
                  verificado, `data_match` para detalhes que corresponderam a um
                  registo mantido pela fonte consultada, `cryptographic` para
                  atributos autenticados e assinados por um fornecedor de
                  identidade.
              wallet_provider:
                type: string
                nullable: true
                description: >-
                  ID de catálogo da carteira quando `verification_method` é
                  `wallet` (`mitid`, `bankid_se`, `itsme`, ...). Caso contrário,
                  `null`.
              fallback_from:
                type: object
                nullable: true
                description: >-
                  O motivo pelo qual um método não documental não concluiu o
                  passo de identificação. Definido quando uma consulta ou um
                  início de sessão com carteira falhou: na verificação de
                  documentos com a qual o utilizador continuou quando a opção de
                  recurso do país era `fallback_to_document` (`action` é
                  `fallback_to_document`), ou no relatório recusado quando era
                  `decline`. `null` nos restantes casos.
                properties:
                  method:
                    type: string
                    enum:
                      - id_lookup
                      - wallet
                    description: O método que falhou.
                  reason:
                    type: string
                    description: >-
                      O resultado que determinou o seu fim, por exemplo,
                      `no_match`, `provider_error`, `cancelled`, `timeout`.
                  action:
                    type: string
                    enum:
                      - fallback_to_document
                      - decline
                    description: >-
                      A ação configurada que foi executada:
                      `fallback_to_document` ou `decline`.
              id_lookup:
                type: object
                nullable: true
                description: >-
                  Comprovativo do registo de empresas. Presente apenas quando
                  `verification_method` é `id_lookup`; `null` caso contrário.
                properties:
                  source:
                    type: string
                    description: >-
                      Nome visível ao cliente da fonte consultada, por exemplo,
                      `Department of Home Affairs` (um registo governamental) ou
                      `UK credit bureau and financial services records` (não é
                      um registo governamental). Esta é a única declaração de
                      proveniência para a consulta; não assuma uma fonte
                      governamental.
                  checked_at:
                    type: string
                    format: date-time
                    nullable: true
                    description: Quando o registo respondeu.
                  attempts:
                    type: integer
                    description: >-
                      Número da tentativa, indexado a partir de 1, que deu
                      origem a este relatório.
                  max_attempts:
                    type: integer
                    description: >-
                      Orçamento de tentativas configurado para o país (1 a 5,
                      predefinição 1).
                  outcome:
                    type: string
                    enum:
                      - match
                      - partial_match
                      - no_match
                      - provider_error
                      - format_rejected
                    nullable: true
                    description: >-
                      O que o registo respondeu. Apenas `match`, `partial_match`
                      e `no_match` contam para o orçamento de tentativas e a
                      faturação.
                  comparison:
                    type: array
                    description: >-
                      Uma linha por campo comparável ao qual a fonte respondeu,
                      mais uma linha por erro da fonte. As linhas de comparação
                      utilizam os nomes de campo normalizados abaixo em vez das
                      chaves dos campos de pedido específicas do país, porque
                      vários campos do pedido (primeiro e último nome, ou
                      qualquer um dos aliases de identificador) colapsam numa
                      única comparação. Uma fonte que tenha falhado anexa uma
                      linha com `field: "provider"` e `result: "error"`, pelo
                      que deve consultar `result` antes de tratar uma linha como
                      um veredito do campo.
                    items:
                      type: object
                      required:
                        - field
                        - label
                        - provided
                        - record
                        - result
                      properties:
                        field:
                          type: string
                          enum:
                            - identification_number
                            - full_name
                            - date_of_birth
                            - address
                            - provider
                          description: >-
                            Campo de comparação normalizado. `provider` não é um
                            campo de utilizador: marca uma linha de erro de
                            origem.
                        label:
                          type: string
                          description: >-
                            Etiqueta visível da linha, por exemplo `ID number`,
                            `Full name`, `Provider`.
                        provided:
                          type: string
                          nullable: true
                          description: >-
                            O que o utilizador introduziu. `null` numa linha de
                            erro de `provider`.
                        record:
                          type: string
                          nullable: true
                          description: >-
                            O que a fonte continha. Numa linha de erro de
                            `provider`, este campo contém a mensagem de erro.
                        result:
                          type: string
                          enum:
                            - match
                            - partial
                            - no_match
                            - error
                          description: >-
                            Resultado de comparação por campo. `error` surge
                            apenas numa linha `provider` e significa que essa
                            fonte não respondeu; trate-o como uma evidência
                            sobre o pedido, nunca como uma divergência de campo.
                  registry_portrait:
                    type: string
                    format: uri
                    nullable: true
                    description: >-
                      URL pré-assinado de curta duração para o retrato devolvido
                      pela fonte. Apenas para os quatro registos governamentais
                      que devolvem um (África do Sul, Nigéria, Argentina,
                      Panamá).
                  face_match_score:
                    type: number
                    nullable: true
                    description: >-
                      Selfie em comparação com o retrato do registo, 0-100.
                      Apenas quando o registo devolve um retrato.
              wallet_verification:
                type: object
                nullable: true
                description: >-
                  Evidência da credencial. Presente apenas quando
                  `verification_method` é `wallet`; `null` caso contrário.
                properties:
                  provider:
                    type: string
                    description: ID de catálogo da carteira, por ex. `mitid`.
                  provider_name:
                    type: string
                    nullable: true
                    description: >-
                      Nome da carteira tal como o utilizador final a conhece,
                      por ex. `MitID`.
                  issuing_authority:
                    type: string
                    nullable: true
                    description: >-
                      A autoridade responsável pela carteira, por exemplo
                      `Danish Agency for Digital Government`.
                  issuing_country:
                    type: string
                    description: >-
                      País ISO 3166-1 alfa-3 no qual a carteira foi
                      disponibilizada.
                  credential_type:
                    type: string
                    nullable: true
                    description: >-
                      Credencial apresentada pela carteira, ex.:
                      `person_identification`.
                  level_of_assurance:
                    type: string
                    enum:
                      - low
                      - substantial
                      - high
                    nullable: true
                    description: >-
                      O nível de garantia que a carteira declarou. Um início de
                      sessão que declare menos do que o nível pedido falha em
                      vez de reduzir o nível.
                  verified_at:
                    type: string
                    format: date-time
                    nullable: true
                    description: O instante de autenticação da carteira.
                  signature_valid:
                    type: boolean
                    nullable: true
                    description: >-
                      Se a asserção assinada devolvida pela carteira foi
                      validada.
                  attributes:
                    type: object
                    additionalProperties: true
                    description: >-
                      Os atributos partilhados pela carteira, com as chaves
                      indicadas na entrada correspondente do catálogo da
                      carteira.
                  portrait:
                    type: string
                    format: uri
                    nullable: true
                    description: >-
                      URL pré-assinado de curta duração para o retrato
                      partilhado pela carteira, quando esta partilhar algum.
                  face_match_score:
                    type: number
                    nullable: true
                    description: >-
                      Selfie em comparação com o retrato da carteira, 0-100,
                      quando a carteira partilha um retrato.
              status:
                type: string
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Expired
                description: >-
                  Estado ao nível da funcionalidade deste passo de verificação
                  de identidade. Independente do `status` da sessão de nível
                  superior — uma sessão pode alcançar a sua decisão global
                  enquanto uma funcionalidade individual permanece `In Review`.
              document_type:
                type: string
                description: Tipo de documento de identificação
              document_subtype:
                type: string
                nullable: true
                description: >-
                  Código de subtipo de documento aceite das definições de
                  documentos do fluxo, incluindo a região do documento quando
                  aplicável. Exemplos: `ID_CARD_GENERIC`,
                  `QUEENSLAND_DRIVER_LICENSE_GENERIC`.
              document_number:
                type: string
                description: Número de identificação do documento
              personal_number:
                type: string
                description: Número de identificação pessoal
              portrait_image:
                type: string
                format: uri
                description: URL da imagem de retrato
              front_image:
                type: string
                format: uri
                description: URL da imagem da frente do documento
              front_video:
                type: string
                format: uri
                description: URL do vídeo da frente do documento
              back_image:
                type: string
                format: uri
                description: URL da imagem do verso do documento
              back_video:
                type: string
                format: uri
                description: URL do vídeo do verso do documento
              full_front_image:
                type: string
                format: uri
                description: URL da imagem completa da frente do documento
              full_back_image:
                type: string
                format: uri
                description: URL da imagem completa do verso do documento
              front_image_camera_front:
                type: string
                format: uri
                description: >-
                  URL da imagem da frente do documento capturada a partir da
                  câmara frontal
              back_image_camera_front:
                type: string
                format: uri
                description: >-
                  URL da imagem do verso do documento capturada a partir da
                  câmara frontal
              date_of_birth:
                type: string
                format: date
                description: Data de nascimento do documento
              age:
                type: integer
                description: Idade calculada a partir da data de nascimento
              expiration_date:
                type: string
                format: date
                description: Data de validade do documento
              date_of_issue:
                type: string
                format: date
                description: Data de emissão do documento
              issuing_state:
                type: string
                description: Código ISO do estado emissor
              issuing_state_name:
                type: string
                description: Nome completo do estado emissor
              first_name:
                type: string
                description: Primeiro nome do documento
              last_name:
                type: string
                description: Apelido extraído do documento
              full_name:
                type: string
                description: Nome completo constante do documento
              gender:
                type: string
                description: Género constante do documento
              address:
                type: string
                description: Morada em bruto do documento
              formatted_address:
                type: string
                description: Morada completa formatada
              place_of_birth:
                type: string
                description: Local de nascimento a partir do documento
              marital_status:
                type: string
                description: Estado civil a partir do documento
              nationality:
                type: string
                description: Código ISO de nacionalidade
              extra_fields:
                type: object
                description: >-
                  Campos adicionais do documento. Inclui atributos específicos
                  do documento (por exemplo, `dl_categories`, `blood_group`,
                  `sponsor`, `employer`, `dl_class_code_b_from`,
                  `dl_class_code_b_to`). As datas de validade das categorias da
                  carta de condução são devolvidas como
                  `dl_class_code_<class>_from` e `dl_class_code_<class>_to`, e
                  os códigos de restrição/informação por categoria (por exemplo,
                  coluna 12 das cartas do Reino Unido) como
                  `dl_class_code_<class>_notes`. Quando o documento contém
                  nomes, morada ou local de nascimento em múltiplos sistemas de
                  escrita, este objeto também inclui versões desses campos nos
                  sistemas de escrita alternativos. A definição de fluxo
                  `preferred_characters` (`latin` ou `non_latin`) controla qual
                  o sistema de escrita que preenche os campos de nível superior
                  (`first_name`, `last_name`, `full_name`, `address`,
                  `place_of_birth`); o sistema de escrita oposto aparece aqui
                  como `first_name_non_latin` / `last_name_non_latin` /
                  `full_name_non_latin` / `middle_name_non_latin` /
                  `address_non_latin` / `place_of_birth_non_latin` (quando
                  `preferred_characters` é `latin`) ou com o sufixo `_latin`
                  (quando `preferred_characters` é `non_latin`). As chaves
                  surgem apenas quando o OCR extrai efetivamente um valor real
                  no sistema de escrita alternativo — um campo cujo valor
                  alternativo esteja no mesmo sistema de escrita do conjunto
                  preferencial (por exemplo, um campo com rótulo em cirílico
                  cujo valor de OCR tenha retornado em homóglifos latinos) é
                  ignorado. Quando `preferred_characters` é `latin` mas o
                  documento apenas contém texto não latino, a Didit translitera
                  os valores extraídos e disponibiliza `first_name_latin` /
                  `last_name_latin` / etc. como recurso de contingência.
                additionalProperties: true
                properties:
                  dl_categories:
                    type: array
                    items:
                      type: string
                  blood_group:
                    type: string
                    nullable: true
                  first_name_non_latin:
                    type: string
                    description: >-
                      Primeiro nome no sistema de escrita não latino quando
                      `preferred_characters=latin` e uma versão não latina está
                      presente no documento (ex.: `Айна` para uma identificação
                      do Quirguistão).
                  last_name_non_latin:
                    type: string
                    description: >-
                      Apelido no sistema de escrita não latino quando
                      `preferred_characters=latin` e uma versão não latina
                      estiver presente no documento.
                  middle_name_non_latin:
                    type: string
                    description: >-
                      Segundo nome / patronímico no sistema de escrita não
                      latino quando `preferred_characters=latin` e uma versão
                      não latina está presente no documento.
                  full_name_non_latin:
                    type: string
                    description: >-
                      Nome completo composto no sistema de escrita não latino.
                      Reconstruído a partir dos componentes individuais quando o
                      nome próprio e os apelidos estão disponíveis.
                  address_non_latin:
                    type: string
                    description: >-
                      Morada no sistema de escrita não latino quando
                      `preferred_characters=latin` e uma versão não latina está
                      presente no documento.
                  place_of_birth_non_latin:
                    type: string
                    description: >-
                      Local de nascimento no sistema de escrita não latino
                      quando `preferred_characters=latin` e uma versão não
                      latina estiver presente no documento.
                  first_name_latin:
                    type: string
                    description: >-
                      Primeiro nome em sistema de escrita latino. Preenchido
                      quando `preferred_characters=non_latin` e uma versão em
                      carateres latinos está presente no documento, ou — como
                      alternativa de transliteração — quando
                      `preferred_characters=latin` mas o documento apenas contém
                      texto não latino.
                  last_name_latin:
                    type: string
                    description: >-
                      Apelido no sistema de escrita latino. As mesmas regras que
                      `first_name_latin`.
                  middle_name_latin:
                    type: string
                    description: >-
                      Segundo nome / patronímico em sistema de escrita latino.
                      Aplicam-se as mesmas regras que a `first_name_latin`.
                  full_name_latin:
                    type: string
                    description: >-
                      Nome completo composto em sistema de escrita latino.
                      Sempre reconstruído a partir dos componentes individuais
                      quando o nome próprio e os apelidos estão disponíveis.
                  address_latin:
                    type: string
                    description: >-
                      Morada em sistema de escrita latino. Aplicam-se as mesmas
                      regras que a `first_name_latin`.
                  place_of_birth_latin:
                    type: string
                    description: >-
                      Local de nascimento em sistema de escrita latino. As
                      mesmas regras que para `first_name_latin`.
              mrz:
                type: object
                nullable: true
                description: >-
                  Campos analisados da Zona de Leitura Ótica (MRZ) extraídos do
                  documento. `null` se nenhuma MRZ foi detetada.
                properties:
                  surname:
                    type: string
                    example: MARTINEZ<SANCHEZ
                  name:
                    type: string
                    example: ELENA
                  country:
                    type: string
                    example: ESP
                  nationality:
                    type: string
                    example: ESP
                  birth_date:
                    type: string
                    example: '850315'
                  expiry_date:
                    type: string
                    example: '220821'
                  sex:
                    type: string
                    example: F
                  document_type:
                    type: string
                    example: ID
                  document_number:
                    type: string
                    example: YZA123456
                  optional_data:
                    type: string
                    example: X9876543L
                  optional_data_2:
                    type: string
                    example: ''
                  birth_date_hash:
                    type: string
                    example: '7'
                  expiry_date_hash:
                    type: string
                    example: '4'
                  document_number_hash:
                    type: string
                    example: '9'
                  final_hash:
                    type: string
                    example: '2'
                  personal_number:
                    type: string
                    example: X9876543L
                  warnings:
                    type: array
                    items:
                      type: string
                  errors:
                    type: array
                    items:
                      type: string
                  mrz_type:
                    type: string
                    example: TD1
                  mrz_string:
                    type: string
                    example: |-
                      IDESPMARTINEZ<SANCHEZ<<<<<<<<<<
                      YZA123456<9ESP8503157F3208214<X9876543L<<<<<<<2
                      MARTINEZ<SANCHEZ<<ELENA<<<<<<<<<<
                  mrz_key:
                    type: string
                    example: YZA123456985031573208214
              parsed_address:
                type: object
                description: Detalhes de morada estruturada
                properties:
                  city:
                    type: string
                  label:
                    type: string
                  region:
                    type: string
                  country:
                    type: string
                    description: Código de país de duas letras
                  category:
                    type: string
                    description: Categoria de morada (por exemplo, Residential, Commercial)
                  street_1:
                    type: string
                  street_2:
                    type: string
                    nullable: true
                  is_verified:
                    type: boolean
                    description: Indica se a morada foi verificada
                  postal_code:
                    type: string
                  raw_results:
                    type: object
                    properties:
                      types:
                        type: array
                        items:
                          type: string
                      geometry:
                        type: object
                        properties:
                          location:
                            type: object
                            properties:
                              lat:
                                type: number
                              lng:
                                type: number
                          viewport:
                            type: object
                            properties:
                              northeast:
                                type: object
                                properties:
                                  lat:
                                    type: number
                                  lng:
                                    type: number
                              southwest:
                                type: object
                                properties:
                                  lat:
                                    type: number
                                  lng:
                                    type: number
                          location_type:
                            type: string
                      place_id:
                        type: string
                      formatted_address:
                        type: string
                      navigation_points:
                        type: array
                        items:
                          type: object
                          properties:
                            location:
                              type: object
                              properties:
                                latitude:
                                  type: number
                                longitude:
                                  type: number
                      address_components:
                        type: array
                        items:
                          type: object
                          properties:
                            types:
                              type: array
                              items:
                                type: string
                            long_name:
                              type: string
                            short_name:
                              type: string
                  address_type:
                    type: string
                  document_location:
                    type: object
                    properties:
                      latitude:
                        type: number
                      longitude:
                        type: number
                  formatted_address:
                    type: string
              extra_files:
                type: array
                items:
                  type: string
                  format: uri
                description: Ficheiros adicionais de verificação de documentos
              front_image_camera_front_face_match_score:
                type: number
                nullable: true
                description: >-
                  Pontuação de correspondência facial entre o retrato extraído
                  da imagem da frente do documento e a imagem da câmara frontal
              back_image_camera_front_face_match_score:
                type: number
                nullable: true
                description: >-
                  Pontuação de correspondência facial entre o retrato extraído
                  da imagem do verso do documento e a imagem da câmara frontal
              document_selfie_face_matches:
                type: array
                description: >-
                  Sessões anteriores ou entradas na lista de bloqueio facial
                  cujo rosto correspondeu à selfie tirada pela câmara frontal
                  durante a captura do documento (Silent Capture Face Search). O
                  mesmo formato de entrada que `liveness_checks[].matches`.
                  `null` para sessões criadas antes da existência deste campo ou
                  quando a pesquisa não foi executada; um array vazio quando foi
                  executada e não encontrou nada. `match_image_url` é um URL
                  pré-assinado que expira.
                items:
                  type: object
                  properties:
                    session_id:
                      type: string
                      format: uuid
                      nullable: true
                      description: >-
                        ID de sessão do rosto correspondente. `null` quando
                        `source` é `imported`, `list_entry` ou
                        `retained_template`.
                    session_number:
                      type: integer
                      nullable: true
                    similarity_percentage:
                      type: number
                      description: >-
                        Semelhança facial entre as duas imagens, limitada a
                        0–100.
                    vendor_data:
                      type: string
                      nullable: true
                      description: >-
                        `vendor_data` da sessão correspondente ou utilizador
                        associado para rostos importados e com modelo retido.
                    vendor_user_id:
                      type: string
                      format: uuid
                      nullable: true
                      description: >-
                        ID do utilizador vinculado para correspondências de
                        `imported` e `retained_template` e para correspondências
                        de sessão vinculadas a um utilizador. `null` para
                        entradas de lista e sessões sem utilizador.
                    biometric_template_id:
                      type: string
                      format: uuid
                      nullable: true
                      description: >-
                        ID do template biométrico retido. Definido apenas quando
                        `source` é `retained_template`; `null` caso contrário.
                    verification_date:
                      type: string
                      format: date-time
                      nullable: true
                      description: >-
                        Quando o rosto correspondente foi capturado ou quando um
                        modelo retido foi criado. `null` para entradas de lista.
                    user_details:
                      type: object
                      nullable: true
                      description: >-
                        Dados de identidade da sessão correspondente ou do
                        perfil de Utilizador importado. Sempre `null` para
                        correspondências de `retained_template` e `list_entry`.
                      properties:
                        full_name:
                          type: string
                          nullable: true
                        document_type:
                          type: string
                          nullable: true
                        document_number:
                          type: string
                          nullable: true
                    match_image_url:
                      type: string
                      format: uri
                      nullable: true
                      description: >-
                        Imagem de referência para correspondências baseadas em
                        imagens. Sempre `null` para correspondências de
                        `retained_template` porque os modelos retidos não contêm
                        imagem.
                    status:
                      type: string
                      nullable: true
                      description: >-
                        Estado do ciclo de vida da sessão correspondente. `null`
                        para fontes que não sejam sessões.
                    is_blocklisted:
                      type: boolean
                      description: >-
                        Indica se o rosto correspondente está numa lista de
                        bloqueio.
                    is_allowlisted:
                      type: boolean
                      description: >-
                        Indica se o rosto correspondente está numa lista de
                        permissões.
                    api_service:
                      type: string
                      nullable: true
                      description: >-
                        Serviço da API autónomo da sessão correspondente (por
                        exemplo, `PASSIVE_LIVENESS`, `FACE_MATCH`); `null` para
                        sessões de fluxo e origens que não sejam sessões.
                    source:
                      type: string
                      enum:
                        - session
                        - imported
                        - list_entry
                        - retained_template
                      description: >-
                        Origem da face correspondente: `session`, `imported`
                        (carregamento de face de utilizador), `list_entry`
                        (lista de permissão/bloqueio) ou `retained_template` (um
                        modelo biométrico sem imagem armazenado num utilizador,
                        listado em `/v3/biometric-templates/`).
                nullable: true
              front_image_quality_score:
                type: object
                nullable: true
                description: >-
                  Métricas de qualidade para a imagem da frente do documento.
                  Cada subpontuação varia de 0 a 100.
                properties:
                  focus_score:
                    type: number
                    description: >-
                      Nitidez da imagem medida através da variância Laplaciana
                      local dos 10% superiores. Robusta para documentos com
                      fundos uniformes alargados. Valores mais altos indicam uma
                      imagem mais nítida e menos desfocada.
                  brightness_score:
                    type: number
                    description: >-
                      O nível de iluminação da imagem. Penaliza imagens
                      demasiado escuras ou sobre-expostas, sendo a luminosidade
                      ideal no intervalo médio.
                  brightness_issue:
                    type: string
                    enum:
                      - ok
                      - too_dark
                      - too_bright
                    description: >-
                      Indica a direção do problema de luminosidade quando o
                      brightness_score é baixo. 'ok' significa que a
                      luminosidade é aceitável, 'too_dark' significa que a
                      imagem está subexposta, 'too_bright' significa que a
                      imagem está sobre-exposta.
                  is_document_fully_visible:
                    type: boolean
                    nullable: true
                    description: >-
                      true se os quatro cantos do documento estiverem totalmente
                      visíveis dentro do enquadramento da imagem, false se algum
                      canto estiver cortado. Null quando as coordenadas dos
                      cantos não estiverem disponíveis.
                  resolution_score:
                    type: number
                    description: >-
                      Resolução efetiva da imagem com base no número total de
                      píxeis.
                  overall_score:
                    type: number
                    description: >-
                      Composto ponderado de subpontuações (foco 45%, brilho 30%,
                      resolução 25%).
              back_image_quality_score:
                type: object
                nullable: true
                description: >-
                  Métricas de qualidade para a imagem do verso do documento.
                  Mesma estrutura que front_image_quality_score.
                properties:
                  focus_score:
                    type: number
                    description: >-
                      Nitidez da imagem medida através da variância Laplaciana
                      local dos 10% superiores. Robusta para documentos com
                      fundos uniformes alargados. Valores mais altos indicam uma
                      imagem mais nítida e menos desfocada.
                  brightness_score:
                    type: number
                    description: >-
                      O nível de iluminação da imagem. Penaliza imagens
                      demasiado escuras ou sobre-expostas, sendo a luminosidade
                      ideal no intervalo médio.
                  brightness_issue:
                    type: string
                    enum:
                      - ok
                      - too_dark
                      - too_bright
                    description: >-
                      Indica a direção do problema de luminosidade quando o
                      brightness_score é baixo. 'ok' significa que a
                      luminosidade é aceitável, 'too_dark' significa que a
                      imagem está subexposta, 'too_bright' significa que a
                      imagem está sobre-exposta.
                  is_document_fully_visible:
                    type: boolean
                    nullable: true
                    description: >-
                      true se os quatro cantos do documento estiverem totalmente
                      visíveis dentro do enquadramento da imagem, false se algum
                      canto estiver cortado. Null quando as coordenadas dos
                      cantos não estiverem disponíveis.
                  resolution_score:
                    type: number
                    description: >-
                      Resolução efetiva da imagem com base no número total de
                      píxeis.
                  overall_score:
                    type: number
                    description: >-
                      Composto ponderado de subpontuações (foco 45%, brilho 30%,
                      resolução 25%).
              warnings:
                type: array
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        A funcionalidade que gerou este aviso (por exemplo,
                        `ID_VERIFICATION`, `NFC`, `LIVENESS`). O valor
                        identifica o bloco de funcionalidade a que o aviso
                        pertence. O array de avisos de cada módulo utiliza
                        tipicamente o valor correspondente ao seu módulo, mas o
                        enum acima é a referência autoritativa para todos os
                        avisos de funcionalidades no payload da decisão.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                      description: Dados contextuais adicionais sobre o aviso
                    log_type:
                      type: string
                      description: 'Tipo de registo: informação, aviso ou erro'
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: >-
                        O ID do nó do grafo do fluxo que gerou este aviso (para
                        fluxos baseados em grafos)
                description: Avisos de verificação de documentos
              matches:
                type: array
                description: >-
                  Documentos correspondentes encontrados durante a deteção de
                  duplicados/lista de bloqueio (até 5 correspondências)
                items:
                  type: object
                  properties:
                    session_id:
                      type: string
                      format: uuid
                      description: ID de sessão do documento correspondente
                    session_number:
                      type: integer
                      description: Número de sessão do documento correspondente
                    vendor_data:
                      type: string
                      nullable: true
                      description: Dados do fornecedor associados à sessão correspondente
                    verification_date:
                      type: string
                      format: date-time
                      description: Data em que a sessão correspondente foi verificada
                    user_details:
                      type: object
                      properties:
                        name:
                          type: string
                          description: Nome completo constante do documento correspondente
                        document_type:
                          type: string
                          description: Tipo do documento correspondente
                        document_number:
                          type: string
                          description: Número do documento correspondente
                    status:
                      type: string
                      description: Estado da sessão correspondente
                    is_blocklisted:
                      type: boolean
                      description: >-
                        Indica se o documento correspondente está na lista de
                        bloqueio
                    api_service:
                      type: string
                      nullable: true
                      description: Tipo de serviço de API da sessão correspondente
                    front_image_url:
                      type: string
                      format: uri
                      nullable: true
                      description: URL da imagem da frente do documento correspondente
              document_liveness:
                type: object
                nullable: true
                description: >-
                  Pontuações de prova de vida do documento por tipo de fraude,
                  comunicadas independentemente de ter sido acionado um aviso,
                  para que um documento aprovado possa continuar a ser auditado.
                  `null` quando a verificação não foi executada.
                properties:
                  portrait_replace:
                    type: object
                    nullable: true
                    properties:
                      score:
                        type: number
                        nullable: true
                        description: >-
                          Probabilidade de o documento ser genuíno para este
                          tipo de fraude, 0-100 (mais elevado = maior
                          probabilidade de ser genuíno). O valor mais baixo de
                          ambos os lados - o valor utilizado na decisão. `null`
                          quando nenhum dos lados produziu uma pontuação
                          utilizável.
                      front:
                        type: number
                        nullable: true
                        description: >-
                          Pontuação para a frente; `null` quando não capturada
                          ou quando a pontuação foi descartada.
                      back:
                        type: number
                        nullable: true
                        description: >-
                          Pontuação para o verso; `null` quando não capturado ou
                          quando a pontuação foi descartada.
                      decline_threshold:
                        type: number
                        nullable: true
                        description: >-
                          O limiar de recusa guardado quando este documento foi
                          avaliado. Edições posteriores do fluxo não o alteram.
                          Null quando as evidências históricas de avaliação não
                          estiverem disponíveis.
                      review_threshold:
                        type: number
                        nullable: true
                        description: >-
                          O limiar de revisão guardado quando este documento foi
                          avaliado. Edições posteriores do fluxo não o alteram.
                          Null quando os elementos de prova da avaliação
                          histórica não estiverem disponíveis.
                      bucket:
                        type: string
                        nullable: true
                        enum:
                          - approve
                          - review
                          - decline
                          - null
                        description: >-
                          A categoria de tipo de fraude guardada no momento da
                          avaliação. Nulo quando não existe pontuação
                          utilizável, a verificação não foi aplicada ou as
                          provas de avaliação histórica não estão disponíveis.
                          Edições posteriores do fluxo não a alteram.
                  printed_copy:
                    type: object
                    nullable: true
                    properties:
                      score:
                        type: number
                        nullable: true
                        description: >-
                          Probabilidade de o documento ser genuíno para este
                          tipo de fraude, 0-100 (mais elevado = maior
                          probabilidade de ser genuíno). O valor mais baixo de
                          ambos os lados - o valor utilizado na decisão. `null`
                          quando nenhum dos lados produziu uma pontuação
                          utilizável.
                      front:
                        type: number
                        nullable: true
                        description: >-
                          Pontuação para a frente; `null` quando não capturada
                          ou quando a pontuação foi descartada.
                      back:
                        type: number
                        nullable: true
                        description: >-
                          Pontuação para o verso; `null` quando não capturado ou
                          quando a pontuação foi descartada.
                      decline_threshold:
                        type: number
                        nullable: true
                        description: >-
                          O limiar de recusa guardado quando este documento foi
                          avaliado. Edições posteriores do fluxo não o alteram.
                          Null quando as evidências históricas de avaliação não
                          estiverem disponíveis.
                      review_threshold:
                        type: number
                        nullable: true
                        description: >-
                          O limiar de revisão guardado quando este documento foi
                          avaliado. Edições posteriores do fluxo não o alteram.
                          Null quando os elementos de prova da avaliação
                          histórica não estiverem disponíveis.
                      bucket:
                        type: string
                        nullable: true
                        enum:
                          - approve
                          - review
                          - decline
                          - null
                        description: >-
                          A categoria de tipo de fraude guardada no momento da
                          avaliação. Nulo quando não existe pontuação
                          utilizável, a verificação não foi aplicada ou as
                          provas de avaliação histórica não estão disponíveis.
                          Edições posteriores do fluxo não a alteram.
                  screen_replay:
                    type: object
                    nullable: true
                    properties:
                      score:
                        type: number
                        nullable: true
                        description: >-
                          Probabilidade de o documento ser genuíno para este
                          tipo de fraude, 0-100 (mais elevado = maior
                          probabilidade de ser genuíno). O valor mais baixo de
                          ambos os lados - o valor utilizado na decisão. `null`
                          quando nenhum dos lados produziu uma pontuação
                          utilizável.
                      front:
                        type: number
                        nullable: true
                        description: >-
                          Pontuação para a frente; `null` quando não capturada
                          ou quando a pontuação foi descartada.
                      back:
                        type: number
                        nullable: true
                        description: >-
                          Pontuação para o verso; `null` quando não capturado ou
                          quando a pontuação foi descartada.
                      decline_threshold:
                        type: number
                        nullable: true
                        description: >-
                          O limiar de recusa guardado quando este documento foi
                          avaliado. Edições posteriores do fluxo não o alteram.
                          Null quando as evidências históricas de avaliação não
                          estiverem disponíveis.
                      review_threshold:
                        type: number
                        nullable: true
                        description: >-
                          O limiar de revisão guardado quando este documento foi
                          avaliado. Edições posteriores do fluxo não o alteram.
                          Null quando os elementos de prova da avaliação
                          histórica não estiverem disponíveis.
                      bucket:
                        type: string
                        nullable: true
                        enum:
                          - approve
                          - review
                          - decline
                          - null
                        description: >-
                          A categoria de tipo de fraude guardada no momento da
                          avaliação. Nulo quando não existe pontuação
                          utilizável, a verificação não foi aplicada ou as
                          provas de avaliação histórica não estão disponíveis.
                          Edições posteriores do fluxo não a alteram.
              address_validation:
                allOf:
                  - $ref: '#/components/schemas/AddressValidationResult'
                nullable: true
                description: >-
                  Validação de endereço da morada impressa neste documento: se
                  existe e a sua forma normalizada, tal como lida no documento
                  (uma correção posterior de `address` não a executa novamente).
                  Presente quando este passo de Verificação de identidade ativou
                  o suplemento de Validação de endereço; `null` caso contrário.
              region:
                type: string
                nullable: true
                description: >-
                  Região ou estado do país emissor do documento, quando o
                  documento identifica algum.
              extracted_data:
                type: object
                nullable: true
                additionalProperties: true
                description: >-
                  Instantâneo dos dados extraídos do documento e apresentados à
                  pessoa para revisão, mantidos ao lado dos valores confirmados
                  para que possa comparar o que foi lido com o que a pessoa
                  confirmou. `null` quando não foi pedido à pessoa que fizesse a
                  revisão.
              barcodes:
                type: array
                items:
                  type: object
                  additionalProperties: true
                description: >-
                  Dados lidos dos códigos de barras do documento. Vazio quando o
                  documento não tem nenhum ou nenhum foi lido.
        nfc_skip_reason:
          type: string
          nullable: true
          enum:
            - USER_SKIPPED
            - DOCUMENT_WITHOUT_CHIP
            - CHIP_CERTIFICATE_UNAVAILABLE
            - DEVICE_WITHOUT_NFC
            - INTEGRATION_WITHOUT_NFC_ACCESS
            - MRZ_KEY_UNAVAILABLE
            - JPKI_UNAVAILABLE
          description: >-
            O motivo pelo qual a verificação do chip NFC não foi executada,
            preenchido sempre que o fluxo incluir um passo de NFC. `null`
            enquanto o NFC estiver pendente ou quando o chip tiver sido
            efetivamente lido. Valores: `USER_SKIPPED` - o utilizador optou por
            ignorar num dispositivo compatível com NFC (permitido por
            `allow_nfc_skip`); `DOCUMENT_WITHOUT_CHIP` - o documento não possui
            nenhum chip NFC legível (não é um documento eletrónico ICAO 9303);
            `CHIP_CERTIFICATE_UNAVAILABLE` - o certificado de assinatura do país
            emissor (CSCA) que abrange o período de emissão do documento não
            está disponível, pelo que a assinatura do chip não pode ser
            verificada; `DEVICE_WITHOUT_NFC` - o dispositivo indicou que não tem
            leitor NFC; `INTEGRATION_WITHOUT_NFC_ACCESS` - a verificação foi
            executada sem um SDK nativo (por exemplo, num navegador web), que
            não tem acesso ao leitor NFC do telemóvel; `MRZ_KEY_UNAVAILABLE` -
            não foi possível obter a chave de acesso ao chip a partir da MRZ do
            documento; `JPKI_UNAVAILABLE` - o documento é um Japan My Number
            Card, cujo chip é lido através de JPKI, e o JPKI não estava
            disponível para esta verificação: não está ativado, ou o SDK nativo
            da aplicação não consegue ler My Number Cards.
        nfc_verifications:
          type: array
          nullable: true
          description: >-
            **Array de relatórios de NFC / passaporte eletrónico** produzidos
            por passos de NFC no grafo do fluxo. **Isto é sempre um array JSON,
            nunca um objeto `nfc` singular** — leia `nfc_verifications[0]` e
            itere se o seu fluxo puder executar NFC mais do que uma vez. `null`
            até que pelo menos um passo de NFC tenha produzido dados. Cada item
            é o relatório completo, incluindo `node_id`, `status` ao nível da
            funcionalidade, `chip_protocol`, `chip_data`, `authenticity`
            (integridade de SOD + DG), `certificate_summary` e `warnings[]`. O
            cartão My Number do Japão é lido através de JPKI em vez do ICAO
            9303: o seu item tem `chip_protocol: "jpki"`, contém as suas
            evidências em `jpki` e deixa os campos ICAO a `null`. Quando o passo
            de NFC foi ignorado antes de poder ser oferecido (documento sem
            chip, certificado em falta, nenhuma capacidade NFC reportada, chave
            MRZ ilegível, JPKI indisponível para um cartão My Number), este
            permanece `null` e `nfc_skip_reason` explica o motivo; ignorar no
            próprio passo (o utilizador tocou em «Ignorar», ou o leitor
            revelou-se indisponível no momento da leitura) continua a produzir
            um relatório com `is_nfc_skipped: true`.
          items:
            type: object
            description: >-
              Um relatório NFC: o relatório completo de uma única leitura de
              chip (um chip de passaporte eletrónico ou eID ICAO 9303, ou um
              Japan My Number Card lido através de JPKI).
            properties:
              node_id:
                type: string
                description: >-
                  ID do nó do grafo do fluxo do passo de NFC que gerou este
                  relatório. Utilize-o para correlacionar o relatório com a
                  definição do fluxo.
              status:
                type: string
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Resub Requested
                description: >-
                  Estado ao nível da funcionalidade deste passo de NFC.
                  Independente do `status` da sessão de nível superior — uma
                  sessão pode alcançar a sua decisão global enquanto uma
                  funcionalidade individual permanece `In Review`.
              is_nfc_skipped:
                type: boolean
                description: >-
                  `true` quando este passo de NFC foi explicitamente ignorado em
                  vez de lido; `skip_reason` indica o motivo.
              skip_reason:
                type: string
                nullable: true
                enum:
                  - USER_SKIPPED
                  - DOCUMENT_WITHOUT_CHIP
                  - CHIP_CERTIFICATE_UNAVAILABLE
                  - DEVICE_WITHOUT_NFC
                  - INTEGRATION_WITHOUT_NFC_ACCESS
                  - MRZ_KEY_UNAVAILABLE
                  - JPKI_UNAVAILABLE
                description: >-
                  O motivo pelo qual este passo de NFC foi ignorado. Definido
                  apenas quando `is_nfc_skipped` é `true`. Mesma taxonomia de
                  `nfc_skip_reason` ao nível da sessão, que cobre adicionalmente
                  os casos em que o NFC nunca chegou a produzir um relatório.
              chip_protocol:
                type: string
                enum:
                  - icao
                  - jpki
                description: >-
                  Como o passo de NFC lê o chip. `icao`: chip de ePassport ou
                  eID ICAO 9303, aberto com a chave de acesso do MRZ. `jpki`:
                  Japan My Number Card, em que o cartão assina um desafio de
                  utilização única após o titular introduzir o PIN do cartão num
                  SDK nativo; o resultado encontra-se sob `jpki`. Também
                  definido em passos ignorados, para que possa distinguir a
                  leitura de um My Number Card que foi ignorada.
              jpki:
                type: object
                nullable: true
                description: >-
                  O que a leitura de um cartão My Number do Japão através de
                  JPKI comprovou. Presente quando `chip_protocol` é `jpki` e o
                  cartão foi lido. `null` para chips ICAO, para passos ignorados
                  e quando o passo de NFC terminou sem a leitura de qualquer
                  cartão (nesse caso é gerado `JPKI_SIGNATURE_INVALID`). Nunca
                  inclui os certificados, os respetivos números de série, as
                  assinaturas ou o My Number de 12 dígitos.
                properties:
                  certificate_types:
                    type: array
                    items:
                      type: string
                      enum:
                        - user_authentication
                        - signature
                    description: >-
                      Os certificados do cartão lidos. `user_authentication`
                      (PIN de 4 dígitos) é sempre lido; `signature` (PIN de
                      assinatura) é lido quando a definição
                      `jpki_request_attributes` do nó NFC está ativada.
                  chain_valid:
                    type: boolean
                    description: >-
                      `true` quando cada certificado lido forma uma cadeia até à
                      autoridade de certificação JPKI, está dentro do seu
                      período de validade e é um certificado My Number Card do
                      respetivo tipo.
                  signature_valid:
                    type: boolean
                    description: >-
                      `true` quando todas as assinaturas efetuadas pelo cartão
                      sobre o desafio de utilização única são verificadas. O
                      cartão só assina após a introdução do respetivo PIN, pelo
                      que isto comprova a posse do cartão e o conhecimento do
                      PIN.
                  revocation_status:
                    type: string
                    enum:
                      - good
                      - revoked
                      - unchecked
                    description: >-
                      `good` quando a verificação de revogação confirmou que
                      todos os certificados são válidos, `revoked` quando algum
                      certificado está revogado (por exemplo, um cartão
                      reportado como perdido), `unchecked` quando nenhuma
                      resposta de revogação estava disponível. `unchecked` nunca
                      é tratado como `good`: o
                      `jpki_revocation_unchecked_action` do nó NFC decide o
                      resultado (padrão `REVIEW`).
                  ca_generation:
                    type: string
                    nullable: true
                    description: >-
                      Geração da autoridade de certificação JPKI que emitiu os
                      certificados, por exemplo `2023`. `null` quando nenhum
                      certificado forma uma cadeia até uma autoridade desse
                      tipo.
                  certificate_expires_at:
                    type: string
                    format: date-time
                    nullable: true
                    description: >-
                      A data de validade mais próxima entre os certificados
                      lidos.
                  certificates:
                    type: array
                    items:
                      type: object
                      description: >-
                        O que um certificado lido a partir do cartão comprovou.
                        Nunca o certificado em si ou o seu número de série.
                      properties:
                        type:
                          type: string
                          enum:
                            - user_authentication
                            - signature
                          description: >-
                            Qual o certificado do cartão que esta entrada
                            descreve.
                        chain_valid:
                          type: boolean
                          description: >-
                            `true` quando o certificado forma uma cadeia até à
                            autoridade de certificação JPKI do seu tipo, está
                            dentro do seu período de validade e é um certificado
                            My Number Card desse tipo.
                        signature_valid:
                          type: boolean
                          description: >-
                            `true` quando a assinatura do cartão sobre o desafio
                            de utilização única é verificada com este
                            certificado.
                        ca_generation:
                          type: string
                          nullable: true
                          description: >-
                            Geração da autoridade de certificação JPKI que
                            emitiu o certificado, por exemplo `2023`. `null`
                            quando não foi encontrado nenhum emissor fidedigno.
                        not_valid_before:
                          type: string
                          format: date-time
                          nullable: true
                          description: >-
                            Início do período de validade do certificado. `null`
                            quando não foi possível ler o certificado.
                        not_valid_after:
                          type: string
                          format: date-time
                          nullable: true
                          description: >-
                            Fim do período de validade do certificado. `null`
                            quando não foi possível ler o certificado.
                        failure:
                          type: string
                          nullable: true
                          enum:
                            - unreadable_certificate
                            - untrusted_issuer
                            - expired
                            - not_yet_valid
                            - wrong_policy
                            - key_usage
                            - null
                          description: >-
                            O motivo pelo qual `chain_valid` é `false`:
                            `unreadable_certificate`, `untrusted_issuer` (não
                            emitido pela autoridade de certificação JPKI do seu
                            tipo), `expired`, `not_yet_valid`, `wrong_policy`
                            (não é um certificado My Number Card desse tipo) ou
                            `key_usage` (a chave não pode assinar). `null`
                            quando a cadeia é válida.
                    description: >-
                      Resultados por certificado, uma entrada por certificado
                      lido.
                  attributes:
                    type: object
                    nullable: true
                    description: >-
                      Os dados do titular extraídos do certificado de
                      assinatura, assim que a respetiva cadeia seja válida.
                      `null` quando o certificado de assinatura não foi
                      solicitado ou não encadeou até à autoridade de
                      certificação JPKI.
                    properties:
                      full_name:
                        type: string
                        nullable: true
                        description: >-
                          Nome conforme registado, habitualmente no sistema de
                          escrita japonês.
                      date_of_birth:
                        type: string
                        format: date
                        nullable: true
                        description: >-
                          Data de nascimento, `YYYY-MM-DD`. `null` quando a data
                          registada está incompleta.
                      gender:
                        type: string
                        nullable: true
                        enum:
                          - M
                          - F
                          - null
                        description: '`M`, `F`, ou `null` quando não registado.'
                      address:
                        type: string
                        nullable: true
                        description: Morada registada.
                      name_substitute_characters:
                        type: string
                        nullable: true
                        description: >-
                          String de posição que marca os caracteres de
                          `full_name` que foram substituídos por um substituto
                          porque o caractere original está fora do conjunto de
                          caracteres padrão. `null` quando nenhum foi
                          substituído.
                      address_substitute_characters:
                        type: string
                        nullable: true
                        description: >-
                          String de posição que marca caracteres de substituição
                          em `address`, tal como para
                          `name_substitute_characters`.
                  attributes_match_ocr:
                    type: boolean
                    nullable: true
                    description: >-
                      `true` quando os atributos correspondem aos dados lidos da
                      fotografia do mesmo cartão, `false` quando qualquer
                      atributo for diferente (`JPKI_AND_OCR_DATA_NOT_SAME`),
                      `null` quando nada pôde ser comparado, incluindo sempre
                      que `attributes` seja `null`.
                  mismatched_attributes:
                    type: array
                    items:
                      type: string
                      enum:
                        - full_name
                        - date_of_birth
                        - gender
                        - address
                    description: >-
                      Nomes dos atributos que diferem dos dados da fotografia,
                      nunca os seus valores. Vazio quando tudo o que foi
                      comparado coincide.
              portrait_image:
                type: string
                format: uri
                nullable: true
                description: >-
                  URL pré-assinado para o retrato lido a partir do chip (ICAO
                  DG2). `null` para uma leitura JPKI (`chip_protocol: "jpki"`) e
                  para passos ignorados.
              signature_image:
                type: string
                format: uri
                nullable: true
                description: >-
                  URL pré-assinado para a imagem da assinatura do titular lida a
                  partir do chip (ICAO DG7), quando o chip contém uma. `null`
                  para uma leitura JPKI (`chip_protocol: "jpki"`) e para passos
                  ignorados.
              chip_data:
                type: object
                nullable: true
                description: >-
                  Dados pessoais analisados a partir dos Data Groups do chip
                  ICAO. `null` para uma leitura JPKI (`chip_protocol: "jpki"`) e
                  para passos ignorados.
                properties:
                  document_type:
                    type: string
                  issuing_country:
                    type: string
                  document_number:
                    type: string
                  expiration_date:
                    type: string
                    format: date
                  first_name:
                    type: string
                  last_name:
                    type: string
                  birth_date:
                    type: string
                    format: date
                  gender:
                    type: string
                  nationality:
                    type: string
                  address:
                    type: string
                  place_of_birth:
                    type: string
              authenticity:
                type: object
                nullable: true
                description: >-
                  Autenticação passiva ICAO: assinatura SOD (`sod_integrity`) e
                  hashes de Data Group (`dg_integrity`). `null` para uma leitura
                  JPKI, que reporta a sua prova em `jpki`.
                properties:
                  sod_integrity:
                    type: boolean
                  dg_integrity:
                    type: boolean
              certificate_summary:
                type: object
                nullable: true
                description: >-
                  Resumo do certificado de assinatura de documentos da ICAO.
                  `null` para uma leitura JPKI (`chip_protocol: "jpki"`) e para
                  passos ignorados.
                properties:
                  issuer:
                    type: string
                  subject:
                    type: string
                  serial_number:
                    type: string
                  not_valid_after:
                    type: string
                    format: date-time
                  not_valid_before:
                    type: string
                    format: date-time
              warnings:
                type: array
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        A funcionalidade que gerou este aviso. O valor
                        identifica o bloco de funcionalidade a que o aviso
                        pertence. O array de avisos de cada módulo utiliza
                        tipicamente o valor correspondente ao seu módulo (por
                        exemplo, `PHONE` dentro de
                        `phone_verifications[].warnings`), mas o enum acima é a
                        referência autoritativa para todos os avisos de
                        funcionalidades no payload da decisão.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: O ID do nó do grafo do fluxo que gerou este aviso
        liveness_checks:
          type: array
          nullable: true
          description: >-
            **Array de relatórios de prova de vida** produzidos por passos de
            prova de vida no grafo do fluxo. Sempre um array JSON — nunca um
            objeto `liveness` singular. `null` até que pelo menos um passo de
            prova de vida tenha produzido dados. Cada item é o relatório
            completo, incluindo `node_id`, `status` ao nível da funcionalidade,
            `method`, `score`, `reference_image`, `video_url`, `age_estimation`
            opcional, `matches[]` entre sessões e `warnings[]`.
          items:
            type: object
            description: >-
              Um relatório de prova de vida — o relatório completo de uma única
              verificação de prova de vida.
            properties:
              node_id:
                type: string
                description: >-
                  ID do nó do grafo do fluxo do passo de prova de vida que gerou
                  este relatório.
              status:
                type: string
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Resub Requested
                description: >-
                  Estado ao nível da funcionalidade deste passo de prova de
                  vida. Independente do `status` da sessão de nível superior —
                  uma sessão pode alcançar a sua decisão global enquanto uma
                  funcionalidade individual permanece `In Review`.
              method:
                type: string
                description: Método utilizado para a prova de vida
              score:
                type: number
                description: Pontuação de confiança da prova de vida
              reference_image:
                type: string
                format: uri
                description: URL da imagem de referência utilizada
              video_url:
                type: string
                format: uri
                description: URL do vídeo da verificação de prova de vida
              age_estimation:
                type: number
                description: Idade estimada da pessoa
              matches:
                type: array
                description: >-
                  Rostos semelhantes encontrados pela pesquisa de rostos
                  duplicados (melhores correspondências, entradas na lista de
                  bloqueio/lista de permissões em primeiro lugar). O campo
                  `source` de cada entrada indica de onde veio o rosto
                  correspondente: `session` (outra sessão de verificação),
                  `imported` (um rosto carregado associado a um utilizador do
                  fornecedor), `list_entry` (um rosto da lista de
                  permissões/bloqueio gerida pela organização) ou
                  `retained_template` (um template biométrico sem imagem
                  armazenado num utilizador, listado em
                  `/v3/biometric-templates/`). `session_id`, `session_number`,
                  `status` e `api_service` são `null` para fontes que não sejam
                  sessões. As correspondências `imported` continuam a preencher
                  `vendor_data`, `verification_date` e — quando o utilizador do
                  fornecedor tem um nome registado — `user_details` (apenas com
                  `full_name`) a partir do registo do utilizador do fornecedor;
                  as correspondências `retained_template` preenchem
                  `vendor_user_id`, `vendor_data`, `biometric_template_id` e
                  `verification_date`, enquanto os seus campos de imagem e
                  identidade são `null`; as correspondências `list_entry`
                  devolvem todos estes como `null`.
                items:
                  type: object
                  properties:
                    session_id:
                      type: string
                      format: uuid
                      nullable: true
                      description: >-
                        ID de sessão do rosto correspondente. `null` quando
                        `source` é `imported`, `list_entry` ou
                        `retained_template`.
                    session_number:
                      type: integer
                      nullable: true
                    similarity_percentage:
                      type: number
                      description: >-
                        Semelhança facial entre as duas imagens, limitada a
                        0–100.
                    vendor_data:
                      type: string
                      nullable: true
                      description: >-
                        `vendor_data` da sessão correspondente ou utilizador
                        associado para rostos importados e com modelo retido.
                    vendor_user_id:
                      type: string
                      format: uuid
                      nullable: true
                      description: >-
                        ID do utilizador vinculado para correspondências de
                        `imported` e `retained_template` e para correspondências
                        de sessão vinculadas a um utilizador. `null` para
                        entradas de lista e sessões sem utilizador.
                    biometric_template_id:
                      type: string
                      format: uuid
                      nullable: true
                      description: >-
                        ID do template biométrico retido. Definido apenas quando
                        `source` é `retained_template`; `null` caso contrário.
                    verification_date:
                      type: string
                      format: date-time
                      nullable: true
                      description: >-
                        Quando o rosto correspondente foi capturado ou quando um
                        modelo retido foi criado. `null` para entradas de lista.
                    user_details:
                      type: object
                      nullable: true
                      description: >-
                        Dados de identidade da sessão correspondente ou do
                        perfil de Utilizador importado. Sempre `null` para
                        correspondências de `retained_template` e `list_entry`.
                      properties:
                        full_name:
                          type: string
                          nullable: true
                        document_type:
                          type: string
                          nullable: true
                        document_number:
                          type: string
                          nullable: true
                    match_image_url:
                      type: string
                      format: uri
                      nullable: true
                      description: >-
                        Imagem de referência para correspondências baseadas em
                        imagens. Sempre `null` para correspondências de
                        `retained_template` porque os modelos retidos não contêm
                        imagem.
                    status:
                      type: string
                      nullable: true
                      description: >-
                        Estado do ciclo de vida da sessão correspondente. `null`
                        para fontes que não sejam sessões.
                    is_blocklisted:
                      type: boolean
                      description: >-
                        Indica se o rosto correspondente está numa lista de
                        bloqueio.
                    is_allowlisted:
                      type: boolean
                      description: >-
                        Indica se o rosto correspondente está numa lista de
                        permissões.
                    api_service:
                      type: string
                      nullable: true
                      description: >-
                        Serviço da API autónomo da sessão correspondente (por
                        exemplo, `PASSIVE_LIVENESS`, `FACE_MATCH`); `null` para
                        sessões de fluxo e origens que não sejam sessões.
                    source:
                      type: string
                      enum:
                        - session
                        - imported
                        - list_entry
                        - retained_template
                      description: >-
                        Origem da face correspondente: `session`, `imported`
                        (carregamento de face de utilizador), `list_entry`
                        (lista de permissão/bloqueio) ou `retained_template` (um
                        modelo biométrico sem imagem armazenado num utilizador,
                        listado em `/v3/biometric-templates/`).
              warnings:
                type: array
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        A funcionalidade que gerou este aviso. O valor
                        identifica o bloco de funcionalidade a que o aviso
                        pertence. O array de avisos de cada módulo utiliza
                        tipicamente o valor correspondente ao seu módulo (por
                        exemplo, `PHONE` dentro de
                        `phone_verifications[].warnings`), mas o enum acima é a
                        referência autoritativa para todos os avisos de
                        funcionalidades no payload da decisão.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: O ID do nó do grafo do fluxo que gerou este aviso
              face_quality:
                type: number
                nullable: true
                description: >-
                  Pontuação de qualidade da imagem facial (0-100%). Disponível
                  apenas para prova de vida passiva.
              face_luminance:
                type: number
                nullable: true
                description: >-
                  Pontuação de luminância/brilho do rosto (0-100%). Disponível
                  apenas para prova de vida passiva.
        face_matches:
          type: array
          nullable: true
          description: >-
            **Array de relatórios de correspondência facial** produzidos por
            passos de correspondência facial no grafo do fluxo. Sempre um array
            JSON — nunca um objeto `face_match` singular. `null` até que pelo
            menos um passo de correspondência facial tenha produzido dados. Cada
            item é o relatório completo, incluindo `node_id`, `status` ao nível
            da funcionalidade, `score` de similaridade, `source_image`,
            `target_image` e `warnings[]`.
          items:
            type: object
            description: Um relatório de correspondência facial — o relatório completo.
            properties:
              node_id:
                type: string
                description: >-
                  ID do nó do grafo do fluxo do passo de correspondência facial
                  que gerou este relatório.
              status:
                type: string
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Resub Requested
                description: >-
                  Estado ao nível da funcionalidade deste passo de
                  correspondência facial. Independente do `status` da sessão de
                  nível superior — uma sessão pode alcançar a sua decisão global
                  enquanto uma funcionalidade individual permanece `In Review`.
              score:
                type: number
                description: Pontuação de confiança da correspondência facial
              source_image_session_id:
                type: string
                format: uuid
                nullable: true
                description: >-
                  ID de sessão sob o qual o retrato de origem (referência) está
                  armazenado. Em fluxos de autenticação biométrica, este é o
                  próprio id da sessão (o retrato submetido é armazenado sob a
                  nova sessão). `null` quando a imagem de origem é o retrato do
                  documento da mesma sessão.
              source_image:
                type: string
                format: uri
                description: URL da imagem de origem utilizada para comparação
              target_image:
                type: string
                format: uri
                description: URL da imagem de destino utilizada para comparação
              warnings:
                type: array
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        A funcionalidade que gerou este aviso. O valor
                        identifica o bloco de funcionalidade a que o aviso
                        pertence. O array de avisos de cada módulo utiliza
                        tipicamente o valor correspondente ao seu módulo (por
                        exemplo, `PHONE` dentro de
                        `phone_verifications[].warnings`), mas o enum acima é a
                        referência autoritativa para todos os avisos de
                        funcionalidades no payload da decisão.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: O ID do nó do grafo do fluxo que gerou este aviso
                description: Avisos de verificação da correspondência facial
              face_coverage:
                type: object
                nullable: true
                description: >-
                  Indica se os olhos, a boca e o rosto estão tapados na imagem
                  capturada. Devolvido apenas por `GET
                  /v3/session/{sessionId}/decision/`; não faz parte dos payloads
                  de webhook. `null` quando não existe uma leitura de cobertura.
                properties:
                  eyes:
                    type: object
                    properties:
                      covered:
                        type: boolean
                        nullable: true
                      calibrated:
                        type: boolean
                        nullable: true
                        description: >-
                          `false` significa que a leitura é apenas evidência
                          auxiliar e não desencadeia nenhum aviso.
                      visibility_score:
                        type: number
                        nullable: true
                  mouth:
                    type: object
                    properties:
                      covered:
                        type: boolean
                        nullable: true
                      calibrated:
                        type: boolean
                        nullable: true
                        description: >-
                          `false` significa que a leitura é apenas evidência
                          auxiliar e não desencadeia nenhum aviso.
                      visibility_score:
                        type: number
                        nullable: true
                  face:
                    type: object
                    properties:
                      covered:
                        type: boolean
                        nullable: true
                      calibrated:
                        type: boolean
                        nullable: true
                        description: >-
                          `false` significa que a leitura é apenas evidência
                          auxiliar e não desencadeia nenhum aviso.
                      visibility_score:
                        type: number
                        nullable: true
        phone_verifications:
          type: array
          nullable: true
          description: >-
            **Array de relatórios de verificação de telefone** — sempre um array
            JSON, nunca um objeto `phone` singular. `null` até que pelo menos um
            passo de telefone tenha produzido dados. Cada item é o relatório
            completo, incluindo `node_id`, `status` ao nível da funcionalidade,
            o número de telefone e metadados do país, `lifecycle[]`, `matches[]`
            e `warnings[]`.
          items:
            type: object
            properties:
              node_id:
                type: string
                description: >-
                  Identificador único para este passo de telefone no grafo do
                  fluxo.
              status:
                type: string
                description: >-
                  Estado ao nível da funcionalidade deste passo de verificação
                  de telefone. Independente do `status` da sessão de nível
                  superior — uma sessão pode alcançar a sua decisão global
                  enquanto uma funcionalidade individual permanece `In Review`.
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Expired
              phone_number_prefix:
                type: string
                description: Prefixo do indicativo telefónico do país
              phone_number:
                type: string
                description: Número de telefone sem prefixo de país
              full_number:
                type: string
                description: Número de telefone completo com indicativo do país
              country_code:
                type: string
                description: Código de país de duas letras (ISO 3166-1 alfa-2)
              country_name:
                type: string
                description: Nome completo do país
              carrier:
                type: object
                properties:
                  name:
                    type: string
                    description: Nome da operadora telefónica
                  type:
                    type: string
                    description: Tipo de linha telefónica (móvel, fixa, etc.)
              is_disposable:
                type: boolean
                description: Se o número de telefone é de um serviço descartável
              is_virtual:
                type: boolean
                description: Se o número de telefone é virtual
              verification_method:
                type: string
                description: Método utilizado para verificar o número de telefone
              verification_attempts:
                type: integer
                description: Número de tentativas de verificação realizadas
              verified_at:
                type: string
                format: date-time
                description: Carimbo de data/hora de quando o telefone foi verificado
              lifecycle:
                type: array
                description: >-
                  Lista cronológica de eventos no ciclo de vida da verificação
                  de telefone.
                items:
                  type: object
                  properties:
                    type:
                      type: string
                    timestamp:
                      type: string
                      format: date-time
                    details:
                      type: object
                      nullable: true
                      description: >-
                        Payload específico do evento. Os eventos de envio contêm
                        `status`, `reason`, `channel`, `actual_channel`; os
                        eventos de entrega contêm `channel`, `status`; os
                        eventos de verificação de código contêm `code_tried`,
                        `status`; os eventos de estado final contêm `reason` —
                        ou `null` quando não há motivo a reportar (por exemplo,
                        `PHONE_VERIFICATION_APPROVED`).
                      properties:
                        status:
                          type: string
                        reason:
                          type: string
                          nullable: true
                        channel:
                          type: string
                          nullable: true
                        actual_channel:
                          type: string
                          nullable: true
                        code_tried:
                          type: string
                    fee:
                      type: number
              warnings:
                type: array
                description: Lista de avisos relacionados com a verificação de telefone
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        A funcionalidade que gerou este aviso. O valor
                        identifica o bloco de funcionalidade a que o aviso
                        pertence. O array de avisos de cada módulo utiliza
                        tipicamente o valor correspondente ao seu módulo (por
                        exemplo, `PHONE` dentro de
                        `phone_verifications[].warnings`), mas o enum acima é a
                        referência autoritativa para todos os avisos de
                        funcionalidades no payload da decisão.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: O ID do nó do grafo do fluxo que gerou este aviso
              matches:
                type: array
                description: >-
                  Correspondências encontradas para este número de telefone.
                  Cada correspondência tem uma `source`: `session` (outra sessão
                  de verificação na sua aplicação correspondeu ao mesmo número,
                  devolvida com
                  `session_id`/`session_number`/`vendor_data`/`verification_date`)
                  ou `list_entry` (o número está numa lista de
                  permissão/bloqueio gerida pela organização — consulte
                  `/management-api/lists/overview`). As correspondências entre
                  sessões utilizam diferentes `vendor_data` e estão limitadas a
                  5.
                items:
                  type: object
                  properties:
                    session_id:
                      type: string
                      format: uuid
                      nullable: true
                    session_number:
                      type: integer
                      nullable: true
                    vendor_data:
                      type: string
                      nullable: true
                    verification_date:
                      type: string
                      format: date-time
                      nullable: true
                    phone_number:
                      type: string
                    status:
                      type: string
                      nullable: true
                    is_blocklisted:
                      type: boolean
                    api_service:
                      type: string
                      nullable: true
                    source:
                      type: string
                      enum:
                        - session
                        - list_entry
                      description: >-
                        Origem desta correspondência. `session` significa que
                        outra sessão de verificação na sua aplicação
                        correspondeu a este valor. `list_entry` significa que o
                        valor coincidiu com uma lista gerida pela organização
                        (lista de permissões/lista de bloqueio) — consulte a
                        visão geral de listas da API de gestão em
                        `/management-api/lists/overview` para saber como gerir
                        essas listas.
              phone_intelligence:
                allOf:
                  - $ref: '#/components/schemas/PhoneIntelligence'
                description: >-
                  Sinais de inteligência telefónica. Presente apenas quando o
                  módulo adicional de inteligência telefónica foi executado para
                  este número.
              phone_social:
                allOf:
                  - $ref: '#/components/schemas/PhoneSocialFootprint'
                description: >-
                  Presença social (social footprint) do número. Presente apenas
                  quando o suplemento de presença social foi executado para este
                  número.
        email_verifications:
          type: array
          nullable: true
          description: >-
            **Array de relatórios de verificação de e-mail** — sempre um array
            JSON, nunca um objeto `email` singular. `null` até que pelo menos um
            passo de e-mail tenha produzido dados. Cada item é o relatório
            completo, incluindo `node_id`, `status` ao nível da funcionalidade,
            o endereço de e-mail, dados de violações de segurança,
            `lifecycle[]`, `matches[]` e `warnings[]`.
          items:
            type: object
            properties:
              node_id:
                type: string
                description: >-
                  Identificador único para este passo de e-mail no grafo do
                  fluxo.
              status:
                type: string
                description: >-
                  Estado ao nível da funcionalidade deste passo de verificação
                  de e-mail. Independente do `status` da sessão de nível
                  superior — uma sessão pode alcançar a sua decisão global
                  enquanto uma funcionalidade individual permanece `In Review`.
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Expired
              email:
                type: string
                description: O endereço de e-mail que está a ser verificado
              is_breached:
                type: boolean
                description: Indica se o e-mail foi encontrado em fugas de dados conhecidas
              breaches:
                type: array
                description: >-
                  Lista de violações conhecidas em que este e-mail foi
                  encontrado
                items:
                  type: object
                  properties:
                    name:
                      type: string
                      description: Nome da violação
                    domain:
                      type: string
                      description: Domínio afetado pela violação
                    logo_path:
                      type: string
                      description: URL para o logótipo do serviço comprometido
                    breach_date:
                      type: string
                      format: date
                      description: Data em que a violação ocorreu
                    description:
                      type: string
                      description: Descrição da violação
                    is_verified:
                      type: boolean
                      description: Indica se a violação foi verificada
                    data_classes:
                      type: array
                      description: Tipos de dados expostos na violação de dados
                      items:
                        type: string
                    breach_emails_count:
                      type: integer
                      description: >-
                        Número de endereços de e-mail afetados na violação de
                        dados
              is_disposable:
                type: boolean
                description: Indica se o e-mail é de um fornecedor de e-mail descartável
              is_undeliverable:
                type: boolean
                description: Indica se o endereço de e-mail não pode ser entregue
              verification_attempts:
                type: integer
                description: Número de tentativas de verificação para este e-mail
              verified_at:
                type: string
                format: date-time
                description: Carimbo de data/hora de quando o e-mail foi verificado
              warnings:
                type: array
                description: Lista de avisos relacionados com a verificação de e-mail
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        A funcionalidade que gerou este aviso. O valor
                        identifica o bloco de funcionalidade a que o aviso
                        pertence. O array de avisos de cada módulo utiliza
                        tipicamente o valor correspondente ao seu módulo (por
                        exemplo, `PHONE` dentro de
                        `phone_verifications[].warnings`), mas o enum acima é a
                        referência autoritativa para todos os avisos de
                        funcionalidades no payload da decisão.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: O ID do nó do grafo do fluxo que gerou este aviso
              lifecycle:
                type: array
                description: >-
                  Lista cronológica de eventos no ciclo de vida da verificação
                  de e-mail.
                items:
                  type: object
                  properties:
                    type:
                      type: string
                    timestamp:
                      type: string
                      format: date-time
                    details:
                      type: object
                      nullable: true
                      description: >-
                        Payload específico do evento. Os eventos de envio contêm
                        `status`, `reason`; os eventos de verificação de código
                        contêm `code_tried`, `status`; os eventos de estado
                        final contêm `reason` — ou `null` quando não há motivo a
                        reportar (por exemplo, `EMAIL_VERIFICATION_APPROVED`).
                      properties:
                        status:
                          type: string
                        reason:
                          type: string
                          nullable: true
                        code_tried:
                          type: string
                    fee:
                      type: number
              matches:
                type: array
                description: >-
                  Correspondências encontradas para este endereço de e-mail.
                  Cada correspondência tem uma `source`: `session` (outra sessão
                  de verificação na sua aplicação correspondeu ao mesmo e-mail,
                  devolvida com
                  `session_id`/`session_number`/`vendor_data`/`verification_date`)
                  ou `list_entry` (o e-mail está numa lista de
                  permissão/bloqueio gerida pela organização — consulte
                  `/management-api/lists/overview`). As correspondências entre
                  sessões utilizam diferentes `vendor_data` e estão limitadas a
                  5.
                items:
                  type: object
                  properties:
                    session_id:
                      type: string
                      format: uuid
                      nullable: true
                    session_number:
                      type: integer
                      nullable: true
                    vendor_data:
                      type: string
                      nullable: true
                    verification_date:
                      type: string
                      format: date-time
                      nullable: true
                    email:
                      type: string
                      format: email
                    status:
                      type: string
                      nullable: true
                    is_blocklisted:
                      type: boolean
                    api_service:
                      type: string
                      nullable: true
                    source:
                      type: string
                      enum:
                        - session
                        - list_entry
                      description: >-
                        Origem desta correspondência. `session` significa que
                        outra sessão de verificação na sua aplicação
                        correspondeu a este valor. `list_entry` significa que o
                        valor coincidiu com uma lista gerida pela organização
                        (lista de permissões/lista de bloqueio) — consulte a
                        visão geral de listas da API de gestão em
                        `/management-api/lists/overview` para saber como gerir
                        essas listas.
              email_intelligence:
                allOf:
                  - $ref: '#/components/schemas/EmailIntelligence'
                description: >-
                  Sinais de inteligência de e-mail. Presentes apenas quando o
                  complemento de inteligência de e-mail foi executado para este
                  endereço.
              email_social:
                allOf:
                  - $ref: '#/components/schemas/EmailSocialFootprint'
                description: >-
                  Presença social (social footprint) do endereço. Presente
                  apenas quando o suplemento de presença social foi executado
                  para este endereço.
        poa_verifications:
          type: array
          nullable: true
          description: >-
            **Array de relatórios de Comprovativo de morada (POA)** — sempre um
            array JSON, nunca um objeto `poa` singular. `null` até que pelo
            menos um passo de POA tenha produzido dados. Cada item é o relatório
            completo, incluindo `node_id`, `status` ao nível da funcionalidade,
            o URL do ficheiro do documento, emissor, datas, morada analisada e
            `warnings[]`.
          items:
            type: object
            properties:
              node_id:
                type: string
                description: >-
                  Identificador exclusivo para este passo de POA no grafo do
                  fluxo.
              status:
                type: string
                description: >-
                  Estado ao nível da funcionalidade deste passo de Comprovativo
                  de morada. Independente do `status` da sessão de nível
                  superior — uma sessão pode alcançar a sua decisão global
                  enquanto uma funcionalidade individual permanece `In Review`.
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Resub Requested
              document_file:
                type: string
                format: uri
                description: URL do documento de comprovativo de morada
              issuing_state:
                type: string
                description: Código de país de duas letras do Estado emissor
              document_type:
                type: string
                description: Tipo de documento comprovativo de morada
              document_subtype:
                type: string
                nullable: true
                description: >-
                  Classificação mais específica do documento de comprovativo de
                  morada dentro do seu `document_type`, quando detetada. `null`
                  caso contrário.
              document_language:
                type: string
                description: Código de idioma do documento
              document_metadata:
                type: object
                properties:
                  file_size:
                    type: integer
                    description: Tamanho do documento
                  content_type:
                    type: string
                    description: Tipo de conteúdo do documento
                  creation_date:
                    type: string
                    format: date
                    description: Data em que o documento foi criado
                  modified_date:
                    type: string
                    format: date
                    description: Data em que o documento foi modificado
                  overlay_manipulation:
                    type: object
                    nullable: true
                    description: >-
                      Análise forense de PDF para suspeita de manipulação de
                      texto sobreposto. Nulo quando não forem encontradas
                      evidências de manipulação de texto sobreposto ou o
                      documento não for um PDF.
                    properties:
                      detected:
                        type: boolean
                        description: >-
                          Se foram detetadas evidências de manipulação de texto
                          sobreposto.
                      analyzed:
                        type: boolean
                        description: Indica se foi possível analisar o PDF.
                      analysis_incomplete:
                        type: boolean
                        description: >-
                          Presente e verdadeiro apenas quando o ficheiro não
                          pôde ser verificado na íntegra. O que foi verificado
                          mantém as suas conclusões sempre que possível, e o
                          documento apresenta o aviso de substituição de texto
                          não comprovada.
                      signals:
                        type: array
                        items:
                          type: string
                        description: >-
                          Sinais forenses detetados, tais como
                          duplicate_font_subset ou glyph_fragmentation.
                      manipulated_regions:
                        type: array
                        description: >-
                          Áreas com suspeita de manipulação nas coordenadas da
                          página do PDF.
                        items:
                          type: object
                          properties:
                            page:
                              type: integer
                            x:
                              type: number
                            'y':
                              type: number
                            width:
                              type: number
                            height:
                              type: number
                            page_width:
                              type: number
                            page_height:
                              type: number
                  creator:
                    type: string
                    nullable: true
                    description: >-
                      Aplicação que criou o documento, registada nos metadados
                      do documento.
                  producer:
                    type: string
                    nullable: true
                    description: >-
                      Software utilizado para criar o PDF, registado nos
                      respetivos metadados.
                  software:
                    type: string
                    nullable: true
                    description: >-
                      Software de edição/processamento registado nos metadados
                      do ficheiro.
                  encryption:
                    type: string
                    nullable: true
                    description: Esquema de encriptação do documento, quando encriptado.
                  is_signed:
                    type: boolean
                    nullable: true
                    description: Indica se o PDF contém uma assinatura digital.
                  is_tampered:
                    type: boolean
                    nullable: true
                    description: >-
                      Se a validação da assinatura indica que o ficheiro foi
                      modificado após a assinatura.
                  signature_info:
                    type: object
                    nullable: true
                    description: >-
                      Detalhes da(s) assinatura(s) digital(ais), quando
                      presentes.
                  exif_original_date:
                    type: string
                    nullable: true
                    description: >-
                      Data de captura original EXIF, para carregamentos de
                      imagens.
                  exif_digitized_date:
                    type: string
                    nullable: true
                    description: Data de digitalização EXIF, para carregamentos de imagens.
                  processed_by_known_editor:
                    type: boolean
                    nullable: true
                    description: >-
                      Indica se os metadados do ficheiro sugerem processamento
                      por um editor de documentos conhecido.
                  has_different_creation_mod_date:
                    type: boolean
                    nullable: true
                    description: >-
                      Indica se as datas de criação e de modificação diferem —
                      um sinal comum de manipulação.
                description: >-
                  Metadados forenses do ficheiro extraídos do documento de
                  comprovativo de morada carregado. Contém sempre as chaves
                  abaixo (os valores são `null` quando não aplicável, por
                  exemplo, datas EXIF para ficheiros PDF). `null` quando não foi
                  possível extrair metadados.
                nullable: true
              issuer:
                type: string
                description: Nome do emissor do documento
              issue_date:
                type: string
                format: date
                description: Data em que o documento foi emitido
              expiration_date:
                type: string
                format: date
                nullable: true
                description: Data de validade do documento, se disponível
              poa_address:
                type: string
                description: Morada em bruto do documento de comprovativo de morada
              poa_formatted_address:
                type: string
                description: >-
                  Morada formatada a partir do documento de comprovativo de
                  morada
              poa_parsed_address:
                type: object
                properties:
                  address_type:
                    type: string
                    description: Tipo de morada (Rua, Avenida, etc.)
                  street_1:
                    type: string
                    description: Morada principal
                  street_2:
                    type: string
                    nullable: true
                    description: Morada secundária
                  city:
                    type: string
                    description: Nome da cidade
                  region:
                    type: string
                    description: Nome da região ou estado
                  country:
                    type: string
                    description: Código de país de duas letras
                  postal_code:
                    type: string
                    description: Código postal
                  document_location:
                    type: object
                    properties:
                      latitude:
                        type: number
                        description: Coordenada de latitude
                      longitude:
                        type: number
                        description: Coordenada de longitude
              name_on_document:
                type: string
                nullable: true
                description: >-
                  Nome do titular da conta / destinatário extraído do documento
                  de comprovativo de morada (POA), utilizado para
                  correspondência de nomes. `null` quando não foi possível
                  extrair nenhum nome.
              name_match_score_expected_details:
                type: number
                nullable: true
                description: >-
                  Pontuação de semelhança (0-100) entre `name_on_document` e o
                  nome esperado fornecido na criação da sessão. `null` quando
                  faltar algum dos lados.
              name_match_score_id_verification:
                type: number
                nullable: true
                description: >-
                  Pontuação de semelhança (0-100) entre `name_on_document` e o
                  nome extraído pelo passo de verificação de identidade. `null`
                  quando faltar algum dos lados.
              expected_details_address:
                type: string
                nullable: true
                description: Morada bruta esperada para verificação
              expected_details_formatted_address:
                type: string
                nullable: true
                description: Morada formatada esperada para verificação
              expected_details_parsed_address:
                type: object
                description: Detalhes analisados da morada esperada para verificação
              extra_fields:
                type: object
                description: >-
                  Dados bancários e de contacto adicionais extraídos do
                  documento.
                properties:
                  bank_account_number:
                    type: string
                    nullable: true
                  bank_iban:
                    type: string
                    nullable: true
                  bank_sort_code:
                    type: string
                    nullable: true
                  bank_routing_number:
                    type: string
                    nullable: true
                  bank_swift_bic:
                    type: string
                    nullable: true
                  bank_branch_name:
                    type: string
                    nullable: true
                  bank_branch_address:
                    type: string
                    nullable: true
                  document_phone_number:
                    type: string
                    nullable: true
                  additional_names:
                    type: array
                    items:
                      type: string
              extra_files:
                type: array
                items:
                  type: string
                  format: uri
                description: Ficheiros adicionais de comprovativo de morada
              warnings:
                type: array
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        A funcionalidade que gerou este aviso. O valor
                        identifica o bloco de funcionalidade a que o aviso
                        pertence. O array de avisos de cada módulo utiliza
                        tipicamente o valor correspondente ao seu módulo (por
                        exemplo, `PHONE` dentro de
                        `phone_verifications[].warnings`), mas o enum acima é a
                        referência autoritativa para todos os avisos de
                        funcionalidades no payload da decisão.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: O ID do nó do grafo do fluxo que gerou este aviso
              detected_codes:
                type: array
                description: >-
                  Códigos QR e códigos de barras detetados em todas as páginas
                  processadas do documento. Vazio quando nenhum é encontrado. Um
                  código QR localizado mas não descodificável tem
                  `parsed_payload: null`.
                items:
                  $ref: '#/components/schemas/DocumentAIDetectedCode'
              address_validation:
                allOf:
                  - $ref: '#/components/schemas/AddressValidationResult'
                nullable: true
                description: >-
                  Validação de endereço da morada constante deste comprovativo
                  de morada: se existe e a sua forma normalizada, tal como lida
                  no documento (uma correção posterior de `poa_address` não a
                  executa novamente). Presente quando este passo de Comprovativo
                  de morada ativou o suplemento de Validação de endereço e o
                  carregamento passou nas verificações de documentos; `null`
                  caso contrário.
        document_ai_documents:
          type: array
          nullable: true
          description: >-
            **Relatórios do Document AI agrupados por nó do fluxo** — sempre um
            array JSON, nunca um objeto singular. `null` até que pelo menos um
            passo do Document AI tenha produzido dados. Presente apenas quando
            `session_kind = user`. Cada item é um grupo de nós com um `status`
            agregado, o `node_id`, um array `items[]` dos resultados por
            documento (dados extraídos indexados pela chave de campo
            configurada) e `warnings`.
          items:
            type: object
            description: Resultados de Document AI agrupados por nó do fluxo.
            properties:
              status:
                type: string
                description: >-
                  Estado agregado do Document AI para este nó, compilado a
                  partir dos seus `items[]`.
                enum:
                  - Approved
                  - Declined
                  - In Review
                  - Not Finished
              node_id:
                type: string
                nullable: true
                description: >-
                  Identificador exclusivo para este passo de Document AI no
                  grafo do fluxo.
              items:
                type: array
                items:
                  type: object
                  properties:
                    uuid:
                      type: string
                      format: uuid
                    node_id:
                      type: string
                      nullable: true
                      description: Nó do grafo do fluxo que gerou este documento.
                    document_key:
                      type: string
                      description: >-
                        Chave do documento configurado no Document AI a que este
                        ficheiro corresponde.
                    original_filename:
                      type: string
                      nullable: true
                      description: Nome do ficheiro tal como carregado pelo utilizador.
                    file_size:
                      type: integer
                      nullable: true
                      description: Tamanho do ficheiro em bytes.
                    file_url:
                      type: string
                      format: uri
                      nullable: true
                      description: >-
                        Ligação pré-assinada de curta duração para o ficheiro
                        carregado.
                    status:
                      type: string
                      enum:
                        - Approved
                        - Declined
                        - In Review
                        - Not Finished
                      description: Estado do Document AI por documento.
                    extracted_data:
                      type: object
                      additionalProperties: true
                      nullable: true
                      description: >-
                        Valores extraídos pelo Document AI, indexados pela chave
                        de campo configurada `key`. Cada valor é uma string,
                        número ou `null`.
                    detected_codes:
                      type: array
                      description: >-
                        Códigos QR e códigos de barras detetados em todas as
                        páginas processadas. Vazio quando nenhum é encontrado.
                        Um código QR localizado mas não descodificável tem
                        `parsed_payload: null`.
                      items:
                        $ref: '#/components/schemas/DocumentAIDetectedCode'
                    fields:
                      type: array
                      description: Os campos de extração configurados para este documento.
                      items:
                        type: object
                        properties:
                          key:
                            type: string
                            description: >-
                              Chave de campo estável utilizada como a chave em
                              `extracted_data`.
                          name:
                            type: string
                            description: Nome de campo legível.
                          instruction:
                            type: string
                            description: Instrução de extração apresentada ao modelo.
                          type:
                            type: string
                            enum:
                              - text
                              - number
                              - date
                            description: Tipo de valor esperado do campo extraído.
                          required:
                            type: boolean
                            description: Whether this field is required.
                    document_metadata:
                      type: object
                      nullable: true
                      description: >-
                        Metadados forenses do ficheiro extraídos do documento
                        carregado (por exemplo, `is_tampered`). `null` quando
                        não foi possível extrair nada.
                    cross_check_result:
                      type: object
                      nullable: true
                      description: >-
                        Referência cruzada dos campos extraídos do documento com
                        outros dados da sessão. `null` se não tiver sido
                        realizada qualquer verificação cruzada.
                    created_at:
                      type: string
                      format: date-time
              warnings:
                type: array
                nullable: true
                items:
                  type: object
                description: Registos de aviso gerados para este nó do Document AI.
        questionnaire_responses:
          type: array
          nullable: true
          description: >-
            **Array de relatórios de respostas a questionários** — sempre um
            array JSON, nunca um objeto `questionnaire` singular. `null` até que
            pelo menos um passo de questionário tenha produzido dados. Cada item
            é o relatório completo, incluindo `node_id`, os metadados do
            questionário, secções com elementos de formulário e as respostas do
            utilizador.
          items:
            type: object
            properties:
              node_id:
                type: string
                description: >-
                  Identificador único para este passo de questionário no grafo
                  do fluxo.
              questionnaire_id:
                type: string
                description: Identificador exclusivo do questionário
              title:
                type: string
                description: Título do questionário
              description:
                type: string
                description: Descrição do questionário
              languages:
                type: array
                items:
                  type: string
                description: Idiomas suportados
              default_language:
                type: string
                description: Idioma predefinido
              is_active:
                type: boolean
                description: Se o questionário está ativo
              is_simple_questionnaire:
                type: boolean
                description: >-
                  Se o questionário é um formulário linear simples (sem grafo de
                  ramificação).
              questionnaire_group_id:
                type: string
                format: uuid
                nullable: true
                description: Identificador estável do grupo de questionários entre versões.
              version:
                type: integer
                nullable: true
                description: Número da versão do questionário que foi respondido.
              published_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  Carimbo de data/hora em que esta versão do questionário foi
                  publicada.
              sections:
                type: array
                items:
                  type: object
                  properties:
                    title:
                      type: string
                      nullable: true
                      description: Título da secção
                    description:
                      type: string
                      nullable: true
                      description: Descrição da secção
                    items:
                      type: array
                      items:
                        type: object
                        properties:
                          uuid:
                            type: string
                            description: Identificador exclusivo do item
                          value:
                            type: string
                            nullable: true
                            description: >-
                              Identificador de nó estável deste elemento de
                              formulário no grafo do questionário.
                          element_type:
                            type: string
                            description: Tipo do elemento do questionário
                          is_required:
                            type: boolean
                            description: Indica se o item é obrigatório
                          title:
                            type: string
                            description: Título do item
                          description:
                            type: string
                            nullable: true
                            description: Descrição do item
                          placeholder:
                            type: string
                            nullable: true
                            description: Texto de marcador de posição
                          choices:
                            type: array
                            nullable: true
                            items:
                              type: object
                              properties:
                                label:
                                  type: string
                                value:
                                  type: string
                                requires_text_input:
                                  type: boolean
                                  description: >-
                                    Se esta opção requer introdução de texto
                                    adicional
                                  nullable: true
                              required:
                                - label
                                - value
                            description: >-
                              Opções para elementos de menu suspenso ou de
                              escolha única
                          max_files:
                            type: integer
                            description: Número máximo de ficheiros permitidos
                            nullable: true
                          answer:
                            type: object
                            description: Resposta fornecida para o item
                            properties:
                              value:
                                type: string
                                nullable: true
                              text:
                                type: string
                                nullable: true
                              files:
                                type: array
                                items:
                                  type: string
                                nullable: true
                          required_if:
                            type: object
                            nullable: true
                            description: >-
                              Regra de requisito condicional, quando o elemento
                              só é obrigatório para determinadas respostas.
                          repeatable_config:
                            type: object
                            nullable: true
                            description: >-
                              Configuração para grupos de elementos repetíveis,
                              quando aplicável.
                        required:
                          - uuid
                          - value
                          - element_type
                          - is_required
                          - title
              status:
                type: string
                description: Estado do questionário
        bank_verifications:
          type: array
          nullable: true
          description: >-
            Resultados da Verificação bancária, um item por passo de Verificação
            bancária, para Verificação de utilizadores e Verificação de empresas
            (KYB). `null` até que um passo produza um. O `method` de cada item
            indica como a conta foi verificada: `open_banking` (início de sessão
            bancário) ou `account_lookup` (verificação de conta), ou uma
            alternativa por `statement` ou `microdeposits`, e `none` quando a
            pessoa continuou sem banco antes de qualquer tentativa ser avaliada
            (`continued_without_bank`). Consulte [Métodos de verificação
            bancária](/pt/core-technology/bank-verification/verification-methods).
          items:
            $ref: '#/components/schemas/BankVerificationResult'
        signatures:
          type: array
          description: >-
            Resultados da Assinatura eletrónica, um item por signatário e passo
            de assinatura, para Verificação de utilizadores e Verificação de
            empresas. Presente apenas quando o fluxo tem um passo de Assinatura
            eletrónica; uma matriz vazia até que um signatário o atinja.
            Consulte o [Relatório de assinatura
            eletrónica](/pt/core-technology/electronic-signature/report-electronic-signature).
          items:
            $ref: '#/components/schemas/SignatureResult'
        aml_screenings:
          type: array
          nullable: true
          description: >-
            **Array de relatórios de triagem AML** — sempre um array JSON, nunca
            um objeto `aml` no singular. `null` até que pelo menos um passo de
            AML tenha produzido dados. Cada item é o relatório completo,
            incluindo `node_id`, `status` ao nível da funcionalidade,
            `total_hits`, `entity_type`, `hits[]`, `score`, `screened_data`,
            `is_ongoing_monitoring_enabled` e `warnings[]`.
          items:
            $ref: '#/components/schemas/AMLScreening'
        ip_analyses:
          type: array
          nullable: true
          description: >-
            **Array de relatórios de Análise de dispositivo e IP** — sempre um
            array JSON, nunca um objeto `ip_analysis` singular. `null` até que
            pelo menos um passo de análise de IP tenha produzido dados. Cada
            item é o relatório completo, incluindo `node_id`, `status` ao nível
            da funcionalidade, dados de IP e geolocalização, impressão digital
            do dispositivo e `warnings[]`. As entradas com `(node_id,
            ip_address, device_fingerprint)` duplicados são deduplicadas no
            servidor.
          items:
            type: object
            properties:
              node_id:
                type: string
                description: >-
                  Identificador exclusivo para este passo de Análise de
                  dispositivo e IP no grafo do fluxo.
              status:
                type: string
                description: >-
                  Estado ao nível da funcionalidade desta entrada de Análise de
                  dispositivo e IP. Independente do `status` da sessão de nível
                  superior — uma sessão pode alcançar a sua decisão global
                  enquanto uma funcionalidade individual permanece `In Review`.
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Resub Requested
              device_brand:
                type: string
                description: Marca do dispositivo utilizado
              device_model:
                type: string
                description: Modelo do dispositivo utilizado
              browser_family:
                type: string
                description: Família de navegador utilizada
              os_family:
                type: string
                description: Família do sistema operativo
              platform:
                type: string
                description: Tipo de plataforma (mobile, desktop, etc)
              device_fingerprint:
                type: string
                nullable: true
                description: Identificador exclusivo da impressão digital do dispositivo
              ip_country:
                type: string
                description: País detetado a partir do IP
              ip_country_code:
                type: string
                description: Código de país de duas letras a partir do IP
              ip_state:
                type: string
                description: Estado/região detetado a partir do IP
              ip_city:
                type: string
                description: Cidade detetada a partir do IP
              latitude:
                type: number
                description: Coordenada de latitude da localização do IP
              longitude:
                type: number
                description: Coordenada de longitude da localização do IP
              ip_address:
                type: string
                description: Endereço IP
              isp:
                type: string
                nullable: true
                description: Fornecedor de Serviços de Internet
              organization:
                type: string
                nullable: true
                description: Organização associada ao IP
              is_vpn_or_tor:
                type: boolean
                description: Se o IP é proveniente de uma VPN ou rede Tor
              is_data_center:
                type: boolean
                description: Se o IP é proveniente de um centro de dados
              time_zone:
                type: string
                description: Fuso horário detetado a partir do IP
              time_zone_offset:
                type: string
                description: Desvio do fuso horário
              ip:
                type: object
                description: >-
                  Geolocalização por IP desta entrada mais distâncias de grande
                  círculo (km) até à morada do documento de identificação e à
                  morada do documento de comprovativo de morada. As distâncias
                  são `null` quando qualquer um dos lados não tem uma
                  localização resolúvel.
                properties:
                  location:
                    type: object
                    nullable: true
                    properties:
                      latitude:
                        type: number
                        example: 41.2706327
                      longitude:
                        type: number
                        example: 1.9770097
                    description: Coordenadas, ou `null` quando não disponíveis.
                  distance_from_id_document:
                    type: number
                    nullable: true
                    example: 23.4
                  distance_from_poa_document:
                    type: number
                    nullable: true
                    example: 12.3
              id_document:
                type: object
                description: >-
                  Localização extraída da morada do documento de identificação
                  mais as distâncias (km) até à geolocalização do IP e à morada
                  do documento de comprovativo de morada (POA). `location` é
                  `null` quando nenhuma morada do documento pôde ser
                  geocodificada.
                properties:
                  location:
                    type: object
                    nullable: true
                    properties:
                      latitude:
                        type: number
                        example: 41.2706327
                      longitude:
                        type: number
                        example: 1.9770097
                    description: Coordenadas, ou `null` quando não disponíveis.
                  distance_from_ip:
                    type: number
                    nullable: true
                    example: 23.4
                  distance_from_poa_document:
                    type: number
                    nullable: true
                    example: 18.7
              poa_document:
                type: object
                description: >-
                  Localização extraída do documento de comprovativo de morada
                  mais as distâncias (km) até à geolocalização do IP e à morada
                  do documento de identificação. `location` é `null` quando a
                  sessão não tem nenhum passo de POA ou a morada não pôde ser
                  geocodificada.
                properties:
                  location:
                    type: object
                    nullable: true
                    properties:
                      latitude:
                        type: number
                        example: 41.2706327
                      longitude:
                        type: number
                        example: 1.9770097
                    description: Coordenadas, ou `null` quando não disponíveis.
                  distance_from_ip:
                    type: number
                    nullable: true
                    example: 12.3
                  distance_from_id_document:
                    type: number
                    nullable: true
                    example: 18.7
              warnings:
                type: array
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        A funcionalidade que gerou este aviso. O valor
                        identifica o bloco de funcionalidade a que o aviso
                        pertence. O array de avisos de cada módulo utiliza
                        tipicamente o valor correspondente ao seu módulo (por
                        exemplo, `PHONE` dentro de
                        `phone_verifications[].warnings`), mas o enum acima é a
                        referência autoritativa para todos os avisos de
                        funcionalidades no payload da decisão.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: O ID do nó do grafo do fluxo que gerou este aviso
              matches:
                type: array
                description: >-
                  Correspondências entre sessões encontradas para o endereço IP
                  ou identidade do dispositivo desta entrada. Cada
                  correspondência é outra sessão de verificação na sua aplicação
                  (a `source` é sempre `session`) que partilha o mesmo valor,
                  pertencendo sempre a um utilizador do fornecedor /
                  `vendor_data` diferente do da sessão atual, limitada a 5 por
                  coletor (`device_fingerprint` soma dois coletores com limites
                  independentes, pelo que são possíveis até 10 entradas). Cada
                  item inclui `match_source`, `confidence`, `match_mode`,
                  `device_info` e `location_info`; as chaves
                  `recovery_similarity`, `tls_ja4_corroborated` e
                  `recovery_gate_reason` só estão presentes quando
                  `match_source` é `recovered_high`.
                items:
                  type: object
                  additionalProperties: false
                  properties:
                    session_id:
                      type: string
                      format: uuid
                      description: ID de sessão da sessão correspondente.
                    session_number:
                      type: integer
                      description: Número sequencial da sessão correspondente.
                    vendor_data:
                      type: string
                      nullable: true
                      description: >-
                        `vendor_data` da sessão correspondente — sempre
                        diferente do utilizador do fornecedor da sessão atual.
                    verification_date:
                      type: string
                      format: date-time
                      nullable: true
                      description: >-
                        Data de criação da sessão correspondente
                        (`YYYY-MM-DDTHH:MM:SSZ`).
                    match_type:
                      type: string
                      enum:
                        - ip_address
                        - device_fingerprint
                      description: >-
                        Indica se a correspondência ocorreu no endereço IP ou na
                        impressão digital do dispositivo
                    match_source:
                      type: string
                      enum:
                        - ip_address
                        - persistent_id
                        - legacy_fp
                        - recovered_high
                      description: >-
                        Como esta correspondência foi obtida: `ip_address`
                        (endereço IP partilhado — colocalização de rede, não uma
                        afirmação de identidade do dispositivo), `persistent_id`
                        (identificador de dispositivo persistente exato
                        armazenado), `legacy_fp` (hash de fingerprint de
                        dispositivo legado `didit-fp-*`) ou `recovered_high`
                        (resultado de recuperação difusa de fingerprint de
                        elevada confiança). Candidatos de recuperação com menor
                        confiança surgem apenas como avisos de risco, nunca
                        neste array.
                    matched_value:
                      type: string
                      nullable: true
                      description: >-
                        O valor correspondente: o endereço IP partilhado, o
                        identificador persistente de dispositivo ou o hash de
                        fingerprint legado ou — para `recovered_high` — o UUID
                        do dispositivo recuperado.
                    status:
                      type: string
                      description: Estado do ciclo de vida da sessão correspondente.
                    is_blocklisted:
                      type: boolean
                      description: >-
                        Indica se o valor correspondente se encontra numa lista
                        de bloqueio. Atualmente sempre `false` para
                        correspondências de dispositivo/IP.
                    api_service:
                      type: string
                      nullable: true
                      description: >-
                        Serviço da API autónomo da sessão correspondente; `null`
                        para sessões de fluxo.
                    source:
                      type: string
                      enum:
                        - session
                      description: >-
                        Sempre `session` para correspondências de dispositivo/IP
                        — cada correspondência é outra sessão de verificação na
                        sua aplicação.
                    device_info:
                      type: object
                      description: >-
                        Detalhes do dispositivo observados na sessão
                        correspondente.
                      properties:
                        device_brand:
                          type: string
                          nullable: true
                        device_model:
                          type: string
                          nullable: true
                        browser_family:
                          type: string
                          nullable: true
                        os_family:
                          type: string
                          nullable: true
                        platform:
                          type: string
                          nullable: true
                        device_fingerprint:
                          type: string
                          nullable: true
                    location_info:
                      type: object
                      description: >-
                        Detalhes de rede e geolocalização observados na sessão
                        correspondente.
                      properties:
                        ip_address:
                          type: string
                          nullable: true
                        ip_country:
                          type: string
                          nullable: true
                        ip_country_code:
                          type: string
                          nullable: true
                        ip_state:
                          type: string
                          nullable: true
                        ip_city:
                          type: string
                          nullable: true
                        is_vpn_or_tor:
                          type: boolean
                        is_data_center:
                          type: boolean
                    confidence:
                      type: number
                      minimum: 0
                      maximum: 1
                      description: >-
                        Confiança de identificação do lado do servidor,
                        calculada como `1 - P(false positive)`: `1.0` para
                        correspondências determinísticas (`persistent_id`, ou
                        `recovered_high` assente em hardware), `0.5` para
                        `legacy_fp`, `0.0` para `ip_address` (apenas
                        colocalização), e um valor ajustado por corroboração
                        inferior a `1.0` para correspondências probabilísticas
                        recuperadas (mais elevado quando a impressão digital TLS
                        JA4 e o país do IP coincidem de forma independente).
                    match_mode:
                      type: string
                      enum:
                        - deterministic
                        - probabilistic
                        - co_occurrence
                      description: >-
                        Classe de evidência da correspondência: `deterministic`
                        (identificador exato armazenado ou enraizado no hardware
                        que não pode colidir entre dispositivos físicos),
                        `probabilistic` (evidência de impressão digital difusa)
                        ou `co_occurrence` (apenas rede partilhada, sem
                        reivindicação de identidade do dispositivo).
                    recovery_similarity:
                      type: number
                      description: >-
                        Similaridade de cosseno da correspondência de
                        recuperação da impressão digital, arredondada a 4 casas
                        decimais. Presente apenas quando `match_source` é
                        `recovered_high`.
                    tls_ja4_corroborated:
                      type: boolean
                      description: >-
                        Indica se as impressões digitais TLS JA4 das duas
                        observações coincidem — um sinal observado pelo servidor
                        que o navegador não consegue falsificar. Presente apenas
                        quando `match_source` é `recovered_high`.
                    recovery_gate_reason:
                      type: string
                      description: >-
                        O motivo pelo qual a correspondência de recuperação
                        passou na barreira rígida contra falsos positivos:
                        `hardware_root_match` (um identificador de dispositivo
                        ancorado em hardware correspondeu exatamente) ou, em
                        configurações que admitem evidências apenas de sondagem,
                        `exact_composite_plus_<n>_families` /
                        `very_high_similarity_plus_<n>_families`. Presente
                        apenas quando `match_source` é `recovered_high`.
              browser_version:
                type: string
                nullable: true
              os_version:
                type: string
                nullable: true
              user_agent:
                type: string
                nullable: true
                description: A string de user agent do navegador.
              accept_language:
                type: string
                nullable: true
                description: O cabeçalho `Accept-Language` enviado pelo navegador.
              session_identifier:
                type: string
                nullable: true
                description: >-
                  Identificador da sessão de navegação na qual a verificação foi
                  executada.
              session_age_ms:
                type: integer
                nullable: true
                description: >-
                  Idade dessa sessão de navegação em milissegundos quando o
                  passo foi executado.
              coords_accuracy:
                type: number
                nullable: true
                description: >-
                  Raio de precisão, em metros, das coordenadas comunicadas pelo
                  dispositivo.
              raw_device_data:
                type: object
                nullable: true
                additionalProperties: true
                description: Sinais do dispositivo em bruto recolhidos para o passo.
        geolocation_checks:
          type: array
          nullable: true
          description: >-
            **Array de resultados de verificação de localização**, um por passo
            de verificação de localização: a tentativa aceite desse passo.
            `null` até que um passo de verificação de localização tenha
            produzido dados. As tentativas anteriores do mesmo passo estão em
            `geolocation_attempts`.
          items:
            $ref: '#/components/schemas/GeolocationCheck'
        geolocation_attempts:
          type: array
          nullable: true
          description: >-
            Cada tentativa de cada passo de verificação de Localização desta
            sessão, da mais antiga para a mais recente. As tentativas
            substituídas por um novo envio são excluídas. Um fluxo que omita
            `geolocation_checks` através dos respetivos atributos de resposta
            também omite esta lista.
          items:
            $ref: '#/components/schemas/GeolocationAttempt'
        database_validations:
          type: array
          nullable: true
          description: >-
            **Array de relatórios de Validação de base de dados** — sempre um
            array JSON, nunca um objeto `database_validation` singular. `null`
            até que pelo menos um passo de validação de base de dados tenha
            gerado dados. Cada item é o relatório completo, incluindo `node_id`,
            o `status` ao nível da funcionalidade, `screened_data`, as
            `validations[]` por serviço (cada uma com o seu `source_data` do
            registo) e `warnings[]`. Os campos `screened_data` e `source_data`
            variam por país:


            **ARG (Argentina)**: screened_data: {document_number, selfie,
            gender, first_name, last_name}. source_data: {identification_number,
            first_name, last_name, full_name, date_of_birth, date_of_death,
            tax_id, tax_id_type, face_match_score, sit_1_since, banks,
            last_position, highest_position, rejected_checks}. Utiliza a
            validação biométrica de correspondência facial do RENAPER. O género
            é inferido automaticamente a partir da análise facial ou do nome
            próprio quando não se encontra presente no documento (por exemplo,
            em cartas de condução)


            **BOL (Bolívia)**: screened_data: {document_number, date_of_birth,
            first_name, last_name}. source_data: {identification_number,
            first_name, last_name, full_name, date_of_birth, gender}


            **BRA (Brasil)**: screened_data: {tax_number, first_name, last_name,
            date_of_birth}. source_data inclui sempre {identification_number,
            first_name, last_name, date_of_birth, lgpd_minor, minor_under_18,
            minor_under_16} para correspondências bem-sucedidas de CPF.
            Consultas de adultos bem-sucedidas definem esses sinalizadores como
            false. O serviço Consulta CPF da Receita Federal pode devolver HTTP
            422 (menor de 18 anos) ou 451 (menor de 16 anos) com dados retidos
            pela LGPD; nesses casos, source_data define os sinalizadores de
            menor como true conforme apropriado, inclui o código de estado HTTP
            do serviço a montante e a validação ao nível do campo é no_match.
            Consulte a secção do Brasil da referência de Códigos de Resultado de
            Validação de base de dados para a lista completa de códigos.


            **CHL (Chile)**: screened_data: {personal_number, first_name,
            last_name, date_of_birth}. source_data: {identification_number,
            first_name, last_name, date_of_birth, gender}


            **COL (Colômbia)**: screened_data: {document_number, document_type,
            first_name, last_name}. source_data: {identification_number,
            first_name, last_name, full_name, date_of_birth, document_type}


            **CRI (Costa Rica)**: screened_data: {personal_number, first_name,
            last_name}. source_data: {identification_number, first_name,
            last_name, full_name}


            **DOM (República Dominicana)**: screened_data: {personal_number}.
            source_data: {identification_number} (devolve apenas valid/invalid)


            **ECU (Equador)**: screened_data: {personal_number, first_name,
            last_name}. source_data: {identification_number, first_name,
            last_name, street, formatted_address, gender, nationality,
            education, marital_status, spouse, mother_name, father_name,
            profession}


            **ESP (Espanha)**: screened_data: {personal_number, document_type,
            expiration_date, first_name, last_name}. source_data:
            {identification_number, first_name, last_name, full_name,
            document_type, expiration_date}


            **GTM (Guatemala)**: screened_data: {document_number, first_name,
            last_name}. source_data: {identification_number, first_name,
            last_name, full_name}


            **HND (Honduras)**: screened_data: {document_number, first_name,
            last_name}. source_data: {identification_number, first_name,
            last_name, full_name}


            **MEX (México)**: screened_data: {personal_number (CURP),
            first_name, last_name}. source_data: {identification_number,
            first_name, last_name, full_name, date_of_birth, gender,
            nationality, curp_status, state_of_birth, doc_probatorio,
            registration_year, registration_state, registration_municipality,
            num_acta, crip, issuing_state_code, foreign_registry_number,
            folio_carta, folio_certificado}. Utiliza o registo civil do RENAPO.
            Está também disponível um serviço independente de verificação de
            validade do INE para o MEX como uma validação adicional individual.


            **PAN (Panamá)**: screened_data: {personal_number, selfie}.
            source_data: {identification_number}. Utiliza a validação biométrica
            do SIB


            **PER (Peru)**: screened_data: {personal_number (DNI), first_name,
            last_name}. source_data: {identification_number, first_name,
            last_name, paternal_name, maternal_name, verification_number,
            verification_letter}


            **PRY (Paraguai)**: screened_data: {document_number, first_name,
            last_name}. source_data: {identification_number, first_name,
            last_name, full_name}


            **SLV (El Salvador)**: screened_data: {document_number,
            date_of_birth, first_name, last_name}. source_data:
            {identification_number, first_name, last_name, full_name}


            **URY (Uruguai)**: screened_data: {personal_number, date_of_birth,
            first_name, last_name}. source_data: {identification_number,
            first_name, last_name, full_name}


            **VEN (Venezuela)**: screened_data: {document_number, first_name,
            last_name}. source_data: {identification_number, first_name,
            last_name, full_name, gender, date_of_birth, document_type}
          items:
            type: object
            properties:
              node_id:
                type: string
                description: >-
                  Identificador único para este passo de validação de base de
                  dados no grafo do fluxo.
              issuing_state:
                type: string
                description: >-
                  Código ISO 3166-1 alfa-3 do país cujas fontes
                  governamentais/de registo foram consultadas (por exemplo,
                  `BRA`, `MEX`, `ESP`, `NGA`, `IDN`). A Validação de base de
                  dados abrange 60+ países nas Américas, Europa, África, Médio
                  Oriente e Ásia-Pacífico, além de fontes globais multipaís — a
                  cobertura expande-se regularmente, pelo que deve tratar o
                  valor como um conjunto aberto e não como um enum fixo.
              validation_type:
                type: string
                enum:
                  - one_by_one
                  - two_by_two
                  - not_enabled
                description: >-
                  Como o resultado foi corroborado: `one_by_one` (resultado de
                  serviço único), `two_by_two` (dois ou mais serviços distintos
                  estabeleceram correspondência total com o número de
                  identificação de forma independente) ou `not_enabled`
                  (persistido quando nenhum serviço produziu uma correspondência
                  utilizável). O valor nunca é `null`. Modos de validação
                  biométrica 2x2 dedicados estão atualmente disponíveis para
                  `ECU` e `PER`.
              screened_data:
                type: object
                description: >-
                  Os dados de entrada utilizados para validação. Os campos
                  variam consoante o país — consulte a documentação de Validação
                  de base de dados
                  (`/core-technology/database-validation/overview`) para obter
                  os formatos específicos de cada país.
                properties:
                  last_name:
                    type: string
                  first_name:
                    type: string
                  tax_number:
                    type: string
                    description: 'Brasil: CPF (11 dígitos)'
                  personal_number:
                    type: string
                    description: >-
                      Chile: RUT, DOM: Cédula (11 dígitos), ECU: Cédula (10
                      dígitos), ESP: DNI/NIE, MEX: CURP (18 carateres), PER: DNI
                      (8 dígitos), URY: CI
                  document_number:
                    type: string
                    description: >-
                      ARG: DNI, BOL: CI, COL: Cédula, GTM: DPI, HND: DNI, PAN:
                      Cédula, PRY: CI, SLV: DUI, VEN: Cédula
                  date_of_birth:
                    type: string
                    format: date
                  document_type:
                    type: string
                    description: 'COL: CC/CE/TI/NIT, ESP: ID/PASSPORT'
                  expiration_date:
                    type: string
                    format: date
                    description: Obrigatório para ESP
              validations:
                type: array
                description: >-
                  Uma entrada por serviço de registo que devolveu um payload de
                  validação. Cada entrada identifica o serviço (`service_id`,
                  `service_name`) e inclui a comparação de `validation` por
                  campo, o `outcome_code` / `outcome_detail` do serviço quando
                  reportado e o registo normalizado do serviço de registo em
                  `source_data`.
                items:
                  type: object
                  properties:
                    service_id:
                      type: string
                      description: >-
                        Identificador do serviço de registo que produziu este
                        resultado de validação.
                      example: bra_cpf
                    service_name:
                      type: string
                      description: Nome legível do serviço de registo.
                      example: Brazil - CPF status check
                    validation:
                      type: object
                      description: Os resultados das validações dos campos.
                      properties:
                        full_name:
                          type: string
                          description: >-
                            Resultado da correspondência para o nome completo
                            (ex.: 'full_match', 'partial_match', 'no_match').
                        date_of_birth:
                          type: string
                          description: >-
                            Resultado da correspondência para a data de
                            nascimento.
                        identification_number:
                          type: string
                          description: >-
                            Resultado da correspondência para o número de
                            identificação.
                    outcome_code:
                      type: string
                      nullable: true
                      description: >-
                        Resultado legível por máquina da consulta ao registo
                        (por exemplo, `MATCH`, `NO_MATCH`, `PARTIAL_MATCH`,
                        `INCONCLUSIVE`, códigos específicos da fonte). Presente
                        quando o serviço reporta um.
                    outcome_detail:
                      type: string
                      nullable: true
                      description: >-
                        Explicação legível de `outcome_code`, quando fornecida
                        pelo serviço.
                    source_data:
                      type: object
                      description: >-
                        Os dados devolvidos pela base de dados governamental.
                        Campos comuns: identification_number, first_name,
                        last_name, full_name, date_of_birth, gender. Campos
                        adicionais por país: BRA inclui sempre lgpd_minor,
                        minor_under_18 e minor_under_16 em correspondências de
                        CPF bem-sucedidas; também inclui o código de estado HTTP
                        a montante quando os dados do CPF são retidos ao abrigo
                        da LGPD (HTTP 422/451). ECU adiciona street,
                        formatted_address, nationality, education,
                        marital_status, spouse, mother_name, father_name,
                        profession. PER adiciona paternal_name, maternal_name,
                        verification_number, verification_letter. ESP adiciona
                        document_type, expiration_date. VEN/COL adicionam
                        document_type.
                      additionalProperties: true
              errors:
                type: array
                description: >-
                  Erros devolvidos pelos serviços de registo durante a
                  validação, cada um etiquetado com o `service_id` que o gerou.
                  **Esta chave é totalmente omitida quando não existem erros.**
                items:
                  type: object
                  description: >-
                    O objeto de erro do serviço a montante expandido tal como
                    está — as respetivas chaves variam consoante o serviço
                    (habitualmente uma mensagem/código e quaisquer detalhes
                    específicos do fornecedor) — além de `service_id`, que
                    identifica o serviço com erro.
                  properties:
                    service_id:
                      type: string
                      nullable: true
                      description: Identificador do serviço de registo que gerou o erro.
                  additionalProperties: true
              match_type:
                type: string
                enum:
                  - no_match
                  - partial_match
                  - full_match
                nullable: true
                description: >-
                  O resultado de correspondência agregado entre os serviços
                  consultados. `null` até que a validação tenha sido avaliada.
              status:
                type: string
                description: >-
                  Estado ao nível da funcionalidade desta validação de base de
                  dados. Independente do `status` da sessão de nível superior —
                  uma sessão pode alcançar a sua decisão global enquanto uma
                  funcionalidade individual permanece `In Review`.
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Resub Requested
              warnings:
                type: array
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        A funcionalidade que gerou este aviso. O valor
                        identifica o bloco de funcionalidade a que o aviso
                        pertence. O array de avisos de cada módulo utiliza
                        tipicamente o valor correspondente ao seu módulo (por
                        exemplo, `PHONE` dentro de
                        `phone_verifications[].warnings`), mas o enum acima é a
                        referência autoritativa para todos os avisos de
                        funcionalidades no payload da decisão.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: O ID do nó do grafo do fluxo que gerou este aviso
                description: Avisos relacionados com a validação de base de dados.
        database_validation_not_performed_reason:
          type: object
          nullable: true
          additionalProperties: true
          description: >-
            O motivo pelo qual uma validação de base de dados configurada não
            produziu nenhum resultado, como `{code, message}` mais campos de
            contexto. Presente apenas quando `database_validations` é `null` num
            fluxo que tem o passo, para que possa distinguir "o registo
            concordou" de "nada foi executado". `null` nos restantes casos.
          properties:
            code:
              type: string
              description: Motivo legível por máquina estável.
            message:
              type: string
              description: Explicação legível.
        reviews:
          type: array
          items:
            type: object
            properties:
              user:
                type: string
                description: >-
                  Quem realizou a revisão. Normalmente o identificador do
                  revisor na consola (o respetivo e-mail), mas o valor é `"API
                  Client"` para atualizações de estado feitas com uma chave de
                  API e `"Unknown"` quando não foi possível resolver nenhum
                  interveniente — portanto, não processe este campo como um
                  endereço de e-mail.
              new_status:
                type: string
              comment:
                type: string
              created_at:
                type: string
                format: date-time
        assignee:
          type: object
          nullable: true
          description: >-
            O revisor da consola ao qual a sessão está atribuída, ou `null`
            quando não está atribuída a ninguém.
          properties:
            email:
              type: string
              format: email
            assigned_at:
              type: string
              format: date-time
              nullable: true
        waiting_since:
          type: string
          format: date-time
          nullable: true
          description: >-
            Quando a sessão começou a aguardar revisão. `null` a menos que a
            sessão esteja `In Review` e a sua aplicação defina um prazo de
            revisão.
        sla_due_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Quando a revisão deve ser concluída. `null` a menos que a sessão
            esteja `In Review` e a sua aplicação defina um prazo de revisão.
        created_at:
          type: string
          format: date-time
          description: Carimbo de data/hora em que a sessão foi criada (ISO 8601, UTC).
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Carimbo de data/hora em que esta sessão está agendada para expirar.
            Definido em sessões de Verificação de utilizadores (KYC) quando foi
            configurada uma expiração no momento da criação (ou assim que o
            estado `Approved` acionar o cálculo de expiração do KYC). `null`
            para sessões sem uma expiração configurada e para tipos que não
            utilizam expiração (por exemplo, sessões de Verificação de empresas
            (KYB) que nunca receberam um `expires_at`).
        registry_checks:
          type: array
          nullable: true
          description: >-
            Verificações no registo de empresas. Presente apenas quando
            `session_kind = business`. Cada item contém o payload completo do
            registo de empresas.
          items:
            type: object
            description: >-
              Uma verificação de registo de empresas — o payload completo de
              registo de empresas enriquecido com a estrutura de propriedade e
              avisos. Presente apenas quando `session_kind = business`.
            properties:
              status:
                type: string
                description: Estado do ciclo de vida da funcionalidade.
              node_id:
                type: string
                nullable: true
              data_resolved:
                type: boolean
              company:
                type: object
                description: >-
                  Payload completo do registo de empresas para a empresa
                  (registo de empresas combinado com quaisquer dados fornecidos
                  pelo utilizador ou editados na consola).
                properties:
                  uuid:
                    type: string
                    format: uuid
                  node_id:
                    type: string
                    nullable: true
                  status:
                    type: string
                  registry_status:
                    type: string
                    nullable: true
                  data_resolved:
                    type: boolean
                  company_name:
                    type: string
                  registration_number:
                    type: string
                    nullable: true
                  country_code:
                    type: string
                    description: >-
                      País de constituição (ISO 3166-1 alpha-2, por ex., `GB`,
                      `DE`, `US`).
                  region:
                    type: string
                    nullable: true
                    description: >-
                      Código de subdivisão ISO 3166-2 quando aplicável (por
                      exemplo, `CA`, `NY` para estados dos EUA).
                  company_type:
                    type: string
                    nullable: true
                  incorporation_date:
                    type: string
                    format: date
                    nullable: true
                  registered_address:
                    type: string
                    nullable: true
                  tax_number:
                    type: string
                    nullable: true
                  risk_level:
                    type: string
                    enum:
                      - LOW
                      - MEDIUM
                      - HIGH
                    nullable: true
                  verification_status:
                    type: string
                    nullable: true
                  is_from_registry:
                    type: boolean
                  fetch_status:
                    type: string
                    nullable: true
                  alternative_names:
                    type: string
                    nullable: true
                    description: >-
                      Nomes alternativos, comerciais, anteriores ou no idioma
                      original da empresa em texto, quando comunicados.
                  nature_of_business:
                    type: string
                    nullable: true
                  registered_capital:
                    type: string
                    nullable: true
                  registered_capital_amount:
                    type: string
                    format: decimal
                    nullable: true
                    description: >-
                      Montante do capital registado/capital social como string
                      decimal (ex.: `"100.00"`), analisado a partir do registo
                      de empresas. `null` quando não disponível.
                  registered_capital_currency:
                    type: string
                    nullable: true
                    description: >-
                      Código de moeda ISO 4217 de `registered_capital_amount`
                      (por exemplo, `"GBP"`). `null` quando não estiver
                      disponível.
                  website:
                    type: string
                    nullable: true
                  email:
                    type: string
                    format: email
                    nullable: true
                  phone:
                    type: string
                    nullable: true
                  legal_entity_identifier:
                    type: string
                    nullable: true
                  location_of_registration:
                    type: string
                    nullable: true
                  vat_number:
                    type: string
                    nullable: true
                    description: >-
                      Número de IVA da UE, quando recolhido durante o passo de
                      registo alojado ou editado posteriormente.
                  vat_validation_status:
                    type: string
                    enum:
                      - valid
                      - invalid
                      - format_valid
                      - invalid_format
                      - could_not_validate
                      - not_applicable
                    description: >-
                      Resultado da validação do número de IVA ou, quando
                      inexistente, do `tax_number`, no envio do registo. `valid`
                      / `invalid`: decidido pelo registo oficial do país (VIES
                      da UE, Noruega, Suíça, Brasil, Colômbia, Costa Rica,
                      Equador, Paraguai; Polónia também pelo seu registo
                      doméstico de IVA). `format_valid` / `invalid_format`:
                      decidido pelas regras de formato e de dígito de controlo
                      do país quando nenhum registo pode ser consultado.
                      `could_not_validate`: o registo estava indisponível.
                      `not_applicable`: sem número, um país sem registo ou
                      regras, ou uma sessão de sandbox.
                  vat_validated_number:
                    type: string
                    nullable: true
                    description: >-
                      O número que foi verificado, tal como a fonte o conhece
                      (por exemplo, o número de IVA derivado de um SIREN francês
                      ou de um RSIN neerlandês). `null` quando nenhuma
                      verificação foi executada.
                  vat_validation_source:
                    type: string
                    nullable: true
                    enum:
                      - eu_vies
                      - pl_vat_white_list
                      - no_brreg
                      - ch_uid_register
                      - br_receita_federal
                      - co_rues
                      - cr_hacienda
                      - ec_sri
                      - py_dnit
                      - format_rules
                      - null
                    description: >-
                      A origem que determinou o `vat_validation_status`: um
                      registo oficial ou `format_rules`. `null` quando nenhuma
                      verificação foi executada.
                  vat_validated_name:
                    type: string
                    nullable: true
                    description: >-
                      Nome registado na fonte que validou o número, quando esta
                      o divulga. Apenas definido quando o estado for `valid`.
                  vat_validated_address:
                    type: string
                    nullable: true
                    description: >-
                      Morada registada junto da fonte que validou o número,
                      quando esta a divulga. Apenas definida quando o estado é
                      `valid`.
                  vat_checked_at:
                    type: string
                    format: date-time
                    nullable: true
                    description: >-
                      Carimbo de data/hora da verificação. `null` quando nenhuma
                      verificação foi executada.
                  financial_summary:
                    type: object
                    nullable: true
                  officers:
                    type: array
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                          format: uuid
                        name:
                          type: string
                        designation:
                          type: string
                          nullable: true
                        role:
                          type: string
                          nullable: true
                        nationality:
                          type: string
                          nullable: true
                        is_active:
                          type: boolean
                        kyc_status:
                          type: string
                          enum:
                            - Approved
                            - Declined
                            - Pending
                          nullable: true
                        kyc_session_url:
                          type: string
                          format: uri
                          nullable: true
                        first_name:
                          type: string
                          nullable: true
                          description: >-
                            Nome próprio quando explicitamente indicado pelo
                            registo; não deduzido a partir do nome completo.
                        last_name:
                          type: string
                          nullable: true
                          description: >-
                            Apelido quando explicitamente comunicado pelo
                            registo.
                        address:
                          type: string
                          nullable: true
                          description: Morada do administrador indicada pelo registo.
                        appointment_date:
                          type: string
                          nullable: true
                          description: Data em que o administrador foi nomeado.
                          format: date
                        termination_date:
                          type: string
                          nullable: true
                          description: Data em que a nomeação terminou, quando reportada.
                          format: date
                        date_of_birth:
                          type: string
                          nullable: true
                          description: >-
                            Data de nascimento completa comunicada pelo registo
                            de empresas. Nulo quando apenas o ano ou mês de
                            nascimento é conhecido.
                          format: date
                        date_of_birth_year:
                          type: integer
                          nullable: true
                          minimum: 1
                          maximum: 9999
                          description: >-
                            Ano de nascimento reportado pelo registo de
                            empresas, incluindo quando a data completa não está
                            disponível.
                        date_of_birth_month:
                          type: integer
                          nullable: true
                          minimum: 1
                          maximum: 12
                          description: >-
                            Mês de nascimento reportado pelo registo de
                            empresas. Nulo quando apenas o ano é conhecido.
                  beneficial_owners:
                    type: array
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                          format: uuid
                        name:
                          type: string
                        first_name:
                          type: string
                          nullable: true
                        last_name:
                          type: string
                          nullable: true
                        entity_type:
                          type: string
                          enum:
                            - person
                            - company
                        roles:
                          type: array
                          items:
                            type: string
                        ownership_min_shares:
                          type: string
                          nullable: true
                          description: >-
                            Limite inferior da percentagem de propriedade
                            conforme reportada pelo registo. String de formato
                            livre (por exemplo, `"25.00"`, `"50"`); utilize
                            `effective_ownership_percent` para um valor numérico
                            processado.
                        ownership_max_shares:
                          type: string
                          nullable: true
                          description: >-
                            Limite superior da percentagem de propriedade
                            conforme comunicada pelo registo. String de formato
                            livre; utilize `effective_ownership_percent` para um
                            valor numérico processado.
                        is_active:
                          type: boolean
                        kyc_status:
                          type: string
                          enum:
                            - Approved
                            - Declined
                            - Pending
                          nullable: true
                        kyc_session_url:
                          type: string
                          format: uri
                          nullable: true
                        effective_ownership_percent:
                          type: number
                          nullable: true
                        company_name:
                          type: string
                          nullable: true
                        registration_number:
                          type: string
                          nullable: true
                        country_of_birth:
                          type: string
                          nullable: true
                        email:
                          type: string
                          nullable: true
                        nationality:
                          type: string
                          nullable: true
                        designation:
                          type: string
                          nullable: true
                        voting_min_shares:
                          type: string
                          nullable: true
                        voting_max_shares:
                          type: string
                          nullable: true
                        date_of_birth:
                          type: string
                          nullable: true
                          description: Data de nascimento completa quando comunicada.
                          format: date
                        appointment_date:
                          type: string
                          nullable: true
                          description: Data de nomeação quando comunicada.
                          format: date
                        shareholding:
                          $ref: '#/components/schemas/KYBRegistryShareholding'
                  addresses:
                    type: array
                    nullable: true
                    description: >-
                      Todas as moradas indicadas pelo registo, num formato
                      canónico. Nulo quando este não indicar nenhuma.
                    items:
                      $ref: '#/components/schemas/KYBRegistryAddress'
                  industries:
                    type: array
                    nullable: true
                    description: >-
                      As atividades sob as quais o registo classifica a empresa,
                      num formato canónico. Null quando não indica nenhuma.
                    items:
                      $ref: '#/components/schemas/KYBRegistryIndustry'
                  accounts:
                    type: object
                    nullable: true
                    additionalProperties: true
                    description: >-
                      Datas de submissão no registo de empresas, quando
                      disponíveis. As declarações anuais e assembleias gerais
                      utilizam last_annual_return_date e last_agm_date; são
                      distintas das contas financeiras.
                  registry_data:
                    $ref: '#/components/schemas/KYBRegistryData'
                  user_provided_data:
                    type: object
                    description: Dados confirmados ou editados pelo utilizador final.
                  confirmed_by_user_at:
                    type: string
                    format: date-time
                    nullable: true
                  last_console_edit_at:
                    type: string
                    format: date-time
                    nullable: true
                  is_editable:
                    type: boolean
                  ownership:
                    $ref: '#/components/schemas/KYBRegistryOwnership'
                  registry_tier:
                    type: string
                    nullable: true
                    description: >-
                      O nível de registo encomendado pelo fluxo: `basic`,
                      `shareholders` ou `ubo`. Também em
                      `ownership.tier_requested`.
                  registry_tier_delivered:
                    type: string
                    nullable: true
                    description: >-
                      O nível entregue pelo registo e que é faturado. Também em
                      `ownership.tier_delivered`.
                  registry_ownership_status:
                    type: string
                    nullable: true
                    description: >-
                      `not_requested`, `pending`, `delivered`, `not_held` ou
                      `unavailable`. Também em `ownership.status`.
                  registry_monitoring:
                    type: object
                    nullable: true
                    description: >-
                      A monitorização mais recente do registo para a empresa, ou
                      `null` quando não existir nenhuma.
                    properties:
                      uuid:
                        type: string
                        format: uuid
                      status:
                        type: string
                      unavailable_reason:
                        type: string
                        nullable: true
                      enrolled_at:
                        type: string
                        format: date-time
                        nullable: true
                      cancelled_at:
                        type: string
                        format: date-time
                        nullable: true
                      last_bill_date:
                        type: string
                        format: date
                        nullable: true
                      next_bill_date:
                        type: string
                        format: date
                        nullable: true
                      last_event_at:
                        type: string
                        format: date-time
                        nullable: true
                      events_count:
                        type: integer
                      watched_fields:
                        description: Os campos da empresa que o monitor acompanha.
              ownership_structure:
                $ref: '#/components/schemas/KYBOwnershipStructure'
              warnings:
                type: array
                items:
                  type: object
        key_people_checks:
          type: array
          nullable: true
          description: >-
            Verificações agregadas de pessoas-chave. Presente apenas quando
            `session_kind = business`. Cada item usa o formato de dois
            contentores (`registry`, `submitted`, `ubo_kyc_summary`).
          items:
            type: object
            description: >-
              Verificação agregada sobre os responsáveis + UBOs da empresa. Usa
              o formato `registry` / `submitted`. Presente apenas quando
              session_kind = business.
            properties:
              status:
                type: string
              node_id:
                type: string
                nullable: true
              registry:
                type: object
                description: Partes identificadas através da verificação do registo.
                properties:
                  officers:
                    type: array
                    description: >-
                      Administradores identificados através da verificação no
                      registo, cada um enriquecido com o estado de qualquer
                      sessão de KYC filha e triagem AML criadas para eles.
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                          format: uuid
                        name:
                          type: string
                          description: >-
                            Nome completo do administrador conforme consta no
                            registo.
                        designation:
                          type: string
                          nullable: true
                          description: >-
                            Designação em texto livre do registo (por exemplo,
                            `Director`, `Company Secretary`).
                        role:
                          type: string
                          enum:
                            - director
                            - non_executive_director
                            - secretary
                            - chairman
                            - ubo
                            - shareholder
                            - representative
                            - founder
                            - legal_advisor
                            - authorized_signatory
                            - trustee
                            - beneficiary
                            - settlor
                            - protector
                            - company_officer
                            - investor
                            - other
                          description: Função de dirigente normalizada.
                        nationality:
                          type: string
                          nullable: true
                        appointment_date:
                          type: string
                          nullable: true
                          description: Data em que o administrador foi nomeado.
                          format: date
                        termination_date:
                          type: string
                          nullable: true
                          description: Data em que a nomeação terminou, quando reportada.
                          format: date
                        is_active:
                          type: boolean
                        address:
                          type: string
                          nullable: true
                          description: Morada do administrador indicada pelo registo.
                        aml_status:
                          type: string
                          enum:
                            - Not Finished
                            - Approved
                            - Declined
                            - In Review
                            - Resub Requested
                          nullable: true
                          description: >-
                            Estado da triagem AML executada para este
                            administrador. `null` quando nenhuma triagem AML
                            tiver sido executada.
                        kyc_status:
                          type: string
                          enum:
                            - Not Started
                            - In Progress
                            - Approved
                            - Declined
                            - In Review
                            - Expired
                            - Abandoned
                            - Kyc Expired
                            - Resubmitted
                            - Awaiting User
                          nullable: true
                          description: >-
                            Estado do ciclo de vida em bruto da sessão
                            secundária de KYC gerada para este responsável da
                            empresa. Este é o enum de estado completo da sessão
                            (e não um conjunto reduzido
                            Approved/Declined/Pending). `null` quando não existe
                            uma sessão secundária de KYC.
                        kyc_session_url:
                          type: string
                          format: uri
                          nullable: true
                          description: >-
                            URL partilhável da sessão filha de KYC. `null`
                            quando não existe qualquer sessão filha.
                        kyc_session_id:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            ID de sessão da sessão KYC subordinada. Transmita-o
                            a este mesmo endpoint de decisão para obter o
                            relatório KYC completo da pessoa. `null` quando não
                            existe nenhuma sessão subordinada.
                        verification_workflow_type:
                          type: string
                          nullable: true
                          description: >-
                            Tipo de fluxo base do fluxo da sessão filha (por
                            exemplo, `kyc`). `null` para fluxos baseados em
                            grafos ou quando não existe nenhuma sessão filha.
                        verification_workflow_id:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            ID do fluxo utilizado pela sessão subordinada.
                            `null` quando não existe sessão subordinada.
                        verification_workflow_label:
                          type: string
                          nullable: true
                          description: >-
                            Rótulo legível do fluxo da sessão dependente. `null`
                            quando não definido.
                        verification_workflow_features:
                          type: array
                          nullable: true
                          description: >-
                            Progresso por funcionalidade da sessão de
                            verificação filha, por exemplo, `[{"feature":
                            "ID_VERIFICATION", "status": "Approved"}]`. `null`
                            quando a sessão filha não tem uma lista de
                            funcionalidades que possa ser resolvida.
                          items:
                            type: object
                            properties:
                              feature:
                                type: string
                                description: >-
                                  Nome de apresentação da funcionalidade (por
                                  exemplo, `ID_VERIFICATION`, `LIVENESS`,
                                  `AML`).
                              status:
                                type: string
                                enum:
                                  - Not Finished
                                  - Approved
                                  - Declined
                                  - In Review
                                  - Resub Requested
                                description: >-
                                  Estado ao nível da funcionalidade dentro da
                                  sessão filha.
                        didit_internal_id:
                          type: string
                          nullable: true
                          description: >-
                            Identificador interno estável do indivíduo
                            verificado subjacente à sessão subordinada — útil
                            para a ligação entre sessões. `null` quando não
                            existe sessão subordinada ou o utilizador ainda não
                            foi resolvido.
                        kyc_document_type:
                          type: string
                          nullable: true
                          description: >-
                            Tipo de documento apresentado na sessão KYC
                            subordinada (por exemplo, `P`, `ID`, `DL`). `null`
                            até a sessão subordinada ter um resultado de
                            verificação de identidade.
                        kyc_nationality:
                          type: string
                          nullable: true
                          description: >-
                            Nacionalidade extraída do documento na sessão KYC
                            filha. `null` até estar disponível.
                        kyc_liveness_passed:
                          type: boolean
                          nullable: true
                          description: >-
                            Indica se a verificação de prova de vida da sessão
                            de KYC secundária foi aprovada. `null` quando
                            nenhuma prova de vida tiver sido executada.
                        kyc_verified_at:
                          type: string
                          format: date-time
                          nullable: true
                          description: >-
                            Quando a sessão de KYC subordinada atingiu
                            `Approved`. `null` enquanto a sessão subordinada
                            tiver qualquer outro estado.
                        kyc_aml_categories:
                          type: object
                          nullable: true
                          description: >-
                            Resumo por categoria derivado das correspondências
                            de AML da pessoa. `null` quando não existem
                            correspondências.
                          properties:
                            sanctions:
                              type: string
                              enum:
                                - match
                                - clear
                            pep:
                              type: string
                              enum:
                                - match
                                - clear
                            adverse_media:
                              type: string
                              enum:
                                - match
                                - clear
                            warnings:
                              type: string
                              enum:
                                - match
                                - clear
                        kyc_notification_sent_at:
                          type: string
                          nullable: true
                          description: >-
                            Carimbo de data/hora ISO 8601 da última notificação
                            de convite de verificação enviada para a sessão
                            dependente desta pessoa. `null` quando nenhuma tiver
                            sido enviada.
                        first_name:
                          type: string
                          nullable: true
                          description: >-
                            Nome próprio quando explicitamente indicado pelo
                            registo; não deduzido a partir do nome completo.
                        last_name:
                          type: string
                          nullable: true
                          description: >-
                            Apelido quando explicitamente comunicado pelo
                            registo.
                        date_of_birth:
                          type: string
                          nullable: true
                          description: >-
                            Data de nascimento completa comunicada pelo registo
                            de empresas. Nulo quando apenas o ano ou mês de
                            nascimento é conhecido.
                          format: date
                        date_of_birth_year:
                          type: integer
                          nullable: true
                          minimum: 1
                          maximum: 9999
                          description: >-
                            Ano de nascimento reportado pelo registo de
                            empresas, incluindo quando a data completa não está
                            disponível.
                        date_of_birth_month:
                          type: integer
                          nullable: true
                          minimum: 1
                          maximum: 12
                          description: >-
                            Mês de nascimento reportado pelo registo de
                            empresas. Nulo quando apenas o ano é conhecido.
                  beneficial_owners:
                    type: array
                    description: >-
                      Beneficiários efetivos descobertos através da verificação
                      no registo, cada um enriquecido com o estado de qualquer
                      sessão de KYC dependente e triagem AML iniciada para eles.
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                          format: uuid
                        name:
                          type: string
                          description: >-
                            Nome completo do beneficiário efetivo (ou nome da
                            empresa para UBOs empresariais).
                        first_name:
                          type: string
                          nullable: true
                        last_name:
                          type: string
                          nullable: true
                        date_of_birth:
                          type: string
                          nullable: true
                          description: Data de nascimento completa quando comunicada.
                          format: date
                        country_of_birth:
                          type: string
                          nullable: true
                        email:
                          type: string
                          nullable: true
                        company_name:
                          type: string
                          nullable: true
                        registration_number:
                          type: string
                          nullable: true
                        entity_type:
                          type: string
                          enum:
                            - person
                            - company
                        nationality:
                          type: string
                          nullable: true
                        designation:
                          type: string
                          nullable: true
                        roles:
                          type: array
                          description: >-
                            Nomes das funções desempenhadas por este
                            proprietário, por exemplo `["ubo", "shareholder"]`.
                          items:
                            type: string
                        ownership_min_shares:
                          type: string
                          nullable: true
                          description: >-
                            Limite inferior da percentagem de propriedade
                            conforme reportada pelo registo. String de formato
                            livre (por exemplo, `"25"`, `"25-50%"`); utilize
                            `effective_ownership_percent` para um valor numérico
                            processado.
                        ownership_max_shares:
                          type: string
                          nullable: true
                          description: >-
                            Limite superior da percentagem de propriedade
                            conforme comunicada pelo registo. String de formato
                            livre; utilize `effective_ownership_percent` para um
                            valor numérico processado.
                        is_active:
                          type: boolean
                        aml_status:
                          type: string
                          enum:
                            - Not Finished
                            - Approved
                            - Declined
                            - In Review
                            - Resub Requested
                          nullable: true
                          description: >-
                            Estado da triagem AML executada para este
                            beneficiário efetivo. `null` quando nenhuma triagem
                            AML tiver sido executada.
                        kyc_status:
                          type: string
                          enum:
                            - Not Started
                            - In Progress
                            - Approved
                            - Declined
                            - In Review
                            - Expired
                            - Abandoned
                            - Kyc Expired
                            - Resubmitted
                            - Awaiting User
                          nullable: true
                          description: >-
                            Estado do ciclo de vida em bruto da sessão
                            secundária de KYC gerada para este beneficiário
                            efetivo. Este é o enum de estado completo da sessão
                            (e não um conjunto reduzido
                            Approved/Declined/Pending). `null` quando não existe
                            uma sessão secundária de KYC.
                        kyc_session_url:
                          type: string
                          format: uri
                          nullable: true
                          description: >-
                            URL partilhável da sessão filha de KYC. `null`
                            quando não existe qualquer sessão filha.
                        kyc_session_id:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            ID de sessão da sessão KYC subordinada. Transmita-o
                            a este mesmo endpoint de decisão para obter o
                            relatório KYC completo da pessoa. `null` quando não
                            existe nenhuma sessão subordinada.
                        verification_workflow_type:
                          type: string
                          nullable: true
                          description: >-
                            Tipo de fluxo base do fluxo da sessão filha (por
                            exemplo, `kyc`). `null` para fluxos baseados em
                            grafos ou quando não existe nenhuma sessão filha.
                        verification_workflow_id:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            ID do fluxo utilizado pela sessão subordinada.
                            `null` quando não existe sessão subordinada.
                        verification_workflow_label:
                          type: string
                          nullable: true
                          description: >-
                            Rótulo legível do fluxo da sessão dependente. `null`
                            quando não definido.
                        verification_workflow_features:
                          type: array
                          nullable: true
                          description: >-
                            Progresso por funcionalidade da sessão de
                            verificação filha, por exemplo, `[{"feature":
                            "ID_VERIFICATION", "status": "Approved"}]`. `null`
                            quando a sessão filha não tem uma lista de
                            funcionalidades que possa ser resolvida.
                          items:
                            type: object
                            properties:
                              feature:
                                type: string
                                description: >-
                                  Nome de apresentação da funcionalidade (por
                                  exemplo, `ID_VERIFICATION`, `LIVENESS`,
                                  `AML`).
                              status:
                                type: string
                                enum:
                                  - Not Finished
                                  - Approved
                                  - Declined
                                  - In Review
                                  - Resub Requested
                                description: >-
                                  Estado ao nível da funcionalidade dentro da
                                  sessão filha.
                        didit_internal_id:
                          type: string
                          nullable: true
                          description: >-
                            Identificador interno estável do indivíduo
                            verificado subjacente à sessão subordinada — útil
                            para a ligação entre sessões. `null` quando não
                            existe sessão subordinada ou o utilizador ainda não
                            foi resolvido.
                        kyc_document_type:
                          type: string
                          nullable: true
                          description: >-
                            Tipo de documento apresentado na sessão KYC
                            subordinada (por exemplo, `P`, `ID`, `DL`). `null`
                            até a sessão subordinada ter um resultado de
                            verificação de identidade.
                        kyc_nationality:
                          type: string
                          nullable: true
                          description: >-
                            Nacionalidade extraída do documento na sessão KYC
                            filha. `null` até estar disponível.
                        kyc_liveness_passed:
                          type: boolean
                          nullable: true
                          description: >-
                            Indica se a verificação de prova de vida da sessão
                            de KYC secundária foi aprovada. `null` quando
                            nenhuma prova de vida tiver sido executada.
                        kyc_verified_at:
                          type: string
                          format: date-time
                          nullable: true
                          description: >-
                            Quando a sessão de KYC subordinada atingiu
                            `Approved`. `null` enquanto a sessão subordinada
                            tiver qualquer outro estado.
                        kyc_aml_categories:
                          type: object
                          nullable: true
                          description: >-
                            Resumo por categoria derivado das correspondências
                            de AML da pessoa. `null` quando não existem
                            correspondências.
                          properties:
                            sanctions:
                              type: string
                              enum:
                                - match
                                - clear
                            pep:
                              type: string
                              enum:
                                - match
                                - clear
                            adverse_media:
                              type: string
                              enum:
                                - match
                                - clear
                            warnings:
                              type: string
                              enum:
                                - match
                                - clear
                        kyc_notification_sent_at:
                          type: string
                          nullable: true
                          description: >-
                            Carimbo de data/hora ISO 8601 da última notificação
                            de convite de verificação enviada para a sessão
                            dependente desta pessoa. `null` quando nenhuma tiver
                            sido enviada.
                        child_beneficial_owners:
                          type: array
                          description: >-
                            Para UBOs corporativos: os próprios beneficiários
                            efetivos da entidade proprietária, como objetos em
                            bruto extraídos do registo. Array vazio quando não
                            for aplicável.
                          items:
                            type: object
                        effective_ownership_percent:
                          type: number
                          nullable: true
                          description: >-
                            Percentagem de propriedade numérica analisada — o
                            limite máximo quando disponível, caso contrário o
                            limite mínimo. `null` quando nenhum dos limites pôde
                            ser analisado.
                        voting_min_shares:
                          type: string
                          nullable: true
                        voting_max_shares:
                          type: string
                          nullable: true
                        appointment_date:
                          type: string
                          nullable: true
                          description: Data de nomeação quando comunicada.
                          format: date
              submitted:
                type: object
                description: >-
                  Partes submetidas pelo administrador da empresa durante o
                  fluxo de Pessoas-chave (linhas BusinessParty onde
                  source=USER).
                properties:
                  parties:
                    type: array
                    items:
                      type: object
                      description: >-
                        Parte submetida pelo administrador da empresa através do
                        fluxo de Pessoas-chave (source=USER).
                      properties:
                        uuid:
                          type: string
                          format: uuid
                        entity_type:
                          type: string
                          enum:
                            - person
                            - company
                        source:
                          type: string
                          enum:
                            - USER
                          description: >-
                            Sempre `USER` aqui — esta categoria contém apenas
                            partes introduzidas ou confirmadas pelo utilizador
                            final no fluxo de pessoas-chave (as pessoas
                            descobertas no registo aparecem sob `registry`).
                        name:
                          type: string
                        first_name:
                          type: string
                          nullable: true
                        last_name:
                          type: string
                          nullable: true
                        company_name:
                          type: string
                          nullable: true
                        registration_number:
                          type: string
                          nullable: true
                        email:
                          type: string
                          format: email
                          nullable: true
                        nationality:
                          type: string
                          nullable: true
                          description: >-
                            Nacionalidade para pessoas singulares; país de
                            constituição para partes empresariais.
                        phone_number:
                          type: string
                          nullable: true
                        date_of_birth:
                          type: string
                          format: date
                          nullable: true
                        position:
                          type: string
                          nullable: true
                          description: >-
                            Cargo/posição em texto livre (apenas pessoas
                            singulares).
                        custom_fields:
                          type: object
                          description: >-
                            Campos personalizados definidos pelo fluxo
                            recolhidos para esta parte; as chaves são definidas
                            pelos descritores de campos de pessoas-chave do
                            fluxo.
                        is_active:
                          type: boolean
                        is_skipped:
                          type: boolean
                          description: >-
                            True quando o utilizador final ignorou a verificação
                            para esta parte (apenas possível quando a função
                            permite ignorar).
                        requires_verification:
                          type: boolean
                          description: >-
                            True quando é necessária uma subsessão secundária de
                            KYC / KYB para esta parte, com base nas definições
                            de funções e limiares de propriedade.
                        roles:
                          type: array
                          description: >-
                            Todas as funções desempenhadas por esta parte, cada
                            uma com as suas próprias percentagens de propriedade
                            e de voto. Não existe um campo escalar
                            `role`/`ownership_percent` na própria parte.
                          items:
                            type: object
                            properties:
                              role:
                                type: string
                                enum:
                                  - director
                                  - non_executive_director
                                  - secretary
                                  - chairman
                                  - ubo
                                  - shareholder
                                  - representative
                                  - founder
                                  - legal_advisor
                                  - authorized_signatory
                                  - trustee
                                  - beneficiary
                                  - settlor
                                  - protector
                                  - company_officer
                                  - investor
                                  - other
                              ownership_percent:
                                type: number
                                nullable: true
                              voting_percent:
                                type: number
                                nullable: true
                        kyc_session_id:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            ID da sessão KYC dependente para partes individuais
                            que requerem verificação. `null` caso contrário.
                        kyc_session_status:
                          type: string
                          enum:
                            - Not Started
                            - In Progress
                            - Approved
                            - Declined
                            - In Review
                            - Expired
                            - Abandoned
                            - Kyc Expired
                            - Resubmitted
                            - Awaiting User
                          nullable: true
                          description: >-
                            Estado do ciclo de vida da sessão-filha de KYC.
                            `null` quando não existe nenhuma sessão-filha de
                            KYC.
                        kyc_session_url:
                          type: string
                          format: uri
                          nullable: true
                        kyb_sub_session_id:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            ID da subsessão KYB dependente para partes
                            empresariais que requerem verificação. `null` caso
                            contrário.
                        kyb_sub_session_status:
                          type: string
                          enum:
                            - Not Started
                            - In Progress
                            - Approved
                            - Declined
                            - In Review
                            - Expired
                            - Abandoned
                            - Kyc Expired
                            - Resubmitted
                            - Awaiting User
                          nullable: true
                          description: >-
                            Estado do ciclo de vida da subsessão-filha de KYB.
                            `null` quando não existe nenhuma subsessão.
                        kyb_sub_session_url:
                          type: string
                          format: uri
                          nullable: true
                          description: >-
                            URL partilhável da subsessão filha de KYB. `null`
                            quando não existe qualquer subsessão.
                        verification_workflow_type:
                          type: string
                          nullable: true
                          description: >-
                            Tipo de fluxo base do fluxo da sessão filha (sessão
                            de KYC preferencial, recorrendo à subsessão de KYB
                            como alternativa). `null` para fluxos baseados em
                            grafos ou quando não existe nenhuma sessão filha.
                        verification_workflow_id:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            ID do fluxo utilizado pela sessão subordinada.
                            `null` quando não existe sessão subordinada.
                        verification_workflow_label:
                          type: string
                          nullable: true
                          description: >-
                            Rótulo legível do fluxo da sessão dependente. `null`
                            quando não definido.
                        verification_workflow_features:
                          type: array
                          nullable: true
                          description: >-
                            Progresso por funcionalidade da sessão de
                            verificação filha, por exemplo, `[{"feature":
                            "ID_VERIFICATION", "status": "Approved"}]`. `null`
                            quando a sessão filha não tem uma lista de
                            funcionalidades que possa ser resolvida.
                          items:
                            type: object
                            properties:
                              feature:
                                type: string
                                description: >-
                                  Nome de apresentação da funcionalidade (por
                                  exemplo, `ID_VERIFICATION`, `LIVENESS`,
                                  `AML`).
                              status:
                                type: string
                                enum:
                                  - Not Finished
                                  - Approved
                                  - Declined
                                  - In Review
                                  - Resub Requested
                                description: >-
                                  Estado ao nível da funcionalidade dentro da
                                  sessão filha.
                        didit_internal_id:
                          type: string
                          nullable: true
                          description: >-
                            Identificador interno estável do indivíduo
                            verificado subjacente à sessão subordinada. `null`
                            quando não resolvido.
              ubo_kyc_summary:
                type: object
                nullable: true
                description: >-
                  Progresso agregado de KYC de UBOs, ou null quando nenhum UBO
                  tem uma sessão de KYC associada.
                properties:
                  total:
                    type: integer
                  approved:
                    type: integer
                  flagged:
                    type: integer
                    description: UBOs cujo KYC se encontra recusada ou em análise.
                  pending:
                    type: integer
              warnings:
                type: array
                items:
                  type: object
        document_verifications:
          type: array
          nullable: true
          description: >-
            Verificações de documentos agrupadas por nó do fluxo. Presente
            apenas quando `session_kind = business`.
          items:
            type: object
            description: >-
              Documentos agrupados por nó do fluxo. Presente apenas quando
              session_kind = business.
            properties:
              status:
                type: string
              node_id:
                type: string
                nullable: true
              items:
                type: array
                items:
                  type: object
                  properties:
                    uuid:
                      type: string
                      format: uuid
                    document_type:
                      type: string
                      enum:
                        - LEGAL_PRESENCE
                        - COMPANY_DETAILS
                        - OWNERSHIP_STRUCTURE
                        - REPRESENTATIVES_AUTHORIZATION
                        - OTHER
                      nullable: true
                      description: >-
                        Grupo de documentos de KYB de alto nível no qual o
                        ficheiro foi classificado. `null` enquanto não estiver
                        classificado.
                    document_subtype:
                      type: string
                      nullable: true
                      description: >-
                        Subtipo específico detetado pelo OCR (por exemplo,
                        `CERTIFICATE_OF_INCORPORATION`, `SHAREHOLDER_REGISTRY`);
                        `UNKNOWN` quando o OCR não conseguiu classificar o
                        documento com confiança.
                    document_group:
                      type: string
                      enum:
                        - LEGAL_PRESENCE
                        - COMPANY_DETAILS
                        - OWNERSHIP_STRUCTURE
                        - REPRESENTATIVES_AUTHORIZATION
                        - OTHER
                      nullable: true
                      description: >-
                        Alias de `document_type` — o nome do grupo usado por
                        `groups` e `required_groups`.
                    file_url:
                      type: string
                      format: uri
                      nullable: true
                      description: >-
                        Ligação pré-assinada de curta duração para o ficheiro
                        carregado. `null` para marcadores de posição de pedidos
                        de documentos criados por analistas (`is_requested =
                        true`) que ainda não tenham sido cumpridos.
                    original_filename:
                      type: string
                      nullable: true
                      description: >-
                        Nome do ficheiro tal como carregado pelo utilizador ou
                        analista.
                    file_size:
                      type: integer
                      nullable: true
                      description: Tamanho do ficheiro em bytes.
                    status:
                      type: string
                      enum:
                        - Not Finished
                        - Approved
                        - Declined
                        - In Review
                        - Resub Requested
                      description: Estado da verificação por documento.
                    created_at:
                      type: string
                      format: date-time
                    cross_check_result:
                      type: object
                      nullable: true
                      description: >-
                        Referência cruzada dos campos do documento extraídos por
                        OCR com o perfil da empresa no registo. Um objeto com as
                        secções `critical`, `non_critical` e `people`, cada uma
                        das quais mapeia o nome de um campo (ex.:
                        `company_name`, `registration_number`,
                        `incorporation_date`, `registered_address`) para um
                        registo de comparação como `{"document": "...",
                        "registry": "...", "match": true, "score": 0.97}`.
                        `null` quando o documento não continha dados de OCR ou
                        não existia nenhuma empresa no registo para comparar.
                    document_metadata:
                      type: object
                      nullable: true
                      description: >-
                        Metadados extraídos do documento empresarial carregado.
                        Quando a extração de metadados for bem-sucedida, todas
                        as 16 chaves estão sempre presentes (os valores
                        individuais são `null` quando não aplicáveis ao tipo de
                        ficheiro); o objeto completo é `null` quando nada pôde
                        ser extraído. Para ficheiros PDF, `overlay_manipulation`
                        contém a análise forense de texto sobreposto.
                      properties:
                        file_size:
                          type: integer
                          nullable: true
                          description: Tamanho do documento.
                        content_type:
                          type: string
                          nullable: true
                          description: Tipo de conteúdo do documento.
                        creation_date:
                          type: string
                          nullable: true
                          description: Data em que o documento foi criado.
                        modified_date:
                          type: string
                          nullable: true
                          description: Data em que o documento foi modificado.
                        creator:
                          type: string
                          nullable: true
                          description: >-
                            Ferramenta ou utilizador de autoria registado nos
                            metadados do ficheiro (`Creator` do PDF).
                        producer:
                          type: string
                          nullable: true
                          description: Software que gerou o ficheiro (PDF `Producer`).
                        software:
                          type: string
                          nullable: true
                          description: >-
                            Software de edição registado nos metadados do
                            ficheiro.
                        encryption:
                          type: string
                          nullable: true
                          description: >-
                            Esquema de encriptação do ficheiro, quando
                            encriptado.
                        is_signed:
                          type: boolean
                          nullable: true
                          description: Indica se o documento contém uma assinatura digital.
                        is_tampered:
                          type: boolean
                          nullable: true
                          description: >-
                            Indica se a assinatura digital falhou a validação
                            (modificação após assinatura).
                        signature_info:
                          type: object
                          nullable: true
                          description: >-
                            Detalhes da(s) assinatura(s) digital(ais), quando
                            presentes.
                        exif_original_date:
                          type: string
                          nullable: true
                          description: >-
                            Data de captura original EXIF, para carregamentos de
                            imagens.
                        exif_digitized_date:
                          type: string
                          nullable: true
                          description: >-
                            Data de digitalização EXIF, para carregamentos de
                            imagens.
                        processed_by_known_editor:
                          type: boolean
                          nullable: true
                          description: >-
                            Se os metadados indicam que o ficheiro passou por um
                            editor de imagem/PDF conhecido.
                        has_different_creation_mod_date:
                          type: boolean
                          nullable: true
                          description: >-
                            Se as datas de criação e modificação diferem — um
                            possível sinal (mas não conclusivo) de edição.
                        overlay_manipulation:
                          type: object
                          nullable: true
                          description: >-
                            Análise forense de PDF para suspeita de manipulação
                            de texto sobreposto. Nulo quando não forem
                            encontradas evidências de manipulação de texto
                            sobreposto ou o documento não for um PDF.
                          properties:
                            detected:
                              type: boolean
                              description: >-
                                Se foram detetadas evidências de manipulação de
                                texto sobreposto.
                            analyzed:
                              type: boolean
                              description: Indica se foi possível analisar o PDF.
                            analysis_incomplete:
                              type: boolean
                              description: >-
                                Presente e verdadeiro apenas quando o ficheiro
                                não pôde ser verificado na íntegra. O que foi
                                verificado mantém as suas conclusões sempre que
                                possível, e o documento apresenta o aviso de
                                substituição de texto não comprovada.
                            signals:
                              type: array
                              items:
                                type: string
                              description: >-
                                Sinais forenses detetados, tais como
                                duplicate_font_subset ou glyph_fragmentation.
                            manipulated_regions:
                              type: array
                              description: >-
                                Áreas com suspeita de manipulação nas
                                coordenadas da página do PDF.
                              items:
                                type: object
                                properties:
                                  page:
                                    type: integer
                                  x:
                                    type: number
                                  'y':
                                    type: number
                                  width:
                                    type: number
                                  height:
                                    type: number
                                  page_width:
                                    type: number
                                  page_height:
                                    type: number
                    description:
                      type: string
                      nullable: true
                      description: >-
                        Rótulo ou motivo fornecido pelo analista para um pedido
                        de documento. `null` para carregamentos normais.
                    is_requested:
                      type: boolean
                      description: >-
                        True para marcadores de posição de pedidos de documentos
                        criados por analistas a aguardar um carregamento.
                    ocr_data:
                      type: object
                      nullable: true
                    is_console_upload:
                      type: boolean
                      description: >-
                        True para documentos carregados a partir da consola em
                        vez do fluxo do utilizador final. Os carregamentos pela
                        consola nunca alteram o estado agregado ao nível da
                        funcionalidade.
                    is_confirmed:
                      type: boolean
                      description: >-
                        Os carregamentos através da consola começam como `false`
                        e passam a `true` assim que o administrador os
                        confirmar; os carregamentos do utilizador final são
                        sempre `true`.
              groups:
                type: object
                description: >-
                  Contadores de progresso por grupo indexados pelo nome do grupo
                  (por exemplo, legal_presence, ownership_structure).
                additionalProperties:
                  type: object
                  properties:
                    total:
                      type: integer
                    approved:
                      type: integer
                    pending:
                      type: integer
                    declined:
                      type: integer
                    in_review:
                      type: integer
                    other:
                      type: integer
                    missing:
                      type: integer
                      description: >-
                        Marcadores de posição pedidos sem qualquer ficheiro
                        carregado até ao momento.
              required_groups:
                type: array
                items:
                  type: string
              warnings:
                type: array
                items:
                  type: object
        environment:
          type: string
          enum:
            - live
            - sandbox
          description: >-
            Se a sessão foi criada por uma aplicação em produção (`live`) ou por
            uma aplicação sandbox (`sandbox`). As sessões sandbox são gratuitas,
            totalmente simuladas e nunca consomem créditos.
        sandbox_scenario:
          type: string
          nullable: true
          description: >-
            O cenário de sandbox com o qual a sessão foi criada. `null` para
            sessões de produção e para sessões de sandbox criadas sem nenhum.
        resubmissions:
          type: array
          description: >-
            Retornado apenas com `include=resubmissions`, para sessões de
            utilizador e de empresa. Uma entrada por pedido de nova submissão,
            da mais antiga para a mais recente. Cada entrada contém os
            resultados que os passos ressubmetidos retornaram antes do pedido,
            para que as submissões anteriores permaneçam legíveis. A eliminação
            da sessão elimina todas as submissões.
          items:
            type: object
            properties:
              number:
                type: integer
                description: >-
                  1 para a primeira nova submissão da sessão, 2 para a segunda e
                  assim sucessivamente.
              created_at:
                type: string
                format: date-time
                description: Quando a resubmissão foi solicitada.
              previous_status:
                type: string
                description: O estado da sessão imediatamente antes do pedido.
              nodes:
                type: array
                description: Os passos do fluxo enviados de volta ao utilizador.
                items:
                  type: object
                  properties:
                    node_id:
                      type: string
                    feature:
                      type: string
              reasons:
                type: object
                nullable: true
                additionalProperties:
                  type: string
                description: O motivo indicado para cada passo, indexado por `node_id`.
              requested_by:
                type: object
                nullable: true
                description: Quem solicitou o novo envio.
                properties:
                  name:
                    type: string
                  email:
                    type: string
                  type:
                    type: string
              results:
                type: object
                additionalProperties: true
                description: >-
                  O que os passos reenviados devolveram antes do pedido, sob as
                  mesmas chaves e com a mesma estrutura que os resultados atuais
                  desta resposta (`id_verifications`, `nfc_verifications`,
                  `liveness_checks`, `face_matches`, `poa_verifications`,
                  `phone_verifications`, `email_verifications`,
                  `aml_screenings`, `ip_analyses`, `database_validations`,
                  `questionnaire_responses`, `document_ai_documents`,
                  `geolocation_checks`; para sessões de empresas também
                  `document_verifications`). Apenas surgem as chaves dos passos
                  que foram reenviados.
        biometric_consent:
          type: object
          nullable: true
          description: >-
            Se a sessão exigiu consentimento biométrico explícito antes de uma
            captura facial, o motivo e a evidência da resposta. Apenas sessões
            de Verificação de utilizadores (KYC); o mesmo objeto está na
            `decision` dos webhooks da sessão. `null` quando a sessão nunca foi
            avaliada, por exemplo, num fluxo sem captura facial. Campos sem
            valor registado são `null`. Um SDK nativo anterior à versão 4.10.0,
            ou um que não reporte a sua versão, não consegue apresentar o passo
            de consentimento: as respetivas capturas faciais são executadas como
            anteriormente, e uma sessão que tenha exigido consentimento reporta
            `status: "pending"` com `reason:
            "BIOMETRIC_CONSENT_UNSUPPORTED_SDK"`. Consulte [Consentimento
            biométrico](/pt/getting-started/biometric-consent).
          properties:
            required:
              type: boolean
              description: >-
                Whether the session must collect explicit biometric consent.
                Never goes back to `false`.
            trigger:
              type: string
              nullable: true
              enum:
                - declared_state
                - ip_state
                - ip_unknown
                - document_issuer
                - forced
                - customer_collected
              description: >-
                O motivo pelo qual o consentimento é obrigatório, ou como foi
                satisfeito. `declared_state`: declarou um estado abrangido
                (`user_state`, ou uma morada nos EUA em `expected_details`).
                `ip_state`: o IP da pessoa está num estado abrangido (Illinois,
                Texas, Colorado). `ip_unknown`: as evidências colocam a pessoa
                nos EUA, mas o estado não pode ser determinado (o IP está nos
                EUA sem indicação de estado, ou não pode ser localizado enquanto
                os seus dados ou o documento colocam a pessoa nos EUA).
                `document_issuer`: o documento de identidade foi emitido por um
                estado abrangido. `forced`: o modo da aplicação é Always.
                `customer_collected`: enviou `biometric_consent` ao criar a
                sessão. `null` enquanto não for obrigatório.
            status:
              type: string
              enum:
                - not_required
                - pending
                - given
                - declined
              description: >-
                `not_required`; `pending` (obrigatório e não fornecido: a pessoa
                ainda não respondeu, ou `reason` indica por que não foi
                recolhido); `given`; `declined` (foi registada uma recusa e a
                sessão terminou como `Declined`; nenhum ecrã da Didit
                disponibiliza atualmente uma opção de recusa).
            given_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                Quando o consentimento foi fornecido. Para `customer_collected`,
                o `given_at` que enviou.
            declined_at:
              type: string
              format: date-time
              nullable: true
              description: Quando uma recusa foi registada.
            text_version:
              type: string
              nullable: true
              description: >-
                ID da versão do texto de consentimento ao qual a pessoa
                respondeu, ou o que enviou.
            text_hash:
              type: string
              nullable: true
              description: >-
                SHA-256 (hex) do texto de consentimento exato apresentado, no
                idioma em que foi apresentado.
            locale:
              type: string
              nullable: true
              description: Idioma no qual o texto de consentimento foi apresentado.
            policy_url:
              type: string
              format: uri
              nullable: true
              description: >-
                A política de dados biométricos ligada pelo passo de
                consentimento.
            step:
              type: string
              nullable: true
              description: >-
                Passo do fluxo em que a sessão se encontrava quando a pessoa
                respondeu, por exemplo `LIVENESS`.
            node_id:
              type: string
              nullable: true
              description: >-
                Nó do grafo do fluxo em que a sessão se encontrava quando a
                pessoa respondeu.
            ip_address:
              type: string
              nullable: true
              description: IP de onde veio a resposta.
            ip_country_code:
              type: string
              nullable: true
              description: País ISO 3166-1 alfa-2 do IP da resposta.
            ip_state:
              type: string
              nullable: true
              description: Subdivisão ISO 3166-2 do IP da resposta, por exemplo `US-IL`.
            ip_city:
              type: string
              nullable: true
              description: Cidade do IP da resposta.
            user_agent:
              type: string
              nullable: true
              description: Agente do utilizador do pedido da resposta.
            detected_ip_address:
              type: string
              nullable: true
              description: >-
                O IP da pessoa a partir do qual o requisito foi avaliado pela
                última vez. Pode ser diferente de `ip_address` quando a pessoa
                respondeu noutro dispositivo.
            detected_country_code:
              type: string
              nullable: true
              description: País ISO 3166-1 alfa-2 do IP detetado.
            detected_state:
              type: string
              nullable: true
              description: Subdivisão ISO 3166-2 do IP detetado.
            detected_city:
              type: string
              nullable: true
              description: Cidade do IP detetado.
            declared_state:
              type: string
              nullable: true
              description: >-
                Subdivisão ISO 3166-2 declarada por si: `user_state`, ou o
                estado de uma morada dos EUA em `expected_details`.
            document_state:
              type: string
              nullable: true
              description: >-
                Subdivisão ISO 3166-2 que emitiu o documento de identidade, lida
                na captura do documento de identificação.
            jurisdictions:
              type: array
              items:
                type: string
              description: >-
                Estados dos EUA (códigos USPS, por exemplo `IL`) cuja legislação
                biométrica abrange a pessoa. `US` quando os dados comprovativos
                situam a pessoa nos EUA mas nenhum estado é conhecido. Vazio
                quando nenhum se aplica.
            retention_months:
              type: integer
              nullable: true
              description: >-
                O limite de conservação biométrica mais curto, em meses, entre
                as `jurisdictions`. `null` quando nenhum se aplica.
            reason:
              type: string
              nullable: true
              enum:
                - BIOMETRIC_CONSENT_UNSUPPORTED_SDK
                - BIOMETRIC_CONSENT_DECLINED
              description: >-
                `BIOMETRIC_CONSENT_UNSUPPORTED_SDK`: o consentimento era
                obrigatório e um SDK nativo anterior a 4.10.0, ou que não
                comunicou a sua versão, capturou um rosto sem o passo de
                consentimento; `status` permanece `pending`, ou `given` se a
                pessoa tiver concordado posteriormente no fluxo alojado.
                `BIOMETRIC_CONSENT_DECLINED`: foi registada uma recusa
                (substitui o motivo do SDK). Caso contrário, `null`, e sempre
                `null` quando a sessão não exigiu consentimento.
            decline_reason:
              type: string
              nullable: true
              enum:
                - BIOMETRIC_CONSENT_DECLINED
              description: >-
                `BIOMETRIC_CONSENT_DECLINED` quando uma recusa registada
                encerrou a sessão; caso contrário, `null`.
            face_data_deleted_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                Quando a recusa eliminou as imagens faciais, vídeos e templates
                biométricos da sessão. `null` a menos que tenha sido registada
                uma recusa.
        investigator:
          $ref: '#/components/schemas/InvestigatorBlock'
        biometric_retention:
          $ref: '#/components/schemas/BiometricRetention'
        fraud_check:
          type: object
          nullable: true
          additionalProperties: true
          description: >-
            O resultado de uma chamada à API Fraud Check. `null` para qualquer
            outra sessão.
        full_session_video:
          type: string
          format: uri
          nullable: true
          description: >-
            URL temporário da gravação completa da sessão. Devolvido apenas
            quando a sua organização grava vídeo da sessão completa.
        full_session_video_recorded_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Quando a gravação de sessão completa foi feita. Devolvido apenas
            quando a sua organização grava vídeo de sessão completa.
    AddressValidationResult:
      type: object
      description: >-
        O resultado de uma Address Validation: se a morada existe e a sua forma
        normalizada. Confirma apenas a morada; nunca associa a morada a uma
        pessoa.
      required:
        - status
        - verification_level
        - address
        - formatted_address
        - latitude
        - longitude
      properties:
        status:
          type: string
          enum:
            - verified
            - partially_verified
            - not_verified
            - unavailable
          description: >-
            `verified`: a morada foi confirmada até ao edifício (ou
            fração/apartamento ou apartado). `partially_verified`: foi
            confirmada apenas até à rua, ou até ao nível mais preciso que os
            dados de referência postal contêm para essa localização.
            `not_verified`: apenas a região ou a cidade corresponderam, ou nada
            correspondeu. `unavailable`: não foi possível executar a validação
            (por exemplo, o serviço de referência não respondeu); não é cobrada
            e nunca afeta uma verificação.
        verification_level:
          type: string
          nullable: true
          enum:
            - administrative_area
            - locality
            - thoroughfare
            - premise
            - delivery_point
            - null
          description: >-
            O nível mais preciso com o qual a morada foi correspondida. `null`
            quando nada correspondeu ou `status` for `unavailable`.
        address:
          type: object
          nullable: true
          description: A morada normalizada. `null` quando `status` é `unavailable`.
          properties:
            address_line_1:
              type: string
              nullable: true
              description: >-
                Primeira linha de entrega, escrita da forma como o país a
                escreve.
              example: 1600 Amphitheatre Pkwy
            address_line_2:
              type: string
              nullable: true
              description: >-
                Segunda linha de entrega (um apartamento, edifício ou bairro),
                quando a morada possuir uma.
            city:
              type: string
              nullable: true
              example: Mountain View
            region:
              type: string
              nullable: true
              description: Estado, província ou região.
              example: CA
            postal_code:
              type: string
              nullable: true
              example: 94043-1351
            country:
              type: string
              nullable: true
              description: Código de país ISO 3166-1 alpha-2.
              example: US
        formatted_address:
          type: string
          nullable: true
          description: A morada normalizada numa única linha.
          example: 1600 Amphitheatre Pkwy, Mountain View CA 94043-1351
        latitude:
          type: number
          nullable: true
          example: 37.422022
        longitude:
          type: number
          nullable: true
          example: -122.08429
    PhoneIntelligence:
      type: object
      description: >-
        Bloco de inteligência de telefone normalizado. Presente apenas quando o
        suplemento de inteligência foi executado para esta consulta; quando
        presente, também é exposto sob o alias `enrichment` com valores
        idênticos.
      properties:
        score:
          type: number
          nullable: true
          description: Pontuação de risco normalizada de 0-100. Mais alto é mais arriscado.
        phone_type_risk:
          type: string
          nullable: true
          description: '`Low`, `Medium` ou `High`, derivado da pontuação.'
        phone_trust_index:
          type: number
          nullable: true
          description: >-
            Inverso da pontuação, para painéis que preferem que quanto maior,
            melhor.
        network_stability_index:
          type: number
          nullable: true
          description: Estabilidade da rede associada à linha.
        is_disposable:
          type: boolean
          nullable: true
          description: '`true` quando o número parece descartável ou virtual.'
        is_ported:
          type: boolean
          nullable: true
          description: '`true` quando o número mudou de operadora.'
        is_recently_ported:
          type: boolean
          nullable: true
          description: '`true` quando a portabilidade ocorreu recentemente.'
        carrier_type:
          type: string
          nullable: true
          description: >-
            Classificação da linha comunicada pela consulta (por exemplo,
            `mobile`).
        reason_codes:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
                description: >-
                  Identificador Didit estável do sinal, por exemplo
                  `IR-5AC67A32`. Opaco: agrupe e filtre por ele, não tente
                  analisá-lo.
              value:
                nullable: true
                description: >-
                  Para um sinalizador de risco (por exemplo, `voip`, `leaked`,
                  `disposable`, `spam_trap`), o respetivo valor: um booleano, um
                  nível ou uma data. Nulo para um código de motivo com
                  pontuação.
              direction:
                type: string
                enum:
                  - risk
                  - trust
                description: Se o sinal aumentou o risco ou adicionou confiança.
              message:
                type: string
                description: Explicação legível do sinal, em inglês.
              impact_level:
                type: string
                nullable: true
                description: >-
                  Com que intensidade o sinal influenciou a pontuação, por
                  exemplo `low`, `medium` ou `high`.
          description: >-
            Sinais que explicam a pontuação, cada um com um código Didit
            estável, uma direção, uma mensagem e um nível de impacto. Podem
            surgir novos códigos ao longo do tempo, pelo que não deve rejeitar
            códigos desconhecidos.
    PhoneSocialFootprint:
      type: object
      nullable: true
      description: >-
        Presença social (social footprint) do número de telefone: as plataformas
        online em que está registado. Presente apenas quando `enable_social` foi
        definido e a verificação foi concluída. Cada contagem pode ser nula
        quando não foram devolvidos dados para ela. `profiles_registered: 0`
        significa que as plataformas foram verificadas e o número de telefone
        não foi encontrado em nenhuma delas - uma resposta válida, faturável e
        um sinal comum de identidade sintética.
      properties:
        profiles_registered:
          type: integer
          nullable: true
          description: >-
            Plataformas onde o número de telefone está confirmado como
            registado.
          example: 5
        profiles_checked:
          type: integer
          nullable: true
          description: Plataformas avaliadas quanto ao registo.
          example: 14
        names_found:
          type: integer
          nullable: true
          description: Plataformas que devolveram um nome associado.
          example: 0
        photos_found:
          type: integer
          nullable: true
          description: Plataformas que devolveram uma fotografia de perfil.
          example: 0
        communication_breadth:
          type: integer
          nullable: true
          description: Plataformas de comunicação com presença detetada.
          example: 2
        digital_footprint_diversity:
          type: integer
          nullable: true
          description: Categorias de plataforma distintas com presença detetada.
          example: 5
        digital_sophistication_index:
          type: integer
          nullable: true
          description: Indicador composto de maturidade digital, 0-10.
          example: 5
        engagement_depth_index:
          type: integer
          nullable: true
          description: Indicador do nível de detalhe do perfil, 0-10.
          example: 3
        subscription_affordability_index:
          type: integer
          nullable: true
          description: Distribuição da plataforma gratuita vs paga, 0-10.
          example: 2
        free_platforms:
          type: integer
          nullable: true
          description: Registos em plataformas gratuitas.
          example: 4
        full_paid_platforms:
          type: integer
          nullable: true
          description: Registos em plataformas totalmente pagas.
          example: 0
        partial_paid_platforms:
          type: integer
          nullable: true
          description: Registos em plataformas freemium.
          example: 1
        whatsapp_profile_completeness:
          type: string
          nullable: true
          enum:
            - Basic
            - Partial
            - Complete
            - Not Present
            - null
          description: >-
            Grau de preenchimento do perfil do WhatsApp. Apenas para telefone;
            nulo para e-mail.
          example: Partial
        registered_platforms:
          type: array
          description: Plataformas onde o registo está confirmado.
          items:
            $ref: '#/components/schemas/SocialFootprintPlatform'
        not_registered_platforms:
          type: array
          description: Plataformas verificadas com resultado negativo.
          items:
            $ref: '#/components/schemas/SocialFootprintPlatform'
        categories:
          type: object
          description: Contagem e proporção de registos por categoria de plataforma.
          additionalProperties:
            $ref: '#/components/schemas/SocialFootprintCategorySummary'
        profiles:
          type: object
          description: >-
            Detalhes de perfil por plataforma, indexados por plataforma, quando
            a plataforma os disponibiliza.
          additionalProperties:
            $ref: '#/components/schemas/SocialFootprintProfile'
    EmailIntelligence:
      type: object
      description: >-
        Bloco de inteligência de e-mail normalizado. Presente apenas quando o
        suplemento de inteligência foi executado para este e-mail; quando
        presente, também é exposto como o alias `enrichment` com valores
        idênticos.
      properties:
        score:
          type: number
          nullable: true
          description: Pontuação de risco normalizada de 0-100. Mais alto é mais arriscado.
        deliverable:
          type: string
          nullable: true
          description: Faixa de capacidade de entrega (por exemplo, `high`).
        breach_risk_level:
          type: string
          nullable: true
          description: '`Low`, `Medium` ou `High`.'
        breach_risk_index:
          type: number
          nullable: true
          description: Índice numérico de risco de violação.
        is_recent_breach:
          type: boolean
          nullable: true
          description: '`true` quando o endereço surge numa violação recente.'
        is_frequent_breached:
          type: boolean
          nullable: true
          description: '`true` quando o endereço surge em muitas violações.'
        is_disposable:
          type: boolean
          nullable: true
          description: '`true` quando o domínio é de um fornecedor descartável.'
        is_free_domain:
          type: boolean
          nullable: true
          description: '`true` quando o domínio é de um fornecedor de e-mail gratuito.'
        is_breached:
          type: boolean
          nullable: true
          description: '`true` quando o endereço surge em violações conhecidas.'
        no_of_breaches:
          type: number
          nullable: true
          description: Número de violações de dados conhecidas que contêm o endereço.
        reason_codes:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
                description: >-
                  Identificador Didit estável do sinal, por exemplo
                  `IR-5AC67A32`. Opaco: agrupe e filtre por ele, não tente
                  analisá-lo.
              value:
                nullable: true
                description: >-
                  Para um sinalizador de risco (por exemplo, `voip`, `leaked`,
                  `disposable`, `spam_trap`), o respetivo valor: um booleano, um
                  nível ou uma data. Nulo para um código de motivo com
                  pontuação.
              direction:
                type: string
                enum:
                  - risk
                  - trust
                description: Se o sinal aumentou o risco ou adicionou confiança.
              message:
                type: string
                description: Explicação legível do sinal, em inglês.
              impact_level:
                type: string
                nullable: true
                description: >-
                  Com que intensidade o sinal influenciou a pontuação, por
                  exemplo `low`, `medium` ou `high`.
          description: >-
            Sinais que explicam a pontuação, cada um com um código Didit
            estável, uma direção, uma mensagem e um nível de impacto. Podem
            surgir novos códigos ao longo do tempo, pelo que não deve rejeitar
            códigos desconhecidos.
    EmailSocialFootprint:
      type: object
      nullable: true
      description: >-
        Presença social do endereço de e-mail: as plataformas online em que está
        registado. Presente apenas quando `enable_social` foi definido e a
        verificação foi concluída. Cada contagem pode ser nula quando não foram
        devolvidos dados para ela. `profiles_registered: 0` significa que as
        plataformas foram verificadas e o endereço de e-mail não foi encontrado
        em nenhuma delas - uma resposta válida, faturável e um sinal comum de
        identidade sintética.
      properties:
        profiles_registered:
          type: integer
          nullable: true
          description: >-
            Plataformas onde o endereço de e-mail está confirmado como
            registado.
          example: 5
        profiles_checked:
          type: integer
          nullable: true
          description: Plataformas avaliadas quanto ao registo.
          example: 14
        names_found:
          type: integer
          nullable: true
          description: Plataformas que devolveram um nome associado.
          example: 0
        photos_found:
          type: integer
          nullable: true
          description: Plataformas que devolveram uma fotografia de perfil.
          example: 0
        communication_breadth:
          type: integer
          nullable: true
          description: Plataformas de comunicação com presença detetada.
          example: 2
        digital_footprint_diversity:
          type: integer
          nullable: true
          description: Categorias de plataforma distintas com presença detetada.
          example: 5
        digital_sophistication_index:
          type: integer
          nullable: true
          description: Indicador composto de maturidade digital, 0-10.
          example: 5
        engagement_depth_index:
          type: integer
          nullable: true
          description: Indicador do nível de detalhe do perfil, 0-10.
          example: 3
        subscription_affordability_index:
          type: integer
          nullable: true
          description: Distribuição da plataforma gratuita vs paga, 0-10.
          example: 2
        free_platforms:
          type: integer
          nullable: true
          description: Registos em plataformas gratuitas.
          example: 4
        full_paid_platforms:
          type: integer
          nullable: true
          description: Registos em plataformas totalmente pagas.
          example: 0
        partial_paid_platforms:
          type: integer
          nullable: true
          description: Registos em plataformas freemium.
          example: 1
        whatsapp_profile_completeness:
          type: string
          nullable: true
          enum:
            - Basic
            - Partial
            - Complete
            - Not Present
            - null
          description: >-
            Grau de preenchimento do perfil do WhatsApp. Apenas para telefone;
            nulo para e-mail.
          example: Partial
        registered_platforms:
          type: array
          description: Plataformas onde o registo está confirmado.
          items:
            $ref: '#/components/schemas/SocialFootprintPlatform'
        not_registered_platforms:
          type: array
          description: Plataformas verificadas com resultado negativo.
          items:
            $ref: '#/components/schemas/SocialFootprintPlatform'
        categories:
          type: object
          description: Contagem e proporção de registos por categoria de plataforma.
          additionalProperties:
            $ref: '#/components/schemas/SocialFootprintCategorySummary'
        profiles:
          type: object
          description: >-
            Detalhes de perfil por plataforma, indexados por plataforma, quando
            a plataforma os disponibiliza.
          additionalProperties:
            $ref: '#/components/schemas/SocialFootprintProfile'
    DocumentAIDetectedCode:
      type: object
      required:
        - type
        - page_number
        - position
        - x
        - 'y'
        - width
        - height
        - page_width
        - page_height
        - raw_payload
        - parsed_payload
      properties:
        type:
          type: string
          description: >-
            Simbologia detetada, por exemplo `QR_CODE`, `CODE_128`, `EAN_13`,
            `DATA_MATRIX` ou `PDF_417`.
        page_number:
          type: integer
          minimum: 1
          description: Número de página de base 1.
        position:
          type: array
          nullable: true
          description: >-
            Polígono detetado em coordenadas de píxeis da página renderizada.
            `null` quando não está disponível nenhuma localização fiável.
          items:
            type: array
            minItems: 2
            maxItems: 2
            items:
              type: integer
        x:
          type: integer
          nullable: true
          description: >-
            Margem esquerda da caixa delimitadora em píxeis da página
            renderizada.
        'y':
          type: integer
          nullable: true
          description: >-
            Limite superior da caixa delimitadora em píxeis da página
            renderizada.
        width:
          type: integer
          nullable: true
          description: Largura da caixa delimitadora em píxeis da página renderizada.
        height:
          type: integer
          nullable: true
          description: Altura da caixa delimitadora em píxeis da página renderizada.
        page_width:
          type: integer
          description: Largura da página renderizada em píxeis.
        page_height:
          type: integer
          description: Altura da página renderizada em píxeis.
        raw_payload:
          type: string
          description: >-
            Payload do descodificador em bruto como string base64 quando
            disponível; caso contrário, uma string vazia.
        parsed_payload:
          nullable: true
          description: >-
            String descodificada ou valor estruturado. `null` quando o código
            foi localizado mas não pôde ser descodificado.
    BankVerificationResult:
      type: object
      description: >-
        O resultado de um passo de Verificação Bancária, para Verificação de
        utilizadores e de empresas. `method` indica como a conta foi verificada,
        e `none` que a pessoa continuou sem banco antes de qualquer tentativa
        ser avaliada. `continued_without_bank` indica que a pessoa continuou sem
        banco, inclusive após uma tentativa avaliada. Consulte [Métodos de
        verificação
        bancária](/pt/core-technology/bank-verification/verification-methods) e
        [Quando a pessoa não consegue verificar o seu
        banco](/pt/core-technology/bank-verification/fallbacks).
      properties:
        schema_version:
          type: integer
          description: Versão desta estrutura de resultados. Atualmente `1`.
        bank_verification_id:
          type: string
          format: uuid
          description: O ID deste resultado.
        node_id:
          type: string
          description: O nó do fluxo a que este resultado pertence.
        status:
          type: string
          enum:
            - Not Finished
            - Approved
            - Declined
            - In Review
            - Expired
          description: O veredito do passo, após as suas ações e regras de estado.
        original_status:
          type: string
          nullable: true
          description: >-
            O primeiro veredito a que o passo chegou, antes de qualquer
            alteração posterior, como uma revisão manual.
        method:
          type: string
          nullable: true
          enum:
            - open_banking
            - account_lookup
            - microdeposits
            - statement
            - none
          description: >-
            Como a conta foi verificada: `open_banking` (início de sessão
            bancário: a pessoa iniciou sessão no respetivo banco),
            `account_lookup` (verificação de conta: a pessoa introduziu os dados
            da conta e o banco confirmou o nome), `microdeposits` ou `statement`
            (carregamento de extrato). `none` quando a pessoa continuou sem
            banco antes de qualquer tentativa ser avaliada, pelo que nenhuma
            conta foi verificada. Após uma tentativa avaliada, permanece o
            método dessa tentativa. `null` até que uma conta seja avaliada e
            quando o fluxo restringe os dados que devolve. As regras do fluxo
            leem o mesmo valor que `bank.method`.
        provider:
          type: string
          nullable: true
          description: >-
            A chave da rota que executou a ligação. Consulte `method`, e não
            esta chave, para saber como a conta foi verificada.
        credential_source:
          type: string
          nullable: true
          enum:
            - native
            - byok
          description: >-
            `native`: rota própria da Didit, faturada ao seu saldo Didit.
            `byok`: um fornecedor do marketplace que associou à sua conta
            utilizando as suas próprias credenciais.
        route:
          type: object
          nullable: true
          description: A rota escolhida antes do consentimento. Nunca muda posteriormente.
          properties:
            provider_key:
              type: string
              nullable: true
              description: A chave da rota.
            credential_source:
              type: string
              enum:
                - native
                - byok
            is_fallback:
              type: boolean
              description: >-
                Se a rota própria da Didit substituiu um fornecedor do
                marketplace que não conseguiu ligar-se.
            provider_connection_id:
              type: string
              nullable: true
              description: A ligação ao marketplace utilizada, para `byok`.
            requested_scopes:
              type: array
              items:
                type: string
              description: >-
                Os dados que a ligação solicitou, por exemplo `ownership` ou
                `balances`.
        connection:
          type: object
          nullable: true
          description: >-
            A ligação da tentativa mais recente. `null` antes da primeira
            tentativa.
          properties:
            status:
              type: string
              enum:
                - pending
                - connected
                - cancelled
                - timeout
                - failed
                - unsupported
                - revoked
                - expired
            institution_id:
              type: string
              nullable: true
              description: >-
                O ID do banco. `null` para uma verificação de conta em que não
                seja escolhido nenhum banco.
            institution_name:
              type: string
              nullable: true
              description: O nome do banco. `null` para uma verificação de conta.
            institution_country:
              type: string
              nullable: true
              description: O país da conta, ISO 3166-1 alfa-3.
            oauth:
              type: boolean
              nullable: true
              description: >-
                Indica se o início de sessão bancário foi realizado por OAuth ou
                app-to-app. `null` para uma verificação de conta.
            connected_at:
              type: string
              format: date-time
              nullable: true
              description: Quando a ligação foi bem-sucedida.
            consent_expires_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                Quando o consentimento bancário termina, para o início de sessão
                bancário.
            last_refreshed_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                Quando os dados financeiros foram lidos novamente pela última
                vez.
            attempts:
              type: integer
              description: >-
                As tentativas que a pessoa despendeu neste passo, com todos os
                métodos combinados.
            reason_code:
              type: string
              nullable: true
              description: >-
                O motivo pelo qual a ligação não está simplesmente `connected`,
                por exemplo `USER_CANCELLED`, `INSTITUTION_DOWN`,
                `ACCOUNT_NOT_FOUND`, `REFERENCE_IDENTITY_MISSING` ou
                `VERIFICATION_COMPLETED`.
        account:
          type: object
          nullable: true
          description: A conta avaliada. `null` até que uma conta seja avaliada.
          properties:
            account_id_masked:
              type: string
              nullable: true
              description: O número de conta, mascarado.
            iban_masked:
              type: string
              nullable: true
              description: O IBAN, mascarado.
            sort_code:
              type: string
              nullable: true
              description: O sort code, no Reino Unido.
            routing_number_masked:
              type: string
              nullable: true
              description: O routing number, mascarado.
            type:
              type: string
              nullable: true
              enum:
                - checking
                - current
                - savings
                - business
                - other
            subtype:
              type: string
              nullable: true
              description: O subtipo de conta do próprio banco.
            currency:
              type: string
              nullable: true
              description: Moeda ISO 4217 da conta.
            holder_type:
              type: string
              nullable: true
              enum:
                - person
                - business
                - unknown
            holders_count:
              type: integer
              nullable: true
            is_joint:
              type: boolean
              nullable: true
            is_business:
              type: boolean
              nullable: true
        ownership:
          type: object
          nullable: true
          description: >-
            Como o titular da conta foi comparado com a identidade verificada.
            `null` até que uma conta seja avaliada.
          properties:
            result:
              type: string
              enum:
                - match
                - partial_match
                - no_match
                - unknown
                - not_verifiable
              description: >-
                `partial_match` é uma correspondência próxima. `not_verifiable`:
                o banco respondeu sem titular para comparar. `unknown`: o
                comprovativo não pôde ser lido ou não havia identidade para
                comparar.
            reference_identity_source:
              type: string
              nullable: true
              description: >-
                O passo cuja identidade foi comparada com a do titular: `kyc`,
                `database_validation`, `expected_details`, `questionnaire`,
                `document_ai` ou `kyb`.
            name_score:
              type: integer
              minimum: 0
              maximum: 100
              nullable: true
              description: Pontuação do nome do titular da Didit.
            provider_name_score:
              type: integer
              minimum: 0
              maximum: 100
              nullable: true
              description: >-
                A pontuação do nome do titular dada pelo próprio banco, quando
                fornecida.
            address_score:
              type: integer
              minimum: 0
              maximum: 100
              nullable: true
              description: >-
                A pontuação da morada do titular, quando a correspondência de
                morada foi executada.
            email_score:
              type: integer
              minimum: 0
              maximum: 100
              nullable: true
              description: >-
                A pontuação do e-mail do titular, quando a correspondência de
                e-mail foi executada.
            phone_score:
              type: integer
              minimum: 0
              maximum: 100
              nullable: true
              description: >-
                A pontuação do telefone do titular, quando a correspondência de
                telefone foi executada.
            dob_score:
              type: integer
              minimum: 0
              maximum: 100
              nullable: true
              description: >-
                A pontuação da data de nascimento do titular, quando o banco
                partilhou essa informação.
            close_match:
              type: boolean
              nullable: true
              description: Se o nome ficou no intervalo de correspondência aproximada.
            holder_confirmation:
              type: string
              nullable: true
              enum:
                - pending
                - confirmed
                - rejected
              description: >-
                A resposta da pessoa quando solicitada a confirmar um nome de
                correspondência aproximada. `null` se nunca tiver sido
                solicitada.
            method:
              type: string
              nullable: true
              enum:
                - exact
                - token_set
                - nickname
                - transliteration
                - fuzzy
                - provider_only
                - microdeposits
              description: >-
                Qual a comparação de nomes que gerou a pontuação. Este não é o
                método de verificação: consulte o `method` de nível superior
                para isso.
            matched_holder_index:
              type: integer
              nullable: true
            holders:
              type: array
              items:
                type: object
              description: Cada titular listado pelo banco, com as respetivas pontuações.
            owner_identity_available:
              type: boolean
              nullable: true
            evidence_freshness:
              type: string
              nullable: true
              enum:
                - live
                - cached
                - refreshed
            evaluated_at:
              type: string
              format: date-time
              nullable: true
              description: Quando o veredito foi calculado.
        financial_data:
          type: object
          description: >-
            Os dados financeiros que o passo leu. Apenas o início de sessão
            bancário os lê.
          properties:
            balances:
              type: object
              nullable: true
              description: Com o âmbito `balances`.
            transactions:
              type: object
              nullable: true
              description: Com o âmbito `transactions`.
            income:
              type: object
              nullable: true
              description: Com o âmbito `income`.
            categorization:
              type: object
              nullable: true
              description: >-
                Categorização da Didit das transações consultadas. `null` na
                ausência das mesmas.
            not_collected:
              type: array
              items:
                type: string
                enum:
                  - balances
                  - income
                  - transactions
              description: >-
                Os dados solicitados pelo passo que o método utilizado para
                verificar a conta não recolhe. Saldos, transações e rendimentos
                são obtidos exclusivamente através do início de sessão bancário,
                pelo que uma conta verificada por verificação de conta lista-os
                aqui. Nunca constitui uma falha. Vazio caso contrário.
        billing:
          type: object
          nullable: true
          properties:
            route:
              type: string
              enum:
                - native
                - byok
            billed:
              type: boolean
            marketplace_fee:
              type: string
              nullable: true
              description: A taxa da plataforma de marketplace cobrada, para `byok`.
            usage_type:
              type: string
              nullable: true
              description: >-
                A linha de utilização na qual a cobrança foi registada:
                `bank_verification` para um início de sessão bancário ou uma
                verificação de conta, `bank_statement_upload` para o
                carregamento de um extrato sem tentativa bancária cobrada
                anterior e `bank_byok_fee` para a comissão de marketplace no seu
                próprio fornecedor. `null` se nada foi faturado.
        reference_identity:
          type: object
          nullable: true
          description: >-
            A identidade com a qual o titular foi comparado, com a respetiva
            origem.
        signals:
          type: object
          nullable: true
          description: >-
            Sinais de conta lidos a partir do histórico de transações, quando o
            passo leu um desses sinais.
        connection_abandoned:
          type: boolean
          nullable: true
          description: >-
            Se o passo terminou sem correspondência após a pessoa ter saído no
            seu banco.
        not_covered:
          type: boolean
          nullable: true
          description: >-
            Se não foi possível aceder ao banco ou ao país da pessoa neste
            passo. Também é `true` quando a pessoa continuou sem um banco porque
            nenhum método conseguiu verificar o seu país ou banco.
        continued_without_bank:
          type: boolean
          description: >-
            Se a pessoa saiu do passo com **Continue without your bank**. O
            campo `continuation` indica o motivo. `method` é `none` quando
            nenhuma tentativa foi avaliada antes de continuar. Após uma
            tentativa avaliada, como um titular que não corresponde, `method`
            mantém o método dessa tentativa e o respetivo veredicto e códigos de
            motivo mantêm-se. Devolvido mesmo quando o fluxo restringe os dados
            que devolve.
        continuation:
          type: object
          nullable: true
          description: >-
            Como a pessoa continuou sem um banco. `null` se não o tiver feito.
            Quando o fluxo restringe os dados que devolve, `reason` continua a
            ser devolvido e todas as outras chaves ficam com `null`.
          properties:
            reason:
              type: string
              enum:
                - no_route
                - institution_unsupported
                - attempts_exhausted
                - person_choice
              description: >-
                O motivo, conforme apurado pela Didit quando a pessoa continuou:
                `no_route` (nenhum início de sessão bancário ou verificação de
                conta serve o respetivo país), `institution_unsupported` (o
                banco selecionado não pode ser utilizado neste passo),
                `attempts_exhausted` (todas as tentativas já foram gastas e
                nenhuma estava em curso) ou `person_choice` (existia uma forma
                de verificação disponível e optou por continuar, inclusive
                quando o banco não pôde ser contactado no momento). `no_route` e
                `institution_unsupported` seguem `bank_unsupported_action`,
                `attempts_exhausted` segue `bank_attempts_exhausted_action` e
                `person_choice` segue `bank_skipped_action`, salvo se uma
                tentativa avaliada já tiver decidido o passo.
            country:
              type: string
              nullable: true
              description: >-
                O país onde a pessoa estava a efetuar a verificação, ISO 3166-1
                alfa-3. `null` se tiver prosseguido antes de selecionar um.
            offered:
              type: array
              items:
                type: string
                enum:
                  - statement
                  - microdeposits
              nullable: true
              description: >-
                As outras formas de verificar esse país disponibilizadas à
                pessoa quando esta continuou, pela ordem em que foram
                disponibilizadas: `statement` (carregamento de um extrato) e, em
                seguida, `microdeposits`. Vazio se não tiver sido
                disponibilizada nenhuma.
            institution_id:
              type: string
              nullable: true
              description: >-
                Para `institution_unsupported`, o ID do banco que a pessoa não
                conseguiu utilizar: o banco que selecionou ou o banco em que a
                sua última tentativa terminou. A Didit obtém-no a partir da sua
                própria lista de bancos, nunca do dispositivo da pessoa, pelo
                que um banco que não conste dessa lista é `null`. `null` para
                qualquer outro motivo.
            institution_name:
              type: string
              nullable: true
              description: >-
                Para `institution_unsupported`, o nome desse banco, proveniente
                da mesma lista que `institution_id`. `null` quando essa lista
                não tiver o banco e para qualquer outro motivo.
            continued_at:
              type: string
              format: date-time
              nullable: true
              description: Quando a pessoa continuou.
        evidence_purged_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Quando as provas bancárias foram eliminadas ao abrigo de
            `bank_evidence_retention_days`. Caso contrário, `null`.
        warnings:
          type: array
          items:
            type: string
          description: >-
            Códigos informativos, por exemplo `holder_declared`. Um aviso nunca
            altera o estado por si só.
        reason_codes:
          type: array
          items:
            type: string
          description: >-
            O motivo pelo qual o veredito ocorreu dessa forma, por exemplo
            `OWNER_NAME_PARTIAL`. Podem aplicar-se vários. `NOT_COVERED`: a
            pessoa continuou sem um banco porque nenhum método conseguiu
            verificar o seu país ou banco. `SKIPPED`: a pessoa optou por
            continuar sem um banco existindo uma forma de verificação
            disponível. Nenhum deles é adicionado quando uma tentativa avaliada
            já decidiu o passo.
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
    SignatureResult:
      type: object
      description: >-
        O resultado de um signatário para um passo de Assinatura eletrónica.
        Consulte o [relatório de Assinatura
        eletrónica](/pt/core-technology/electronic-signature/report-electronic-signature).
      properties:
        id:
          type: string
          format: uuid
          description: >-
            Passe como `signature_id` para descarregar o comprovativo deste
            signatário ou validar a respetiva assinatura.
        node_id:
          type: string
          description: O passo do fluxo que o produziu.
        status:
          type: string
          enum:
            - intro
            - review
            - code
            - signing
            - signed
            - declined
          description: >-
            O ponto em que o signatário se encontra no passo. Apenas `signed`
            significa que os documentos estão assinados.
        verdict:
          type: string
          enum:
            - Not Finished
            - Approved
            - In Review
            - Declined
          description: >-
            O resultado do passo. Um aviso define-o através da sua regra; as
            regras de estado personalizadas aplicam-se depois.
        level:
          type: string
          enum:
            - simple
            - aes
            - qes
          description: >-
            `simple` (predefinição) ou `aes`. `qes` (Assinatura Eletrónica
            Qualificada, QES) é um suplemento que ainda não se encontra
            disponível.
        format:
          type: string
          enum:
            - pdf
            - pades
          description: '`pdf` para uma assinatura Simple, `pades` para Advanced (AES).'
        profile:
          type: string
          nullable: true
          description: >-
            `PAdES-B-LT` assim que uma assinatura avançada (AES) for assinada;
            caso contrário, null.
        signer:
          type: object
          properties:
            name:
              type: string
              nullable: true
              description: >-
                O nome do signatário. Verificado (a partir da verificação de
                identidade aprovada ou da sessão), exceto no nível Simple sem um
                nome de sessão verificado, onde corresponde ao nome que o
                signatário introduziu e não é verificado.
            capacity:
              type: string
              enum:
                - self
                - company
            company:
              type: string
              nullable: true
            role:
              type: string
              nullable: true
              description: O cargo da pessoa-chave, conforme declarado.
            roles:
              type: array
              items:
                type: string
              description: >-
                As funções estruturadas da pessoa-chave, conforme declaradas
                para a empresa.
            identity_session_id:
              type: string
              format: uuid
              description: A sessão de KYC que verificou o signatário.
        identity_used:
          type: object
          description: >-
            A identidade verificada na qual a assinatura se baseia. Vazio para
            uma assinatura Simples sem identidade verificada.
          properties:
            session_id:
              type: string
              format: uuid
            kyc_id:
              type: string
              format: uuid
              nullable: true
            verified:
              type: boolean
            expected_name:
              type: string
              nullable: true
              description: O nome com o qual o signatário tinha de corresponder.
        certificate:
          type: object
          nullable: true
          description: >-
            O certificado com o qual os documentos foram assinados. `null` até à
            assinatura e sempre `null` para uma assinatura Simple.
          properties:
            issuer:
              type: string
            issued_to:
              type: string
            serial:
              type: string
              description: Número de série, hexadecimal.
            valid_from:
              type: string
              format: date-time
            valid_until:
              type: string
              format: date-time
        confirmation:
          type: object
          properties:
            channel:
              type: string
              nullable: true
              enum:
                - email
                - sms
              description: '`null` para uma assinatura Simple, que não tem código.'
            destination:
              type: string
              nullable: true
              description: O contacto mascarado para o qual o código foi enviado.
            confirmed_at:
              type: string
              format: date-time
              nullable: true
            attempts:
              type: integer
              description: Códigos introduzidos, incluindo o correto.
        timestamp:
          type: object
          nullable: true
          description: >-
            O carimbo de data/hora RFC 3161 na assinatura, emitido pela Didit.
            `null` até ser assinado e sempre `null` para uma assinatura Simples.
          properties:
            time:
              type: string
              format: date-time
            qualified:
              type: boolean
              description: Sempre `false` para AES.
            valid:
              type: boolean
        documents:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
                description: >-
                  O documento na cópia deste signatário. Utilize-o para
                  descarregar o ficheiro assinado.
              uuid:
                type: string
                format: uuid
                description: Igual a `id`.
              title:
                type: string
              file_name:
                type: string
              pages:
                type: integer
                description: Páginas do documento assinado. Para Word, do PDF convertido.
              size_bytes:
                type: integer
              sha256_original:
                type: string
                description: SHA-256 do documento tal como foi apresentado ao signatário.
              sha256_signed:
                type: string
                nullable: true
                description: SHA-256 do PDF assinado, após a assinatura.
              status:
                type: string
                enum:
                  - signed
                  - declined
                  - not_signed
                  - not_reached
                description: >-
                  `not_signed`: aberto mas não assinado. `not_reached`: nunca
                  foi aberto.
              opened_at:
                type: string
                format: date-time
                nullable: true
              read_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  Quando o signatário chegou ao fim de um documento sem campos,
                  quando o passo o exige.
              read_to_end:
                type: boolean
              consented_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  Quando o signatário concordou com um documento sem campos ou
                  preencheu os campos de um documento com campos.
              consent:
                type: boolean
              signed_file:
                type: string
                nullable: true
                description: >-
                  Caminho do PDF assinado, assim que estiver assinado. Consulte
                  [Transferir um documento
                  assinado](/pt/sessions-api/electronic-signature/download-signed-document).
              mode:
                type: string
                enum:
                  - fields
                  - read_and_agree
                description: >-
                  `fields` para um documento com campos, `read_and_agree` para
                  um documento sem campos.
              source_format:
                type: string
                enum:
                  - pdf
                  - docx
                description: >-
                  `pdf`, ou `docx` para um documento Word convertido para PDF
                  pela Didit.
              conversion:
                type: object
                nullable: true
                description: >-
                  `null` para um PDF. Para um documento Word, o ficheiro
                  original e a conversão.
                properties:
                  from:
                    type: string
                    enum:
                      - docx
                  file_name:
                    type: string
                    description: O nome original do seu ficheiro Word.
                  sha256:
                    type: string
                    description: SHA-256 do seu ficheiro Word original.
                  size_bytes:
                    type: integer
                    description: Tamanho do seu ficheiro Word original.
                  converter:
                    type: string
                    description: Versão do conversor que gerou o PDF.
              fields:
                type: array
                description: >-
                  Campos no documento, com os respetivos valores. Vazio para um
                  documento sem campos.
                items:
                  $ref: '#/components/schemas/SignatureFieldResult'
        adopted_signature:
          type: object
          nullable: true
          description: >-
            A assinatura e as iniciais que o signatário adotou para os campos de
            assinatura e iniciais. `null` até que o signatário adote uma.
          properties:
            method:
              type: string
              enum:
                - typed
                - drawn
              description: >-
                `typed`: o nome verificado num estilo de caligrafia. `drawn`:
                desenhado com o dedo ou com o rato.
            font:
              type: string
              nullable: true
              description: >-
                O estilo caligráfico de uma assinatura digitada. `null` quando
                desenhada à mão.
            adopted_at:
              type: string
              format: date-time
        electronic_signature_consent_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Quando o signatário concordou, no ecrã de revisão, em assinar
            eletronicamente os documentos. Definido quando qualquer documento
            tiver campos.
        evidence_file:
          type: string
          nullable: true
          description: >-
            Caminho do PDF de evidências, depois de assinado. Consulte
            [Descarregar as evidências da
            assinatura](/pt/sessions-api/electronic-signature/download-evidence).
        warnings:
          type: array
          description: >-
            Avisos gerados para este signatário. Consulte os [Avisos de
            assinatura
            eletrónica](/pt/core-technology/electronic-signature/warnings-electronic-signature).
          items:
            type: object
            properties:
              code:
                type: string
                enum:
                  - SIGNATURE_DECLINED
                  - SIGNATURE_OTP_FAILED
                  - SIGNATURE_NAME_MISMATCH
                  - SIGNATURE_IDENTITY_NOT_VERIFIED
                  - SIGNATURE_DOCUMENT_CHANGED
                  - SIGNATURE_FIELD_DATA_MISSING
              node_id:
                type: string
        validation:
          type: object
          nullable: true
          description: >-
            A última verificação criptográfica dos documentos assinados. `null`
            até que os documentos sejam assinados. Se a Didit não conseguir
            confirmar o resultado da assinatura, o valor será `{"valid": null,
            "reason": "signature_provider_outcome_unknown", "checked_at": ...}`
            e o `status` permanecerá `signing`: trate-o como não assinado.
          properties:
            valid:
              type: boolean
              nullable: true
              description: >-
                `true` quando todos os documentos são válidos. `null` quando o
                resultado da assinatura não pôde ser confirmado.
            reason:
              type: string
              description: >-
                Definido quando `valid` é `null`:
                `signature_provider_outcome_unknown`.
            checked_at:
              type: string
              format: date-time
            documents:
              type: array
              items:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                  checked_at:
                    type: string
                    format: date-time
                  valid:
                    type: boolean
                    description: >-
                      `true` quando a assinatura e o carimbo de data/hora são
                      ambos válidos e fidedignos.
                  integrity:
                    type: boolean
                    description: >-
                      `true` quando o documento não foi alterado desde a
                      assinatura.
                  trusted:
                    type: boolean
                    description: >-
                      `true` quando a cadeia do certificado de assinatura liga a
                      uma raiz fidedigna.
                  revoked:
                    type: boolean
                  trusted_list:
                    type: object
                    description: >-
                      Verificação da Lista Confiável da UE. Para AES:
                      `{"status": "not_applicable", "reason":
                      "aes_not_qualified"}`.
                    properties:
                      status:
                        type: string
                      reason:
                        type: string
                  certificate:
                    type: object
                    nullable: true
                    description: >-
                      O certificado com o qual os documentos foram assinados.
                      `null` até à assinatura e sempre `null` para uma
                      assinatura Simple.
                    properties:
                      issuer:
                        type: string
                      issued_to:
                        type: string
                      serial:
                        type: string
                        description: Número de série, hexadecimal.
                      valid_from:
                        type: string
                        format: date-time
                      valid_until:
                        type: string
                        format: date-time
                  timestamp:
                    type: object
                    nullable: true
                    description: >-
                      O carimbo de data/hora RFC 3161 na assinatura, emitido
                      pela Didit. `null` até ser assinado e sempre `null` para
                      uma assinatura Simples.
                    properties:
                      time:
                        type: string
                        format: date-time
                      qualified:
                        type: boolean
                        description: Sempre `false` para AES.
                      valid:
                        type: boolean
        declined_at:
          type: string
          format: date-time
          nullable: true
        declined_action:
          type: string
          enum:
            - DECLINE
            - REVIEW
            - NO_ACTION
        signed_at:
          type: string
          format: date-time
          nullable: true
        expires_at:
          type: string
          format: date-time
          description: Quando a ligação de assinatura deixa de funcionar.
        email_sent_at:
          type: string
          format: date-time
          nullable: true
        email_unavailable_reason:
          type: string
          nullable: true
        ip_address:
          type: string
          nullable: true
          description: O endereço IP do signatário quando pediu o seu código.
        place:
          type: string
          nullable: true
          description: 'Não recolhido: sempre `null`.'
        place_unavailable_reason:
          type: string
          nullable: true
          enum:
            - not_collected
    AMLScreening:
      type: object
      properties:
        node_id:
          type: string
          description: Identificador exclusivo para este passo de AML no grafo do fluxo.
        status:
          type: string
          description: >-
            Estado ao nível da funcionalidade desta triagem AML. Independente do
            `status` da sessão de nível superior — uma sessão pode alcançar a
            sua decisão global enquanto uma funcionalidade individual permanece
            `In Review`.
          enum:
            - Not Finished
            - Approved
            - Declined
            - In Review
            - Resub Requested
        total_hits:
          type: integer
          description: Número total de correspondências encontradas
        entity_type:
          type: string
          description: 'Tipo de entidade analisada: pessoa ou empresa'
        hits:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                description: >-
                  Identificador estável da Didit para o resultado (hit): `hit_`
                  seguido de 24 carateres hexadecimais. A mesma entidade
                  correspondente mantém o mesmo `id` quando o sujeito é
                  novamente analisado. Transmita-o como `hit_id` para os
                  endpoints de revisão de resultados AML.
              url:
                type: string
                format: uri
                description: URL de origem para a correspondência
              match:
                type: boolean
                description: Se esta é uma correspondência confirmada
              score:
                type: number
                format: float
                nullable: true
                minimum: 0
                maximum: 1
                description: >-
                  Pontuação de correspondência ponderada descontinuada no
                  intervalo 0-1 (por exemplo, `0.73`). Utilize `match_score`
                  (0-100) em alternativa.
                deprecated: true
              target:
                type: boolean
                nullable: true
                description: >-
                  Indica se a entidade correspondente é o alvo direto da
                  listagem (em oposição a uma parte relacionada). `null` quando
                  a fonte não o especificar.
              caption:
                type: string
                description: Legenda ou título da correspondência
              datasets:
                type: array
                items:
                  type: string
                  enum:
                    - PEP
                    - PEP Level 1
                    - PEP Level 2
                    - PEP Level 3
                    - PEP Level 4
                    - Sanctions
                    - Adverse Media
                    - Warnings and Regulatory Enforcement
                    - Fitness and Probity
                    - SIP
                    - SIE
                    - Insolvency
                    - Other Lists
                description: >-
                  Lista de categorias de conjuntos de dados onde a
                  correspondência foi encontrada. Indica se a entidade apareceu
                  em listas de PEP (com nível), bases de dados de sanções,
                  notícias adversas, avisos/fiscalização regulamentar ou outros
                  conjuntos de dados de conformidade. `Other Lists` quando a
                  fonte da entidade não indicar nenhuma destas categorias.
              features:
                type: object
                nullable: true
                description: Funcionalidades adicionais da correspondência
              rca_name:
                type: string
                description: Nome da RCA, se aplicável
              last_seen:
                type: string
                format: date-time
                description: Data em que a correspondência foi vista pela última vez
              risk_view:
                type: object
                properties:
                  crimes:
                    type: object
                    properties:
                      score:
                        type: integer
                      weightage:
                        type: integer
                      risk_level:
                        type: string
                      risk_scores:
                        type: object
                  countries:
                    type: object
                    properties:
                      score:
                        type: integer
                      weightage:
                        type: integer
                      risk_level:
                        type: string
                      risk_scores:
                        type: object
                  categories:
                    type: object
                    properties:
                      score:
                        type: integer
                      weightage:
                        type: integer
                      risk_level:
                        type: string
                      risk_scores:
                        type: object
                  custom_list:
                    type: object
              first_seen:
                type: string
                format: date-time
                description: Data em que a correspondência foi vista pela primeira vez
              properties:
                type: object
                properties:
                  name:
                    type: array
                    items:
                      type: string
                  alias:
                    type: array
                    items:
                      type: string
                  notes:
                    type: array
                    items:
                      type: string
                  title:
                    type: string
                    nullable: true
                  gender:
                    type: array
                    items:
                      type: string
                  height:
                    type: string
                    nullable: true
                  topics:
                    type: string
                    nullable: true
                  weight:
                    type: string
                    nullable: true
                  address:
                    type: string
                    nullable: true
                  country:
                    type: string
                    nullable: true
                  website:
                    type: string
                    nullable: true
                  eyeColor:
                    type: string
                    nullable: true
                  keywords:
                    type: string
                    nullable: true
                  lastName:
                    type: array
                    items:
                      type: string
                  position:
                    type: string
                    nullable: true
                  religion:
                    type: string
                    nullable: true
                  birthDate:
                    type: array
                    items:
                      type: string
                  education:
                    type: array
                    items:
                      type: string
                  ethnicity:
                    type: string
                    nullable: true
                  firstName:
                    type: array
                    items:
                      type: string
                  hairColor:
                    type: string
                    nullable: true
                  weakAlias:
                    type: string
                    nullable: true
                  birthPlace:
                    type: array
                    items:
                      type: string
                  modifiedAt:
                    type: string
                    nullable: true
                  wikidataId:
                    type: string
                    nullable: true
                  citizenship:
                    type: string
                    nullable: true
                  nationality:
                    type: string
                    nullable: true
              match_score:
                type: number
                description: >-
                  Pontuação de confiança da identidade ponderada (0-100)
                  calculada a partir da semelhança do nome, data de nascimento e
                  correspondência do país. Utilizada para determinar se a
                  ocorrência é um falso positivo ou uma possível
                  correspondência.
                format: float
                nullable: true
              risk_score:
                type: number
                description: >-
                  Pontuação de risco da entidade (0-100). Utilizada para
                  determinar o estado final de AML (Aprovada/Em
                  análise/Recusada) com base no risk_score mais elevado entre os
                  resultados que não sejam falsos positivos.
              review_status:
                type: string
                description: >-
                  Estado de revisão para esta correspondência. Pode ser
                  'Unreviewed', 'Confirmed Match', 'False Positive' ou
                  'Inconclusive'.
                enum:
                  - Unreviewed
                  - Confirmed Match
                  - False Positive
                  - Inconclusive
              score_breakdown:
                type: object
                description: >-
                  Detalhamento pormenorizado de como o match_score foi
                  calculado.
                properties:
                  name_score:
                    type: integer
                    description: Percentagem de semelhança de nome em bruto (0-100).
                  name_weight:
                    type: integer
                    description: >-
                      Ponderação original para nome a partir da configuração
                      (0-100).
                  name_weight_normalized:
                    type: number
                    description: >-
                      Peso normalizado para o nome após nova ponderação para
                      dados em falta (0-100).
                  name_contribution:
                    type: number
                    description: Pontos com que o nome contribuiu para a pontuação total.
                  dob_score:
                    type: integer
                    description: >-
                      Pontuação de correspondência da data de nascimento (-100 a
                      100).
                  dob_weight:
                    type: integer
                    description: >-
                      Ponderação original para data de nascimento a partir da
                      configuração (0-100).
                  dob_weight_normalized:
                    type: number
                    description: >-
                      Peso normalizado para a data de nascimento após nova
                      ponderação para dados em falta (0-100).
                  dob_contribution:
                    type: number
                    description: >-
                      Pontos com que a data de nascimento contribuiu para a
                      pontuação total.
                  country_score:
                    type: integer
                    description: Pontuação de correspondência do país (-100 a 100).
                  country_weight:
                    type: integer
                    description: >-
                      Ponderação original para país a partir da configuração
                      (0-100).
                  country_weight_normalized:
                    type: number
                    description: >-
                      Peso normalizado para o país após nova ponderação para
                      dados em falta (0-100).
                  country_contribution:
                    type: number
                    description: Pontos com que o país contribuiu para a pontuação total.
                  document_number_match_type:
                    type: string
                    description: >-
                      Resultado da avaliação da 'Golden Key' do número do
                      documento.
                    enum:
                      - MATCH
                      - NEUTRAL
                      - HARD_MISMATCH
                  document_number_effect:
                    type: string
                    description: >-
                      Descrição legível do efeito do número do documento na
                      pontuação.
                  total_score:
                    type: integer
                    description: Pontuação de correspondência ponderada final (0-100).
              pep_matches:
                type: array
                items:
                  type: object
                  properties:
                    aliases:
                      type: array
                      items:
                        type: string
                    education:
                      type: array
                      items:
                        type: string
                    list_name:
                      type: string
                    publisher:
                      type: string
                    source_url:
                      type: string
                      format: uri
                    description:
                      type: string
                    matched_name:
                      type: string
                    pep_position:
                      type: string
                    date_of_birth:
                      type: string
                    other_sources:
                      type: array
                      items:
                        type: string
                    place_of_birth:
                      type: string
              linked_entities:
                type: array
                items:
                  type: object
                  properties:
                    name:
                      type: array
                      items:
                        type: string
                    active:
                      type: array
                      items:
                        type: string
                    status:
                      type: array
                      items:
                        type: string
                    details:
                      type: array
                      items:
                        type: string
                    relation:
                      type: array
                      items:
                        type: string
              warning_matches:
                type: array
                description: >-
                  Lista de correspondências de avisos e fiscalização
                  regulamentar. Inclui entradas das categorias: Warning, SIP,
                  Warnings and Regulatory Enforcement, Fitness and Probity, SIE
                  e Insolvency.
                items:
                  type: object
                  properties:
                    list_name:
                      type: string
                      description: Nome do publicador da lista de avisos
                    matched_name:
                      type: string
                      description: Nome encontrado na lista de avisos
                    description:
                      type: string
                      description: Descrição da entrada do aviso
                    publisher:
                      type: string
                      description: Publicador ou fonte do aviso
                    source_url:
                      type: string
                      format: uri
                      description: URL da fonte do aviso
                    other_sources:
                      type: array
                      items:
                        type: string
                      description: URLs de fontes adicionais
                    countries:
                      type: array
                      items:
                        type: string
                      nullable: true
                      description: Países associados ao aviso
                    created_at:
                      type: string
                      nullable: true
                      description: Data em que a entrada de aviso foi criada
                    updated_at:
                      type: string
                      nullable: true
                      description: >-
                        Data em que a entrada de aviso foi atualizada pela
                        última vez
                    additional_data:
                      type: object
                      description: >-
                        Dados adicionais da fonte do aviso. Pode conter um
                        objeto `data` com uma matriz `case_details`.
                      properties:
                        data:
                          type: object
                          properties:
                            case_details:
                              type: array
                              description: >-
                                Detalhes dos casos de aviso associados a esta
                                correspondência
                              items:
                                type: object
                                properties:
                                  case_type:
                                    type: string
                                    description: Tipo do caso de aviso
                                    enum:
                                      - Accusation
                                      - Arrest
                                      - Bribery
                                      - Criminal
                                      - Fraud
                                      - Illegal Fundraising
                                      - Non-conviction Terror
                                      - Proclaimed Offender
                                      - Regulatory Enforcement
                                      - Terrorism
                                      - Terrorism-related
                                      - Terrorism-related listing
              sanction_matches:
                type: array
                description: >-
                  Lista de correspondências encontradas em listas de sanções
                  para esta entidade.
                items:
                  type: object
                  properties:
                    list_name:
                      type: array
                      items:
                        type: string
                      nullable: true
                      description: Nome(s) da(s) lista(s) de sanções
                    matched_name:
                      type: string
                      description: Nome encontrado na lista de sanções
                    description:
                      type: string
                      description: Descrição da entrada da sanção
                    reason:
                      type: string
                      nullable: true
                      description: >-
                        Motivo em texto livre pelo qual a entidade foi
                        sancionada. Combinado a partir das entradas de motivo da
                        lista de sanções. Exemplos: 'Executive Order 13224
                        (Terrorism)', 'Support for actions undermining Ukraine's
                        sovereignty', 'Listed due to national security
                        concerns.'
                    source_url:
                      type: string
                      format: uri
                      description: URL da fonte da sanção
                    other_sources:
                      type: array
                      items:
                        type: string
                      description: URLs de fontes adicionais
                    details:
                      type: array
                      items:
                        type: string
                      description: Detalhes adicionais sobre a sanção
                    legal_basis:
                      type: array
                      items:
                        type: string
                      description: Base jurídica da sanção
                    listed_on:
                      type: array
                      items:
                        type: string
                      nullable: true
                      description: Data(s) em que a entidade foi listada
                    sanction_list:
                      type: array
                      items:
                        type: string
                      nullable: true
                      description: Identificador(es) da lista de sanções
                    sanction_program:
                      type: array
                      items:
                        type: string
                      description: Programa(s) de sanções em que a entidade está listada
                    sanctioning_authority:
                      type: array
                      items:
                        type: string
                      description: Autoridade/autoridades que aplicaram a sanção
                    updated_on:
                      type: array
                      items:
                        type: string
                      description: >-
                        Data(s) em que a entrada de sanção foi atualizada pela
                        última vez
                    additional_data:
                      type: object
                      description: >-
                        Dados adicionais da fonte de sanções não recolhidos nos
                        campos principais
              adverse_media_details:
                type: object
                properties:
                  sentiment:
                    type: string
                  entity_type:
                    type: string
                  sentiment_score:
                    type: integer
                  adverse_keywords:
                    type: object
                    additionalProperties:
                      type: integer
              adverse_media_matches:
                type: array
                items:
                  type: object
                  properties:
                    country:
                      type: string
                    summary:
                      type: string
                    headline:
                      type: string
                    sentiment:
                      type: string
                    thumbnail:
                      type: string
                      format: uri
                    source_url:
                      type: string
                      format: uri
                    author_name:
                      type: string
                      nullable: true
                    other_sources:
                      type: array
                      items:
                        type: string
                    adverse_keywords:
                      type: array
                      items:
                        type: string
                    sentiment_score:
                      type: integer
                    publication_date:
                      type: string
                      format: date-time
              additional_information:
                type: object
        score:
          type: number
          format: float
          nullable: true
          minimum: 0
          maximum: 100
          description: >-
            Pontuação global da triagem AML — a pontuação de risco mais elevada
            em todas as correspondências (float, 0-100). `null` até ser
            calculada.
        screened_data:
          type: object
          properties:
            full_name:
              type: string
            nationality:
              type: string
            date_of_birth:
              type: string
              format: date
            document_number:
              type: string
              nullable: true
        is_ongoing_monitoring_enabled:
          type: boolean
          description: >-
            Se a monitorização AML contínua está ativada para esta triagem.
            Quando `true`, a entidade é submetida periodicamente a nova triagem
            e quaisquer novas ocorrências atualizam o relatório.
        next_ongoing_monitoring_bill_date:
          type: string
          format: date
          nullable: true
          description: >-
            Data (YYYY-MM-DD) em que esta subscrição de monitorização contínua
            será faturada da próxima vez. Calculada como a data da última
            faturação de monitorização contínua mais 365 dias quando
            `is_ongoing_monitoring_enabled = true`; caso contrário, `null`. Esta
            é uma data de faturação, não uma data de triagem - utilize
            `last_ongoing_screening_at` para isso.
        last_ongoing_screening_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Quando a monitorização contínua concluiu pela última vez uma nova
            triagem deste registo, quer o resultado tenha mudado ou não. `null`
            quando o registo nunca foi submetido a uma nova triagem; nunca é
            preenchido retroativamente a partir da data de ativação ou de
            faturação.
        last_ongoing_screening_datasets_updated_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            A data de atualização do conjunto de dados AML mais recente
            reportada pelo fornecedor no momento dessa triagem. `null` quando o
            fornecedor não tiver reportado datas do conjunto de dados; nunca é
            estimada.
        warnings:
          type: array
          items:
            type: object
            properties:
              feature:
                type: string
                enum:
                  - ID_VERIFICATION
                  - NFC
                  - LIVENESS
                  - FACEMATCH
                  - PROOF_OF_ADDRESS
                  - PHONE
                  - EMAIL
                  - AML
                  - LOCATION
                  - DATABASE_VALIDATION
                  - QUESTIONNAIRE
                  - DOCUMENT_AI
                  - KYB_REGISTRY
                  - KYB_DOCUMENTS
                  - KYB_KEY_PEOPLE
                  - GEOLOCATION
                  - SIGNATURE
                description: >-
                  A funcionalidade que gerou este aviso. O valor identifica o
                  bloco de funcionalidade a que o aviso pertence. Numa triagem
                  AML, este é tipicamente `AML`, mas o enum acima é a referência
                  autoritativa para todos os avisos de funcionalidades no
                  payload da decisão.
              risk:
                type: string
              additional_data:
                type: object
                nullable: true
              log_type:
                type: string
              short_description:
                type: string
              long_description:
                type: string
              node_id:
                type: string
                description: O ID do nó do grafo do fluxo que gerou este aviso
    GeolocationCheck:
      type: object
      description: >-
        Um resultado de verificação de Localização, a tentativa aceite de um nó
        do fluxo. Medição, incerteza e autenticidade são chaves separadas, de
        modo que uma determinação precisa sem atestação é interpretada de forma
        diferente de uma determinação imprecisa com atestação.
      properties:
        node_id:
          type: string
          nullable: true
          description: >-
            Nó do fluxo que gerou este resultado, para que um fluxo com dois
            passos de verificação de localização permaneça legível.
        status:
          type: string
          enum:
            - Not Finished
            - Approved
            - Declined
            - In Review
            - Resub Requested
          description: >-
            Estado ao nível da funcionalidade deste passo de verificação de
            localização, determinado a partir dos respetivos avisos.
            Independente do `status` da sessão.
        outcome:
          type: string
          nullable: true
          description: O que aconteceu nesta tentativa.
          enum:
            - verified
            - low_accuracy
            - accuracy_undetermined
            - stale
            - approximate
            - denied
            - restricted
            - unavailable
            - timeout
            - mock_detected
            - outside_geofence
            - in_blocked_area
            - anonymizer_detected
            - skipped
            - replay_rejected
            - unsupported_client
            - null
        permission:
          type: string
          nullable: true
          description: >-
            O que o sistema operativo ou navegador concedeu. `not_requested`
            significa que o passo utiliza apenas a localização IP da ligação,
            pelo que nunca é solicitada uma permissão à pessoa.
          enum:
            - granted_precise
            - granted_approximate
            - denied
            - restricted
            - unavailable
            - timeout
            - dismissed
            - not_requested
            - null
        latitude:
          type: number
          nullable: true
          description: >-
            Latitude WGS84 da localização obtida. `null` quando não existe
            localização.
          format: double
        longitude:
          type: number
          nullable: true
          description: >-
            Longitude WGS84 da localização obtida. `null` quando não existe
            localização.
          format: double
        accuracy_m:
          type: number
          nullable: true
          description: >-
            Raio de incerteza em metros, no nível de confiança indicado em
            `accuracy_confidence`.
          format: double
        accuracy_confidence:
          type: string
          nullable: true
          description: >-
            Nível de confiança que a plataforma atribui a `accuracy_m`: `p95`
            (navegadores), `p68` (Android) ou `unspecified` (iOS).
          enum:
            - p95
            - p68
            - unspecified
            - null
        measured_at:
          type: string
          nullable: true
          description: >-
            Quando o dispositivo obteve a correção, de acordo com o seu próprio
            relógio.
          format: date-time
        age_seconds:
          type: integer
          nullable: true
          description: Segundos entre o dispositivo obter a posição e a Didit a receber.
        source:
          type: string
          nullable: true
          description: >-
            De onde proveio a localização, quando a plataforma o indicar. `ip`
            significa que a posição é a localização IP da ligação.
          enum:
            - gps
            - fused
            - network
            - wifi
            - cell
            - browser
            - unknown
            - ip
            - null
        platform:
          type: string
          nullable: true
          description: O cliente que produziu a correção.
          enum:
            - web
            - ios
            - android
            - react_native
            - flutter
            - null
        sdk_version:
          type: string
          nullable: true
          description: Versão do SDK que gerou a correção.
        is_mock:
          type: boolean
          nullable: true
          description: >-
            `true` quando o dispositivo indica que a localização obtida veio de
            um fornecedor de localização simulada ou software de simulação.
            `null` quando a plataforma não o comunica (os navegadores não
            conseguem determinar); `null` não é `false`.
        produced_by_accessory:
          type: boolean
          nullable: true
          description: >-
            Apenas iOS: `true` quando a localização foi determinada por um
            acessório externo. `null` noutros casos.
        integrity:
          type: string
          enum:
            - attested
            - not_attested
            - failed
            - unsupported
            - not_determined
          description: >-
            Se a atestação de dispositivo suporta a correção. `unsupported` é o
            que os navegadores comunicam, porque a Web não tem qualquer
            mecanismo de atestação; não é uma falha.
        country_code:
          type: string
          nullable: true
          description: País ISO 3166-1 alfa-2 onde se encontra a localização.
        region_code:
          type: string
          nullable: true
          description: Subdivisão ISO 3166-2 onde se encontra a posição geográfica.
        city:
          type: string
          nullable: true
          description: Localidade povoada mais próxima, uma etiqueta para os revisores.
        geofence:
          type: object
          description: Resultado das regras de país e área do passo.
          properties:
            enabled:
              type: boolean
              description: Se o passo aplica alguma regra de país ou área.
            result:
              type: string
              nullable: true
              description: >-
                Onde a posição se situa em relação às regras. `undetermined`
                significa que o círculo de precisão abrange a fronteira ou que
                não foi possível determinar o país da posição; não constitui
                prova de estar fora.
              enum:
                - inside
                - outside
                - undetermined
                - null
        inside_geofence:
          type: boolean
          nullable: true
          description: >-
            `true` quando `geofence.result` é `inside`, `false` quando
            `outside`, `null` caso contrário.
        geofence_basis:
          type: string
          nullable: true
          description: >-
            A partir de que posição o resultado da área foi avaliado: a
            localização do `device` ou a localização do `ip` da ligação.
          enum:
            - device
            - ip
            - null
        inside_areas:
          type: array
          items:
            type: string
          description: >-
            IDs das áreas permitidas configuradas dentro das quais se encontra a
            posição.
        blocked_areas:
          type: array
          items:
            type: string
          description: IDs das áreas bloqueadas configuradas em que a posição se encontra.
        position_source:
          type: string
          nullable: true
          description: >-
            De onde o passo obtém a posição, conforme configurado: o dispositivo
            comparado com a localização do IP, apenas o dispositivo ou apenas a
            localização do IP.
          enum:
            - device_and_ip
            - device_only
            - ip_only
            - null
        anonymizers:
          type: object
          nullable: true
          description: >-
            Como se apresentam a ligação e o dispositivo, cada um `true`,
            `false` ou `null` quando a origem não consegue determinar.
          properties:
            vpn:
              type: boolean
              nullable: true
            proxy:
              type: boolean
              nullable: true
            tor:
              type: boolean
              nullable: true
            spoofing:
              type: boolean
              nullable: true
            emulator:
              type: boolean
              nullable: true
        ip_distance_km:
          type: number
          nullable: true
          description: >-
            Distância até à localização IP da sessão após subtrair ambos os
            raios de incerteza; `0` quando se sobrepõem.
          format: double
        ip_distance_uncertainty_km:
          type: number
          nullable: true
          description: >-
            Raio combinado que foi subtraído: o raio da localização por IP mais
            a precisão desta localização.
          format: double
        ip_consistent:
          type: boolean
          nullable: true
          description: >-
            Se `ip_distance_km` está dentro da distância configurada no passo.
            `null` quando algum dos lados for desconhecido.
        document_distance_km:
          type: number
          nullable: true
          description: >-
            Distância até à morada geocodificada no documento de identificação
            ou comprovativo de morada. `null` quando não existe nenhuma morada
            registada.
          format: double
        travel_excused:
          type: boolean
          nullable: true
          description: >-
            Se a tolerância de deslocação do passo dispensou a distância em
            relação à morada. `null` quando a tolerância está desativada.
        consecutive_mismatches:
          type: integer
          nullable: true
          description: >-
            Na tentativa final: esta verificação mais as discrepâncias
            anteriores da mesma pessoa consecutivas.
        attempts:
          type: integer
          description: Número desta tentativa dentro do nó, a começar em 1.
        consent:
          type: object
          nullable: true
          description: >-
            O consentimento dado pela pessoa antes da instrução do sistema,
            registado com a versão do texto e o idioma apresentados.
          properties:
            accepted_at:
              type: string
              format: date-time
            version:
              type: string
              nullable: true
            locale:
              type: string
              nullable: true
        warnings:
          type: array
          items:
            type: object
            properties:
              feature:
                type: string
                enum:
                  - ID_VERIFICATION
                  - NFC
                  - LIVENESS
                  - FACEMATCH
                  - PROOF_OF_ADDRESS
                  - PHONE
                  - EMAIL
                  - AML
                  - LOCATION
                  - DATABASE_VALIDATION
                  - QUESTIONNAIRE
                  - DOCUMENT_AI
                  - KYB_REGISTRY
                  - KYB_DOCUMENTS
                  - KYB_KEY_PEOPLE
                  - GEOLOCATION
                  - SIGNATURE
                description: >-
                  A funcionalidade que gerou este aviso. O valor identifica o
                  bloco de funcionalidade a que o aviso pertence. O array de
                  avisos de cada módulo utiliza tipicamente o valor
                  correspondente ao seu módulo (por exemplo, `PHONE` dentro de
                  `phone_verifications[].warnings`), mas o enum acima é a
                  referência autoritativa para todos os avisos de
                  funcionalidades no payload da decisão.
              risk:
                type: string
              additional_data:
                type: object
                nullable: true
              log_type:
                type: string
              short_description:
                type: string
              long_description:
                type: string
              node_id:
                type: string
                description: O ID do nó do grafo do fluxo que gerou este aviso
          description: >-
            Avisos gerados por este passo de verificação de localização, com
            `feature` definido como `GEOLOCATION`. Os códigos de aviso começam
            com `LOCATION_`.
    GeolocationAttempt:
      type: object
      description: >-
        Uma tentativa de um passo de verificação de localização: as mesmas
        chaves que `geolocation_checks[]` exceto `warnings`, mais o momento em
        que a Didit a recebeu.
      properties:
        node_id:
          type: string
          nullable: true
          description: >-
            Nó do fluxo que gerou este resultado, para que um fluxo com dois
            passos de verificação de localização permaneça legível.
        status:
          type: string
          enum:
            - Not Finished
            - Approved
            - Declined
            - In Review
            - Resub Requested
          description: >-
            Estado ao nível da funcionalidade deste passo de verificação de
            localização, determinado a partir dos respetivos avisos.
            Independente do `status` da sessão.
        outcome:
          type: string
          nullable: true
          description: O que aconteceu nesta tentativa.
          enum:
            - verified
            - low_accuracy
            - accuracy_undetermined
            - stale
            - approximate
            - denied
            - restricted
            - unavailable
            - timeout
            - mock_detected
            - outside_geofence
            - in_blocked_area
            - anonymizer_detected
            - skipped
            - replay_rejected
            - unsupported_client
            - null
        permission:
          type: string
          nullable: true
          description: >-
            O que o sistema operativo ou navegador concedeu. `not_requested`
            significa que o passo utiliza apenas a localização IP da ligação,
            pelo que nunca é solicitada uma permissão à pessoa.
          enum:
            - granted_precise
            - granted_approximate
            - denied
            - restricted
            - unavailable
            - timeout
            - dismissed
            - not_requested
            - null
        latitude:
          type: number
          nullable: true
          description: >-
            Latitude WGS84 da localização obtida. `null` quando não existe
            localização.
          format: double
        longitude:
          type: number
          nullable: true
          description: >-
            Longitude WGS84 da localização obtida. `null` quando não existe
            localização.
          format: double
        accuracy_m:
          type: number
          nullable: true
          description: >-
            Raio de incerteza em metros, no nível de confiança indicado em
            `accuracy_confidence`.
          format: double
        accuracy_confidence:
          type: string
          nullable: true
          description: >-
            Nível de confiança que a plataforma atribui a `accuracy_m`: `p95`
            (navegadores), `p68` (Android) ou `unspecified` (iOS).
          enum:
            - p95
            - p68
            - unspecified
            - null
        measured_at:
          type: string
          nullable: true
          description: >-
            Quando o dispositivo obteve a correção, de acordo com o seu próprio
            relógio.
          format: date-time
        age_seconds:
          type: integer
          nullable: true
          description: Segundos entre o dispositivo obter a posição e a Didit a receber.
        source:
          type: string
          nullable: true
          description: >-
            De onde proveio a localização, quando a plataforma o indicar. `ip`
            significa que a posição é a localização IP da ligação.
          enum:
            - gps
            - fused
            - network
            - wifi
            - cell
            - browser
            - unknown
            - ip
            - null
        platform:
          type: string
          nullable: true
          description: O cliente que produziu a correção.
          enum:
            - web
            - ios
            - android
            - react_native
            - flutter
            - null
        sdk_version:
          type: string
          nullable: true
          description: Versão do SDK que gerou a correção.
        is_mock:
          type: boolean
          nullable: true
          description: >-
            `true` quando o dispositivo indica que a localização obtida veio de
            um fornecedor de localização simulada ou software de simulação.
            `null` quando a plataforma não o comunica (os navegadores não
            conseguem determinar); `null` não é `false`.
        produced_by_accessory:
          type: boolean
          nullable: true
          description: >-
            Apenas iOS: `true` quando a localização foi determinada por um
            acessório externo. `null` noutros casos.
        integrity:
          type: string
          enum:
            - attested
            - not_attested
            - failed
            - unsupported
            - not_determined
          description: >-
            Se a atestação de dispositivo suporta a correção. `unsupported` é o
            que os navegadores comunicam, porque a Web não tem qualquer
            mecanismo de atestação; não é uma falha.
        country_code:
          type: string
          nullable: true
          description: País ISO 3166-1 alfa-2 onde se encontra a localização.
        region_code:
          type: string
          nullable: true
          description: Subdivisão ISO 3166-2 onde se encontra a posição geográfica.
        city:
          type: string
          nullable: true
          description: Localidade povoada mais próxima, uma etiqueta para os revisores.
        geofence:
          type: object
          description: Resultado das regras de país e área do passo.
          properties:
            enabled:
              type: boolean
              description: Se o passo aplica alguma regra de país ou área.
            result:
              type: string
              nullable: true
              description: >-
                Onde a posição se situa em relação às regras. `undetermined`
                significa que o círculo de precisão abrange a fronteira ou que
                não foi possível determinar o país da posição; não constitui
                prova de estar fora.
              enum:
                - inside
                - outside
                - undetermined
                - null
        inside_geofence:
          type: boolean
          nullable: true
          description: >-
            `true` quando `geofence.result` é `inside`, `false` quando
            `outside`, `null` caso contrário.
        geofence_basis:
          type: string
          nullable: true
          description: >-
            A partir de que posição o resultado da área foi avaliado: a
            localização do `device` ou a localização do `ip` da ligação.
          enum:
            - device
            - ip
            - null
        inside_areas:
          type: array
          items:
            type: string
          description: >-
            IDs das áreas permitidas configuradas dentro das quais se encontra a
            posição.
        blocked_areas:
          type: array
          items:
            type: string
          description: IDs das áreas bloqueadas configuradas em que a posição se encontra.
        position_source:
          type: string
          nullable: true
          description: >-
            De onde o passo obtém a posição, conforme configurado: o dispositivo
            comparado com a localização do IP, apenas o dispositivo ou apenas a
            localização do IP.
          enum:
            - device_and_ip
            - device_only
            - ip_only
            - null
        anonymizers:
          type: object
          nullable: true
          description: >-
            Como se apresentam a ligação e o dispositivo, cada um `true`,
            `false` ou `null` quando a origem não consegue determinar.
          properties:
            vpn:
              type: boolean
              nullable: true
            proxy:
              type: boolean
              nullable: true
            tor:
              type: boolean
              nullable: true
            spoofing:
              type: boolean
              nullable: true
            emulator:
              type: boolean
              nullable: true
        ip_distance_km:
          type: number
          nullable: true
          description: >-
            Distância até à localização IP da sessão após subtrair ambos os
            raios de incerteza; `0` quando se sobrepõem.
          format: double
        ip_distance_uncertainty_km:
          type: number
          nullable: true
          description: >-
            Raio combinado que foi subtraído: o raio da localização por IP mais
            a precisão desta localização.
          format: double
        ip_consistent:
          type: boolean
          nullable: true
          description: >-
            Se `ip_distance_km` está dentro da distância configurada no passo.
            `null` quando algum dos lados for desconhecido.
        document_distance_km:
          type: number
          nullable: true
          description: >-
            Distância até à morada geocodificada no documento de identificação
            ou comprovativo de morada. `null` quando não existe nenhuma morada
            registada.
          format: double
        travel_excused:
          type: boolean
          nullable: true
          description: >-
            Se a tolerância de deslocação do passo dispensou a distância em
            relação à morada. `null` quando a tolerância está desativada.
        consecutive_mismatches:
          type: integer
          nullable: true
          description: >-
            Na tentativa final: esta verificação mais as discrepâncias
            anteriores da mesma pessoa consecutivas.
        attempts:
          type: integer
          description: Número desta tentativa dentro do nó, a começar em 1.
        consent:
          type: object
          nullable: true
          description: >-
            O consentimento dado pela pessoa antes da instrução do sistema,
            registado com a versão do texto e o idioma apresentados.
          properties:
            accepted_at:
              type: string
              format: date-time
            version:
              type: string
              nullable: true
            locale:
              type: string
              nullable: true
        received_at:
          type: string
          nullable: true
          description: Quando a Didit recebeu a tentativa.
          format: date-time
        created_at:
          type: string
          format: date-time
    KYBRegistryShareholding:
      type: object
      nullable: true
      description: >-
        O que um proprietário detém, no mesmo formato para todos os países e
        fontes de registo. Nulo quando o registo não indicar qualquer
        participação. Um intervalo (por exemplo, os 25-50% de um PSC do Reino
        Unido) não é uma participação: `percentage` é nulo e o intervalo
        permanece em `ownership_min_shares` / `ownership_max_shares`.
      properties:
        share_class:
          type: string
          nullable: true
          description: Classe ou tipo de ação conforme designado no registo.
        number_of_shares:
          type: number
          nullable: true
          description: Número de ações detidas.
        currency:
          type: string
          nullable: true
          description: Moeda ISO 4217 dos valores abaixo.
        nominal_value:
          type: number
          nullable: true
          description: Valor nominal por ação.
        total_value:
          type: number
          nullable: true
          description: Valor total da posição detida.
        percentage:
          type: number
          nullable: true
          description: Participação exata em percentagem, até quatro casas decimais.
      required:
        - share_class
        - number_of_shares
        - currency
        - nominal_value
        - total_value
        - percentage
    KYBRegistryAddress:
      type: object
      description: >-
        Uma morada indicada pelo registo, com o mesmo formato para todos os
        países e fontes de registo. Todas as chaves estão sempre presentes; uma
        parte que o registo não publique é null.
      properties:
        type:
          type: string
          nullable: true
          description: >-
            Tipo de morada em minúsculas: `registered` para a sede social;
            outros tipos conforme designados pelo registo (por exemplo,
            `postal`, `office`). `null` quando o registo não indica o tipo de
            morada.
        address:
          type: string
          description: A morada completa numa linha. Sempre presente em todas as moradas.
        street:
          type: string
          nullable: true
          description: Rua e número.
        city:
          type: string
          nullable: true
          description: Cidade ou localidade.
        postal_code:
          type: string
          nullable: true
          description: Código postal.
        region:
          type: string
          nullable: true
          description: Região, estado ou província.
        country_code:
          type: string
          nullable: true
          description: Código de país ISO 3166-1 alpha-2.
        description:
          type: string
          nullable: true
          description: A etiqueta própria do registo para a morada, quando este a fornece.
      required:
        - type
        - address
        - street
        - city
        - postal_code
        - region
        - country_code
        - description
    KYBRegistryIndustry:
      type: object
      description: >-
        Uma atividade na qual o registo classifica a empresa, com o mesmo
        formato para todos os países e fontes de registo.
      properties:
        code:
          type: string
          nullable: true
          description: >-
            Código de atividade conforme consta do registo (por exemplo
            `73110`).
        description:
          type: string
          nullable: true
          description: Rótulo da atividade, quando o registo publica um.
        scheme:
          type: string
          nullable: true
          description: >-
            Sistema de classificação, um nome por sistema independentemente da
            fonte que o comunicou: `UK SIC 2007`, `US SIC`, `NACE Rev. 2`, `NACE
            Rev. 2.1`, `NAF Rev. 2`, `CNAE`, `SBI`, `NOGA 2008`, `CAE Rev. 4`,
            `Canada SIC 1977`; outros sistemas nacionais mantêm o nome original
            do registo. Nulo quando o registo não especifica o sistema.
        is_primary:
          type: boolean
          description: >-
            True para a atividade principal da empresa. Exatamente uma entrada é
            principal quando a lista não está vazia.
      required:
        - code
        - description
        - scheme
        - is_primary
    KYBRegistryData:
      type: object
      nullable: true
      description: >-
        Detalhe de registo normalizado da Didit para a empresa: o resultado da
        propriedade (`ownership_error`, `section_errors`, `ubo_resolution`,
        `lite_enrichment`), as correções feitas com update-data e factos de
        registo que não têm um campo próprio. Nunca transporta o registo próprio
        da fonte de registo. Todas as chaves são opcionais e estão presentes
        apenas quando a empresa tem um valor para as mesmas; podem ser
        adicionadas novas chaves. Leia os campos canónicos (`addresses`,
        `industries`, `ownership`, `beneficial_owners[].shareholding`) para tudo
        o que abrangem.
      properties:
        company_name:
          type: string
          description: Nome da empresa conforme corrigido na consola.
        registration_number:
          type: string
          description: >-
            Número de registo conforme indicado pelo registo de empresas ou por
            uma correção na consola.
        country_code:
          type: string
          description: >-
            País do registo conforme indicado pelo registo de empresas ou por
            uma correção na consola.
        region:
          type: string
          description: Região ou estado do registo.
        incorporation_date:
          type: string
          description: Data de constituição (ISO 8601).
        registration_date:
          type: string
          description: >-
            Data de registo (ISO 8601) quando o registo de empresas indica uma
            diferente da data de constituição.
        dissolution_date:
          type: string
          description: Data de dissolução (ISO 8601) quando o registo a indicar.
        tax_number:
          type: string
          description: Número de identificação fiscal.
        vat_number:
          type: string
          description: Número de IVA (NIF).
        legal_address:
          type: string
          description: Sede social conforme corrigida na consola.
        registered_address:
          type: string
          description: Morada registada conforme indicada no registo.
        company_type:
          type: string
          description: Forma jurídica.
        registry_status:
          type: string
          description: Estado da empresa no registo de empresas.
        verification_status:
          type: string
          description: Estado da verificação.
        alternative_names:
          type: string
          description: Outros nomes com os quais a empresa opera ou operou.
        nature_of_business:
          type: string
          description: Descrição da atividade.
        registered_capital:
          type: string
          description: Capital social registado conforme impresso.
        registered_capital_amount:
          type: string
          description: >-
            Montante do capital social registado, como cadeia de caracteres
            decimal.
        registered_capital_currency:
          type: string
          description: Moeda do capital social registado (ISO 4217).
        website:
          type: string
          description: Website.
        email:
          type: string
          description: E-mail de contacto.
        phone:
          type: string
          description: Telefone de contacto.
        legal_entity_identifier:
          type: string
          description: Identificador de Entidade Jurídica (LEI).
        location_of_registration:
          type: string
          description: Local de registo.
        control_scheme:
          type: string
          description: Regime de governação quando o registo o disponibiliza.
        ownership_error:
          type: string
          enum:
            - no_owners_on_record
            - no_natural_person_owner
            - ownership_section_unavailable
            - company_not_found
            - ambiguous_company_match
            - missing_registration_number
            - entity_type_not_covered
            - provider_unavailable
            - other
          description: >-
            O motivo pelo qual um nível de propriedade solicitado não foi
            fornecido, nos mesmos códigos que `ownership.unavailable_reason`.
            `no_owners_on_record` (o registo respondeu e não indica nenhum
            proprietário) e `ownership_section_unavailable` (o registo não
            devolveu a secção de propriedade) são conclusões diferentes.
        section_errors:
          type: object
          description: >-
            Secções que o registo não devolveu, indexadas por secção
            (`officers`, `shareholders`, `group_structure`). Uma secção listada
            aqui nunca foi entregue: uma lista vazia ao lado não diz nada sobre
            a empresa.
          additionalProperties:
            $ref: '#/components/schemas/KYBRegistrySectionError'
        ubo_resolution:
          $ref: '#/components/schemas/KYBRegistryUboResolution'
        lite_enrichment:
          $ref: '#/components/schemas/KYBRegistryLiteEnrichment'
        registry_metadata:
          type: object
          additionalProperties:
            oneOf:
              - type: string
              - type: number
              - type: boolean
          description: >-
            Os campos próprios do registo para a empresa, indexados tal como o
            registo os nomeia, como valores simples (registos legados). Apenas
            estão incluídos os campos revistos como factos do registo.
        registry_sources:
          type: array
          description: >-
            Os registos oficiais a partir dos quais o registo foi lido (registos
            legados). Outras fontes não são indicadas.
          items:
            $ref: '#/components/schemas/KYBRegistrySource'
        previous_names:
          type: array
          items:
            type: string
          description: >-
            Nomes sob os quais a empresa esteve registada anteriormente
            (registos históricos).
        parent_companies:
          type: array
          items:
            type: string
          description: Empresas-mãe identificadas pelo registo (registos legados).
        documents_available:
          type: integer
          description: >-
            Quantos registos o registo disponibiliza para a empresa (registos
            legados).
    KYBRegistryOwnership:
      type: object
      description: >-
        O resultado do nível de propriedade (Acionistas / UBO), no mesmo formato
        para todos os países e fontes de registo.
      properties:
        status:
          type: string
          nullable: true
          enum:
            - not_requested
            - pending
            - delivered
            - not_held
            - unavailable
            - null
          description: >-
            `delivered` quando o registo disponibilizou os dados de propriedade;
            `not_held` quando o registo de propriedade respondeu e não lista de
            todo a empresa (consulte `unavailable_reason`); `unavailable` quando
            não disponibilizou os dados de propriedade por qualquer outro motivo
            (consulte `unavailable_reason`); `pending` enquanto o registo ainda
            os estiver a obter; `not_requested` para o nível Basic.
        tier_requested:
          type: string
          nullable: true
          enum:
            - basic
            - shareholders
            - ubo
            - null
          description: O nível encomendado pelo fluxo.
        tier_delivered:
          type: string
          nullable: true
          enum:
            - basic
            - shareholders
            - ubo
            - null
          description: >-
            O nível entregue pelo registo (e que é faturado). Um pedido de UBO
            respondido apenas com acionistas diretos é `shareholders`.
        unavailable_reason:
          type: string
          nullable: true
          enum:
            - no_owners_on_record
            - no_natural_person_owner
            - ownership_section_unavailable
            - company_not_found
            - ambiguous_company_match
            - missing_registration_number
            - entity_type_not_covered
            - provider_unavailable
            - other
            - null
          description: >-
            O motivo pelo qual um nível de propriedade solicitado não foi
            fornecido. Nulo, exceto se `status` for `unavailable` ou `pending`.
        direct_ownership_complete:
          type: boolean
          nullable: true
          description: >-
            True quando as participações declaradas dos acionistas diretos
            perfazem 100% (dentro de uma margem de arredondamento de um ponto
            percentual); false quando não perfazem; null quando a propriedade
            não foi fornecida ou uma participação não está declarada.
        unresolved:
          type: array
          description: >-
            Partes da cadeia de propriedade que o registo não conseguiu
            resolver, por exemplo, a ausência de registo da estrutura do grupo
            acima dos proprietários diretos.
          items:
            type: object
            properties:
              reason:
                type: string
              section:
                type: string
                nullable: true
      required:
        - status
        - tier_requested
        - tier_delivered
        - unavailable_reason
        - direct_ownership_complete
        - unresolved
    KYBOwnershipStructure:
      type: object
      nullable: true
      description: >-
        A tabela de capitalização comprovada pelo registo, tal como constava
        quando o nível de propriedade foi entregue: `shareholders` e
        `beneficial_owners` diretos. Nulo quando o registo não comprovou
        qualquer propriedade. Nunca contém as próprias linhas da fonte de
        registo; consulte `company.beneficial_owners` e `company.ownership` para
        o registo atual.
      properties:
        shareholders:
          type: array
          items:
            $ref: '#/components/schemas/KYBOwnershipStructureOwner'
        beneficial_owners:
          type: array
          items:
            $ref: '#/components/schemas/KYBOwnershipStructureOwner'
      required:
        - shareholders
        - beneficial_owners
    InvestigatorBlock:
      type: object
      nullable: true
      description: >-
        A revisão mais recente do Investigator sobre o item, ou nulo se nunca
        tiver tido nenhuma. Transmitida pela decisão da sessão V3 e da sessão
        empresarial (e, portanto, por webhooks `status.updated`).
      properties:
        run_id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - running
            - completed
            - failed
        stage:
          type: string
          enum:
            - shadow
            - live
        queue:
          type: string
          enum:
            - kyc
            - kyb
            - aml
            - transactions
            - cases
        is_open:
          type: boolean
        recommendation:
          type: string
          enum:
            - approve
            - decline
            - escalate
            - request
          nullable: true
        recommendation_detail:
          type: string
          nullable: true
        confidence:
          type: string
          enum:
            - high
            - moderate
            - low
          nullable: true
        summary:
          type: string
          nullable: true
        ready_to_accept:
          type: boolean
        prepared_at:
          type: string
          format: date-time
          nullable: true
        automated:
          type: boolean
          description: >-
            O investigador decidiu autonomamente, mesmo que a decisão tenha sido
            posteriormente substituída.
        decided_by:
          type: string
          enum:
            - investigator
            - member
          nullable: true
        decision:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/InvestigatorDecision'
          type: object
    BiometricRetention:
      type: object
      description: Quando os dados biométricos em tempo real desta sessão são eliminados.
      required:
        - jurisdictions
        - deletes_at
      properties:
        jurisdictions:
          type: array
          items:
            type: string
          description: >-
            Códigos dos estados dos EUA cujas regras biométricas definem um
            limite de eliminação para esta pessoa (`US` quando o estado é
            desconhecido). Vazio se nenhum se aplicar.
        deletes_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            A data em que os dados biométricos em tempo real (imagens faciais e
            modelos) desta sessão são eliminados, com base na definição de
            conservação da sua aplicação e, quando aplicável, no limite legal
            para a jurisdição da pessoa. `null` quando ainda não se aplica
            nenhuma data.
    SocialFootprintPlatform:
      type: object
      properties:
        platform:
          type: string
          description: Identificador da plataforma.
          example: whatsapp
        category:
          type: string
          description: >-
            Categoria da plataforma, por exemplo, MESSAGING, SOCIAL_MEDIA,
            ECOMMERCE, PROFESSIONAL, EMAIL_PROVIDER.
          example: MESSAGING
        scope:
          type: string
          enum:
            - global
            - local
          description: >-
            `global` para plataformas mundiais, `local` para plataformas
            específicas de uma região.
          example: global
    SocialFootprintCategorySummary:
      type: object
      properties:
        registered:
          type: integer
          nullable: true
          description: Plataformas nesta categoria onde o registo está confirmado.
          example: 2
        ratio:
          type: number
          format: float
          nullable: true
          description: >-
            Percentagem de plataformas verificadas da categoria com registo,
            0.0-1.0.
          example: 0.6667
    SocialFootprintProfile:
      type: object
      properties:
        name:
          type: string
          nullable: true
          description: Nome do perfil, quando a plataforma o disponibiliza.
        photo:
          type: string
          nullable: true
          description: URL da fotografia de perfil, quando a plataforma o disponibiliza.
        about:
          type: string
          nullable: true
          description: >-
            Texto de biografia/apresentação do perfil, quando a plataforma o
            disponibiliza.
        privacy_status:
          type: string
          nullable: true
          enum:
            - PUBLIC
            - PRIVATE
            - null
          description: Visibilidade do perfil, quando a plataforma a disponibiliza.
        business_account:
          type: boolean
          nullable: true
          description: >-
            Se o perfil é uma conta empresarial, quando a plataforma o
            disponibiliza.
    SignatureFieldResult:
      type: object
      description: >-
        Um campo de um documento assinado, com o respetivo valor na cópia deste
        signatário. Consulte
        [Campos](/pt/core-technology/electronic-signature/report-electronic-signature#campos).
      properties:
        key:
          type: string
          description: A chave do campo, conforme utilizada em `sign.field_values`.
        type:
          type: string
          enum:
            - signature
            - initials
            - full_name
            - date_signed
            - text
            - checkbox
            - email
            - data
        role:
          type: string
          enum:
            - verified_person
            - legal_representative
            - key_people
        label:
          type: string
        page:
          type: integer
          description: >-
            Número da página, a começar em 1. Para um documento Word, uma página
            do PDF convertido.
        x:
          type: number
          description: Margem esquerda, como fração da largura da página.
        'y':
          type: number
          description: Limite superior, como uma fração da altura da página.
        width:
          type: number
          description: Largura, como uma fração da largura da página.
        height:
          type: number
          description: Altura, como fração da altura da página.
        required:
          type: boolean
        value:
          nullable: true
          description: >-
            Uma cadeia de carateres para `text`, `email`, `full_name`,
            `date_signed` e `data`, um booleano para uma `checkbox`, e `true`
            para uma assinatura ou iniciais aplicadas. `null` quando vazio.
        display_value:
          type: string
          nullable: true
          description: >-
            O valor tal como estampado na página: datas no `date_format` do
            campo, `Yes` ou `No` para uma caixa de seleção, `Signed` para uma
            assinatura ou rubrica.
        value_source:
          type: string
          nullable: true
          enum:
            - signer
            - identity
            - contact
            - company
            - session
            - metadata
            - api
            - signing_time
            - null
          description: >-
            De onde o valor proveio: `signer` (introduzido, assinalado ou
            aplicado pelo signatário), `identity` (a identificação verificada),
            `contact` (o e-mail ou telefone verificado), `company` (a empresa
            verificada), `session` (`vendor_data`), `metadata`, `api`
            (`sign.field_values`) ou `signing_time` (a data de assinatura).
        filled_at:
          type: string
          format: date-time
          nullable: true
        image_url:
          type: string
          nullable: true
          description: >-
            Apenas assinatura e rubricas: o caminho da imagem aplicada. Consulte
            [Descarregar uma imagem de
            assinatura](/pt/sessions-api/electronic-signature/download-field-image).
        value_unavailable_reason:
          type: string
          nullable: true
          enum:
            - source_empty
            - null
          description: >-
            `source_empty` quando um campo pré-preenchido não tinha qualquer
            valor na sessão e `signature_field_data_missing_action` permitiu que
            o signatário assinasse mesmo assim.
    KYBRegistrySectionError:
      type: object
      description: Uma secção que o registo não devolveu.
      properties:
        status_code:
          type: integer
          nullable: true
          description: O estado retornado pelo registo para a secção.
      required:
        - status_code
    KYBRegistryUboResolution:
      type: object
      description: Como o nível de UBO percorreu a cadeia de propriedade acima da empresa.
      properties:
        parent_chain:
          type: array
          description: Empresas-mãe desde a entidade-mãe final até à empresa.
          items:
            $ref: '#/components/schemas/KYBRegistryGroupCompany'
        subsidiaries:
          type: array
          description: Empresas diretamente abaixo da empresa no seu grupo empresarial.
          items:
            $ref: '#/components/schemas/KYBRegistryGroupCompany'
        unresolved:
          type: array
          description: >-
            Partes da cadeia que o registo não conseguiu resolver (as mesmas
            entradas que `ownership.unresolved`).
          items:
            type: object
            properties:
              reason:
                type: string
                description: >-
                  O motivo, por exemplo `no_group_structure_on_record`,
                  `selected_company_not_in_group_structure` ou `section_error`.
              section:
                type: string
                nullable: true
                description: A secção em causa, por exemplo `group_structure`.
            required:
              - reason
              - section
      required:
        - parent_chain
        - subsidiaries
        - unresolved
    KYBRegistryLiteEnrichment:
      type: object
      description: >-
        Campos vazios do perfil Lite que outra das fontes de registo do país
        preencheu. A fonte não é indicada.
      properties:
        fields:
          type: array
          items:
            type: string
          description: Os campos da empresa que foram preenchidos.
        people_added:
          type: integer
          description: Quantos administradores ou proprietários foram adicionados.
      required:
        - fields
        - people_added
    KYBRegistrySource:
      type: object
      description: >-
        Um registo oficial a partir do qual os dados foram obtidos. Apenas são
        nomeados registos governamentais oficiais, reguladores e o sistema
        oficial de identificadores; qualquer outra fonte é omitida.
      properties:
        name:
          type: string
          description: Nome do registo, por exemplo `UK Companies House`.
        source_type:
          type: string
          enum:
            - official
          description: Sempre `official`.
      required:
        - name
        - source_type
    KYBOwnershipStructureOwner:
      type: object
      description: >-
        Um proprietário do instantâneo da propriedade: a mesma identidade de
        registo e participação que `company.beneficial_owners[]`, e a respetiva
        `shareholding` canónica.
      properties:
        name:
          type: string
          nullable: true
          description: Nome do proprietário conforme indicado no registo.
        first_name:
          type: string
          nullable: true
          description: Nome próprio, para uma pessoa singular, quando o registo o indicar.
        last_name:
          type: string
          nullable: true
          description: Apelido, para uma pessoa singular, quando o registo o indica.
        date_of_birth:
          type: string
          nullable: true
          description: Data de nascimento (ISO 8601) quando o registo a publica.
        country_of_birth:
          type: string
          nullable: true
          description: País de nascimento quando o registo o publica.
        company_name:
          type: string
          nullable: true
          description: Nome da empresa, para um proprietário empresarial.
        registration_number:
          type: string
          nullable: true
          description: Número de registo, para um proprietário societário.
        entity_type:
          type: string
          nullable: true
          enum:
            - person
            - company
            - null
          description: Se o proprietário é uma pessoa singular ou uma empresa.
        nationality:
          type: string
          nullable: true
          description: Nacionalidade quando o registo a indicar.
        designation:
          type: string
          nullable: true
          description: O cargo ou a função do titular tal como consta no registo.
        roles:
          type: array
          items:
            type: string
          description: >-
            `shareholder` para um titular direto, `ubo` para um beneficiário
            efetivo.
        ownership_min_shares:
          type: string
          nullable: true
          description: >-
            Limite inferior da participação, em percentagem (igual ao limite
            superior no caso de uma participação exata).
        ownership_max_shares:
          type: string
          nullable: true
          description: Limite superior da participação, em percentagem.
        voting_min_shares:
          type: string
          nullable: true
          description: Limite inferior dos direitos de voto, em percentagem.
        voting_max_shares:
          type: string
          nullable: true
          description: Limite superior dos direitos de voto, em percentagem.
        appointment_date:
          type: string
          nullable: true
          description: Data em que o cargo ou a nomeação teve início (ISO 8601).
        is_active:
          type: boolean
          nullable: true
          description: Falso para um antigo proprietário.
        shareholding:
          $ref: '#/components/schemas/KYBRegistryShareholding'
      required:
        - name
        - first_name
        - last_name
        - date_of_birth
        - country_of_birth
        - company_name
        - registration_number
        - entity_type
        - nationality
        - designation
        - roles
        - ownership_min_shares
        - ownership_max_shares
        - voting_min_shares
        - voting_max_shares
        - appointment_date
        - is_active
        - shareholding
    InvestigatorDecision:
      type: object
      description: >-
        Como o elemento saiu da fila do Investigator. `decided_by`,
        `original_outcome` e `overrides` são devolvidos pelos endpoints de
        aceitação e substituição e pelo relatório; o bloco `investigator` de uma
        decisão de sessão inclui os restantes campos.
      properties:
        outcome:
          type: string
          enum:
            - accepted
            - edited
            - overridden
            - decided_elsewhere
            - automated
          description: >-
            `accepted` ou `edited` aceitou a recomendação (`edited` com uma
            narrativa reescrita), `overridden` aplicou outra ação,
            `decided_elsewhere` é uma decisão tomada fora do Investigator
            enquanto o relatório estava aberto, `automated` é uma decisão tomada
            pelo próprio Investigator.
        action:
          type: string
          enum:
            - approve
            - decline
            - escalate
            - request
        actor_email:
          type: string
          nullable: true
        actor_name:
          type: string
          nullable: true
        override_category:
          type: string
          enum:
            - missing_context
            - needs_information
            - policy_differs
            - evidence_misread
            - other
            - ''
          nullable: true
        override_reason:
          type: string
          nullable: true
        final_status:
          type: string
          description: O estado do item após a decisão.
        agreed:
          type: boolean
          description: Indica se a decisão coincidiu com a recomendação.
          nullable: true
        decided_at:
          type: string
          format: date-time
        billed:
          type: boolean
          description: A revisão foi cobrada.
        decided_by:
          type: string
          enum:
            - investigator
            - member
        original_outcome:
          type: object
          description: >-
            A decisão tomada autonomamente pelo investigador, inalterada por
            sobreposições posteriores. Null para uma decisão tomada pela equipa.
          properties:
            action:
              type: string
            final_status:
              type: string
            decided_at:
              type: string
              format: date-time
          nullable: true
        overrides:
          type: array
          description: >-
            Cada anulação de uma decisão tomada autonomamente pelo investigador,
            da mais antiga para a mais recente.
          items:
            type: object
            properties:
              action:
                type: string
              actor_email:
                type: string
                nullable: true
              actor_name:
                type: string
                nullable: true
              override_category:
                type: string
              override_reason:
                type: string
              previous_status:
                type: string
              final_status:
                type: string
              agreed:
                type: boolean
                nullable: true
              overridden_at:
                type: string
                format: date-time
    KYBRegistryGroupCompany:
      type: object
      description: Uma empresa do grupo empresarial, pela sua identidade de registo.
      properties:
        name:
          type: string
          nullable: true
          description: Nome da empresa.
        country_code:
          type: string
          nullable: true
          description: País de registo.
        registration_number:
          type: string
          nullable: true
          description: Número de registo.
      required:
        - name
        - country_code
        - registration_number
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        A chave de API da sua aplicação, a partir de Programadores -> Chaves de
        API na Business Console. A chave principal tem acesso total. Uma chave
        nomeada pode ter o âmbito definido: nenhum, leitura ou escrita por
        recurso, limitada a alguns fluxos ou a sessões aprovadas, a uma lista de
        endereços IP e a uma data de validade. 401 significa que a chave está
        incorreta, revogada ou expirada; 403 significa que nenhuma chave foi
        enviada, que a chave não tem acesso a este recurso ou ação, ou que o
        pedido veio de um endereço fora da sua lista de IP; 404 numa rota de
        sessão significa que a sessão está fora dos fluxos ou estados da chave.
        Uma chave sem acesso a multimédia recebe URLs de imagens, vídeos e PDFs
        como nulos, e uma chave sem permissão de escrita em sessões recebe
        ligações de sessão e tokens como nulos. Consulte
        https://docs.didit.me/console/api-keys.

````

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