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

# Esquema de respuesta KYB: payload de decisión

> Esquema del payload KYB de Didit: registro, personas clave, KYC de UBO, documentos, AML y campos compartidos. Desde $2.00 por verificación.

Esta página documenta el payload completo que devuelve [`GET /v3/session/{id}/decision/`](https://docs.didit.me/es/sessions-api/retrieve-session) para una sesión de Verificación de empresas (KYB). El endpoint es unificado: cuando pasas un `session_id` de empresa, la respuesta incluye `session_kind: "business"` y los arrays de funciones específicos de la empresa que se describen a continuación.

## Estructura de nivel superior

```json theme={null}
{
  "session_id": "bs_01H...",
  "session_kind": "business",
  "session_number": 89,
  "session_url": "https://verify.didit.me/...",
  "status": "Approved",
  "status_override": null,
  "workflow_id": "wf_kyb_standard",
  "features": ["KYB_REGISTRY", "AML", "KYB_DOCUMENTS", "KYB_KEY_PEOPLE"],
  "vendor_data": "biz-acme-001",
  "metadata": { },
  "callback": null,

  "registry_checks": [ ... ],
  "aml_screenings": [ ... ],
  "document_verifications": [ ... ],
  "key_people_checks": [ ... ],

  "phone_verifications": null,
  "email_verifications": null,
  "questionnaire_responses": null,
  "ip_analyses": null,

  "reviews": [ ],
  "decision_trace": { ... },
  "linked_records": null,
  "contact_details": { ... },
  "expected_details": null,
  "created_at": "...",
  "expires_at": "..."
}
```

Todos los arrays de funciones admiten varias instancias: cada elemento representa un nodo de un flujo basado en grafos. Un valor nulo significa que la función no estaba presente en el flujo de esta sesión.

## Campos compartidos de nivel superior

| Campo | Tipo | Descripción |
| - | - | - |
| `session_id` | UUID | Identificador único de la sesión |
| `session_kind` | enum | Siempre `"business"` en las sesiones KYB |
| `session_number` | int | Número secuencial dentro de la aplicación |
| `session_url` | URL | Enlace de verificación alojado |
| `status` | enum | Estado general de la sesión (consulta los [estados](https://docs.didit.me/es/business-verification/statuses.md)) |
| `status_override` | object o null | `{ overridden_at, automatic_status }` cuando un revisor estableció `status` manualmente en contra de lo que habría establecido la plataforma (por ejemplo, al aprobar una empresa mientras una verificación vinculada de una persona clave está rechazada). `null` cuando el estado es el automático. Úsalo para distinguir una aprobación manual de una automática |
| `decision_trace` | object | Cómo se llegó a la decisión: `status`, `decided_by` (`manual`, `automatic` o `investigator`), `decided_at`, `automatic_status`, `terminal_node_id`, `actor`, `warning_counts` y `status_warnings` (las advertencias que determinaron el estado) |
| `linked_records` | object o null | Un resumen de otros registros vinculados a la sesión. `null` cuando no hay nada que mostrar |
| `workflow_id` | UUID | Flujo de verificación (workflow) que dirigió esta sesión |
| `features` | array de cadenas | Identificadores de las funciones que ejecutó el flujo (p. ej., `KYB_REGISTRY`, `AML`, `KYB_DOCUMENTS`, `KYB_KEY_PEOPLE`, `PHONE`, `EMAIL`) |
| `vendor_data` | string | Tu identificador de la empresa |
| `metadata` | object | JSON de formato libre que adjuntaste al crear la sesión |
| `callback` | URL o null | URL de redirección opcional tras la verificación |
| `contact_details` | object o null | `{ email, email_lang, send_notification_emails, phone }`: se establece cuando el flujo incluye notificaciones por correo electrónico o teléfono |
| `expected_details` | object o null | Payload con los datos esperados de la empresa que pasaste al crear la sesión: `company_name`, `registry_country` (`XX` o `XX-YY` con el estado en los registros de nivel estatal, p. ej., `US-CA`), `registration_number` |
| `reviews` | array | Notas más recientes de los revisores sobre la sesión |
| `created_at`, `expires_at` | Marcas de tiempo ISO | — |

## `registry_checks[]`

Cada elemento es una verificación en el registro de empresas (normalmente una por sesión; varias en flujos basados en grafos con KYB recursivo de UBO corporativos).

```json theme={null}
{
  "status": "Approved",
  "node_id": "feature_kyb_registry",
  "data_resolved": true,
  "company": { ...see below... },
  "ownership_structure": { },
  "warnings": []
}
```

| Campo | Descripción |
| - | - |
| `status` | Estado del ciclo de vida de la función (`Approved`, `Declined`, `In Review`, `Not Finished`, `Resub Requested`) |
| `node_id` | Identificador del nodo del grafo para esta verificación |
| `data_resolved` | `true` cuando los datos del registro han terminado de cargarse o el usuario los ha proporcionado manualmente |
| `company` | Payload completo del registro; consulta el **bloque `company`** más abajo |
| `ownership_structure` | La tabla de capitalización que el registro acreditó cuando se entregó el nivel de propiedad: `shareholders[]` y `beneficial_owners[]`, cada uno con la misma identidad en el registro y la misma participación que `company.beneficial_owners[]` (`name`, `entity_type`, `roles`, `ownership_min_shares` / `ownership_max_shares`, ...) y su `shareholding` canónico. `null` cuando el registro no acreditó ninguna propiedad. Lee `company.beneficial_owners` y `company.ownership` para obtener el registro actual |
| `warnings` | Advertencias estructuradas / entradas de registro limitadas a esta verificación en el registro. Consulta [Advertencias de Verificación de empresas](https://docs.didit.me/es/business-verification/warnings.md). |

### Bloque `company`

El objeto anidado de la empresa es la vista completa de la entidad jurídica tal como se obtiene del registro (y, opcionalmente, editada por el usuario):

```json theme={null}
{
  "uuid": "...",
  "node_id": "feature_kyb_registry",
  "status": "Approved",
  "registry_status": "active",
  "data_resolved": true,
  "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": null,
  "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",
  "location_of_registration": "London",
  "vat_number": "GB980780684",
  "vat_validation_status": "format_valid",
  "vat_validated_number": "GB980780684",
  "vat_validation_source": "format_rules",
  "vat_validated_name": null,
  "vat_validated_address": null,
  "vat_checked_at": "2026-04-16T10:10:00Z",
  "financial_summary": { },
  "officers": [ ... ],
  "beneficial_owners": [ ... ],
  "addresses": [
    {
      "type": "registered",
      "address": "1 Main Street, London EC1A 1AA, United Kingdom",
      "street": "1 Main Street",
      "city": "London",
      "postal_code": "EC1A 1AA",
      "region": null,
      "country_code": "GB",
      "description": null
    }
  ],
  "industries": [
    { "code": "58290", "description": "Other software publishing", "scheme": "UK SIC 2007", "is_primary": true }
  ],
  "accounts": { ... },
  "ownership": {
    "status": "delivered",
    "tier_requested": "ubo",
    "tier_delivered": "ubo",
    "unavailable_reason": null,
    "direct_ownership_complete": true,
    "unresolved": []
  },
  "registry_tier": "ubo",
  "registry_tier_delivered": "ubo",
  "registry_ownership_status": "delivered",
  "registry_monitoring": null,
  "registry_data": { },
  "user_provided_data": { },
  "confirmed_by_user_at": "2026-04-16T10:10:00Z",
  "last_console_edit_at": null,
  "is_editable": false
}
```

| Campo | Descripción |
| - | - |
| `registry_status` | Estado informado por el proveedor (`active`, `dissolved`, `struck_off`, `inactive`, etc.). Consulta los [estados](https://docs.didit.me/es/business-verification/statuses.md#estado-del-registro-según-el-proveedor) |
| `is_from_registry` | `true` cuando los datos proceden de un registro oficial; `false` si se introdujeron manualmente |
| `fetch_status` | `pending`, `resolved` o `failed`: estado de la consulta al registro |
| `verification_status` | `verified`, `failed` o `unknown` |
| `risk_level` | Valor opcional transmitido tal cual desde la fuente del registro. Normalmente es `null`: Didit no calcula un nivel de riesgo, así que usa `warnings[]` y el `status` de la sesión para decidir |
| `registry_monitoring` | El monitor de registro más reciente de la empresa, o `null` si no existe ninguno. Solo se rellena cuando la [monitorización del registro](https://docs.didit.me/es/business-verification/ownership.md#monitorización-de-accionistas-y-ubo) está disponible. Campos: `uuid`, `status`, `unavailable_reason`, `enrolled_at`, `cancelled_at`, `last_bill_date`, `next_bill_date`, `last_event_at`, `events_count`, `watched_fields` |
| `is_editable` | `true` mientras el usuario final todavía pueda editar los datos procedentes del registro |
| `registry_data` | El detalle normalizado del registro de Didit: el resultado de la propiedad (`ownership_error`, `section_errors`, `ubo_resolution`), las correcciones realizadas con [update-data](https://docs.didit.me/es/sessions-api/update-data.md) y los datos del registro que no tienen un campo propio. Nunca incluye el registro original de la fuente. Sus claves varían según la empresa y no es un contrato estable: lee en su lugar los campos canónicos |
| `user_provided_data` | Los campos que el usuario final introdujo o editó (útil para comparar en una auditoría con los valores del registro) |
| `confirmed_by_user_at` | Marca de tiempo en la que el usuario final confirmó / editó los datos del registro |
| `vat_number` | Número de IVA tal como se envió, cuando se recopila |
| `vat_validation_status` | Resultado de validar el número de IVA, o el `tax_number` si no lo hay: `valid`, `invalid`, `format_valid`, `invalid_format`, `could_not_validate` o `not_applicable`. Consulta [Validación del IVA y de la identificación fiscal](https://docs.didit.me/es/business-verification/company-data.md#validación-del-iva-y-de-la-identificación-fiscal) |
| `vat_validated_number` / `vat_validation_source` | El número que se comprobó, tal como lo conoce la fuente, y la fuente que determinó el estado (un registro oficial o `format_rules`) |
| `vat_validated_name` / `vat_validated_address` | Nombre y dirección registrados en la fuente, cuando los divulga |
| `vat_checked_at` | Marca de tiempo de la comprobación; `null` si no se realizó ninguna |
| `officers[]` | Directivos con enriquecimiento KYC integrado (ver más abajo) |
| `beneficial_owners[]` | UBO con enriquecimiento KYC integrado (ver más abajo) |
| `addresses[]` | Todas las direcciones que indica el registro, con el formato canónico de dirección que se describe más abajo. `null` cuando no indica ninguna |
| `industries[]` | Las actividades en las que el registro clasifica a la empresa, con el formato canónico de industria que se describe más abajo. `null` cuando no indica ninguna |
| `accounts` | Fechas de presentaciones societarias, cuando se informan: `last_annual_return_date` y `last_agm_date`. Describen presentaciones y juntas, no estados financieros |
| `ownership` | El resultado del nivel de propiedad (Accionistas / UBO), con el formato canónico que se describe más abajo |
| `registry_tier` / `registry_tier_delivered` / `registry_ownership_status` | El nivel solicitado, el nivel entregado (y facturado) y el resultado de la propiedad. Los mismos valores están en `ownership` |

### Un único formato para cada país y fuente de registro

Didit consulta registros de empresas en muchos países a través de varias fuentes de registro.
Cada fuente publica su propia estructura, pero el bloque `company` siempre tiene la misma forma: las claves siguientes están siempre presentes, con los mismos tipos, sea cual sea el país y la fuente de los que proceda la empresa.
Un dato que el registro no publica es `null`; nunca necesitas ramificar la lógica según el país ni analizar `registry_data`.
La misma forma la devuelven la [decisión](https://docs.didit.me/es/sessions-api/retrieve-session.md), los endpoints independientes del [registro KYB](https://docs.didit.me/es/standalone-apis/kyb-registry-ubo.md) y el flujo de verificación alojado.

**Dirección** (cada elemento de `addresses`)

| Campo | Descripción |
| - | - |
| `type` | En minúsculas. `registered` para el domicilio social; otros tipos según los nombra el registro (por ejemplo, `postal`, `office`). `null` cuando el registro no indica qué es la dirección |
| `address` | La dirección completa en una sola línea. Siempre presente |
| `street`, `city`, `postal_code`, `region` | La dirección desglosada, cuando el registro la publica así |
| `country_code` | ISO 3166-1 alfa-2 |
| `description` | La etiqueta propia del registro para la dirección, cuando la proporciona |

**Industria** (cada elemento de `industries`)

| Campo | Descripción |
| - | - |
| `code` | Código de actividad tal como lo imprime el registro |
| `description` | Etiqueta de la actividad, cuando el registro la publica |
| `scheme` | Sistema de clasificación, con un único nombre por sistema sea cual sea la fuente que lo informó (`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`). Otros sistemas nacionales conservan el nombre propio del registro; `null` cuando el registro no lo nombra |
| `is_primary` | `true` para la actividad principal. Exactamente una entrada es la principal |

Cuando el registro indica actividades pero no una descripción de la empresa, `nature_of_business` se completa a partir de las etiquetas de las actividades.
Los datos de contacto y los nombres alternativos se completan cuando están disponibles, aunque las ediciones explícitas del usuario o del revisor siempre tienen prioridad.

**Propiedad** (`ownership`)

| Campo | Descripción |
| - | - |
| `status` | `delivered`; `not_held` cuando el registro de propiedad respondió y no incluye a esta empresa en absoluto, por lo que no hay ningún registro de propiedad que entregar; `unavailable` cuando los datos no se entregaron por cualquier otro motivo (un registro que no nombra a ningún propietario, una sección de propiedad que no se devolvió o un proveedor al que no se pudo consultar); `pending` mientras el registro todavía obtiene la sección de propiedad; `not_requested` en el nivel Basic |
| `tier_requested` / `tier_delivered` | `basic`, `shareholders` o `ubo`. Una solicitud UBO respondida solo con accionistas directos se entrega, y se factura, como `shareholders` |
| `unavailable_reason` | Por qué no se entregó un nivel de propiedad solicitado: `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` u `other`. `null` cuando se entregó la propiedad |
| `direct_ownership_complete` | `true` cuando las participaciones declaradas de los accionistas directos suman 100% (con un margen de redondeo de un punto porcentual), `false` cuando no suman eso, `null` cuando no se entregó la propiedad o no se declara una participación |
| `unresolved[]` | Partes de la cadena de propiedad que el registro no pudo resolver, como `{ reason, section }` (por ejemplo, `no_group_structure_on_record` para `group_structure`: se conocen los propietarios directos, pero el grupo empresarial por encima de ellos no consta en el registro) |

**Detalle del registro** (`registry_data`)

Detalle propio de Didit sobre la comprobación en el registro, nunca el registro de la fuente registral.
Todas las claves son opcionales y solo aparecen cuando la empresa tiene un valor para ellas, y se pueden añadir claves nuevas: consulta los campos canónicos anteriores para todo lo que cubren.

| Campo | Descripción |
| - | - |
| Datos del registro (`legal_address`, `registered_address`, `registration_date`, `dissolution_date`, `registry_status`, `verification_status`, `company_type` y los demás campos que acepta [update-data](https://docs.didit.me/es/sessions-api/update-data.md)) | Cadenas. Las correcciones realizadas con update-data y los datos que indica el registro que no tienen un campo propio (`registration_date`, `dissolution_date`) |
| `ownership_error` | Por qué no se entregó un nivel de propiedad solicitado, con los mismos códigos que `ownership.unavailable_reason` (`no_owners_on_record`, `ownership_section_unavailable`, `company_not_found`, `provider_unavailable`, `other`, ...) |
| `section_errors` | Secciones que el registro no devolvió, indexadas por sección (`officers`, `shareholders`, `group_structure`), cada una como `{ status_code }` |
| `ubo_resolution` | Cómo recorrió la cadena el nivel UBO: `parent_chain[]` y `subsidiaries[]` como `{ name, country_code, registration_number }`, y `unresolved[]` como `{ reason, section }` |
| `lite_enrichment` | Campos Lite vacíos que completó otra de las fuentes registrales del país: `{ fields[], people_added }` |
| `registry_metadata`, `registry_sources[]`, `previous_names[]`, `parent_companies[]`, `documents_available` | Solo en registros más antiguos: los campos propios del registro, los registros oficiales consultados (`{ name, source_type }`, solo se nombran los registros oficiales), los nombres anteriores, los nombres de las sociedades matrices y el número de presentaciones disponibles |

### Estructura de un directivo (dentro de `company.officers`)

```json theme={null}
{
  "uuid": "...",
  "name": "Jane Doe",
  "first_name": "Jane",
  "last_name": "Doe",
  "date_of_birth": null,
  "date_of_birth_year": 1983,
  "date_of_birth_month": 2,
  "address": "1 Example Street, London",
  "appointment_date": "2024-07-01",
  "termination_date": null,
  "designation": "Director",
  "role": "director",
  "nationality": "USA",
  "is_active": true,
  "kyc_status": "Approved",
  "kyc_session_url": "https://verify.didit.me/..."
}
```

`date_of_birth` solo se completa cuando el registro proporciona una fecha completa.
Si el registro solo indica un año, o un mes y un año, usa `date_of_birth_year` y `date_of_birth_month`; el día que falta nunca se deduce.
Los nombres, los datos de nacimiento, la dirección y las fechas de nombramiento siguen disponibles tanto en la lista de directivos de la empresa como en la lista del registro de personas clave.

### Estructura de un beneficiario final (dentro de `company.beneficial_owners`)

```json theme={null}
{
  "uuid": "...",
  "name": "John Doe",
  "first_name": "John",
  "last_name": "Doe",
  "entity_type": "person",
  "date_of_birth": null,
  "country_of_birth": null,
  "email": null,
  "company_name": null,
  "registration_number": null,
  "nationality": null,
  "designation": null,
  "appointment_date": null,
  "voting_min_shares": null,
  "voting_max_shares": null,
  "roles": ["ubo"],
  "ownership_min_shares": "40",
  "ownership_max_shares": "40",
  "is_active": true,
  "kyc_status": "Pending",
  "kyc_session_url": "https://verify.didit.me/...",
  "effective_ownership_percent": 40.0,
  "shareholding": {
    "share_class": "Ordinary",
    "number_of_shares": 40,
    "currency": "GBP",
    "nominal_value": 1,
    "total_value": null,
    "percentage": 40
  }
}
```

`kyc_status` usa una proyección apta para B2C: `Approved`, `Declined` o `Pending` (los estados completos de la sesión se agrupan en `Pending` hasta que termina el KYC).

`shareholding` indica lo que posee el propietario, con la misma estructura para todos los países y fuentes registrales: `share_class`, `number_of_shares`, `currency`, `nominal_value`, `total_value` y `percentage` (la participación exacta, con cuatro decimales).
Es `null` cuando el registro no indica ninguna participación.
Un rango, como el 25-50% de un PSC del Reino Unido, no es una participación: `percentage` es `null` y el rango se mantiene en `ownership_min_shares` / `ownership_max_shares`.
Los accionistas y los UBO se incluyen en `beneficial_owners`; `roles` permite distinguirlos.

## `key_people_checks[]`

Esta es la **comprobación agregada** de todos los cargos y UBO de la sesión. Expone dos grupos para que la consola pueda mostrar en paralelo "extraído del registro" y "enviado por la empresa", además de un resumen general del KYC de los UBO.

```json theme={null}
{
  "status": "Approved",
  "node_id": "feature_kyb_key_people",
  "registry": {
    "officers": [ ...registry-derived officers... ],
    "beneficial_owners": [ ...registry-derived UBOs... ]
  },
  "submitted": {
    "parties": [ ...user-submitted key-people records... ]
  },
  "ubo_kyc_summary": {
    "total": 2,
    "approved": 1,
    "flagged": 0,
    "pending": 1
  },
  "warnings": []
}
```

* **`registry.officers` / `registry.beneficial_owners`**: partes extraídas de la comprobación del registro de empresas.
* **`submitted.parties`**: partes que el administrador de la empresa añadió explícitamente durante el flujo de personas clave (registros con `source = "USER"`).

### `registry.officers[]` / `registry.beneficial_owners[]`

Los datos del registro coinciden con `company.officers` / `company.beneficial_owners` descritos arriba.
Personas clave incluye además el estado AML y la vinculación detallada con la verificación, como `kyc_session_id` y los campos del flujo de verificación.
Las listas de la empresa conservan su estado de KYC simplificado y su URL de verificación.

### `submitted.parties[]`

Las partes enviadas por el usuario incluyen su vinculación con el KYC o con el KYB hijo:

```json theme={null}
{
  "uuid": "...",
  "entity_type": "person",
  "name": "Alice Chen",
  "first_name": "John",
  "last_name": "Doe",
  "email": "alex.sample@example.com",
  "role": "ubo",
  "ownership_percent": 35.0,
  "nationality": "USA",
  "position": "CEO",
  "date_of_birth": "1990-01-01",
  "phone_number": "+34612345678",
  "source": "USER",
  "requires_verification": true,
  "is_skipped": false,
  "kyc_session_id": "sess-xyz...",
  "kyc_session_status": "Not Started",
  "kyc_session_url": "https://verify.didit.me/...",
  "kyc_session_deleted": false,
  "custom_fields": { }
}
```

Las partes corporativas (`entity_type: "company"`) incluyen además `company_name`, `registration_number` y `kyb_sub_session_id` / `kyb_sub_session_status` / `kyb_sub_session_deleted` cuando el KYB anidado está habilitado para los UBO corporativos.

`kyc_session_deleted` (y su equivalente corporativo `kyb_sub_session_deleted`) es `true` cuando la sesión hija de la parte se eliminó. Una sesión hija eliminada conserva el estado que tenía en el momento de la eliminación y nunca puede finalizar, así que consulta este indicador en lugar del estado: el `*_session_url` correspondiente se devuelve como `null` porque el enlace ya no funciona, y la comprobación de personas clave pasa a `In Review` en lugar de esperar indefinidamente. Eliminar una sesión hija nunca cuenta como aprobación. Exime a la parte con [`PATCH /v3/session/{id}/kyb/parties/{party_uuid}/`](https://docs.didit.me/es/sessions-api/update-data#omitir-a-una-parte-de-personas-clave) para que el KYB pueda finalizar.

### `ubo_kyc_summary`

Progreso agregado del KYC de los UBO, útil para una sola tarjeta del panel:

| Campo | Significado |
| - | - |
| `total` | Número de UBO activos que tienen una sesión de KYC vinculada |
| `approved` | UBO cuya sesión de KYC está `Approved` |
| `flagged` | UBO cuya sesión de KYC está `Declined` o `In Review` |
| `pending` | Todos los demás (aún sin terminar) |

Devuelve `null` cuando ningún UBO tiene sesiones de KYC vinculadas.

## `document_verifications[]`

Documentos agrupados por nodo:

```json theme={null}
{
  "status": "Approved",
  "node_id": "feature_kyb_documents",
  "items": [
    {
      "uuid": "...",
      "document_type": "LEGAL_PRESENCE",
      "document_subtype": "CERTIFICATE_OF_INCORPORATION",
      "document_group": "LEGAL_PRESENCE",
      "status": "Approved",
      "file_url": "https://didit-storage.s3...",
      "document_metadata": {
        "file_size": 246810,
        "content_type": "application/pdf",
        "creation_date": "2024-05-15",
        "modified_date": "2024-05-15",
        "overlay_manipulation": null
      },
      "ocr_data": {
        "company_name": "Acme Corporation Limited",
        "registration_number": "12345678",
        "incorporation_date": "2010-05-14"
      }
    }
  ],
  "groups": {
    "LEGAL_PRESENCE": { "total": 1, "approved": 1, "pending": 0, "declined": 0, "in_review": 0, "other": 0, "missing": 0 },
    "OWNERSHIP_STRUCTURE": { "total": 1, "approved": 1, "pending": 0, "declined": 0, "in_review": 0, "other": 0, "missing": 0 }
  },
  "required_groups": ["LEGAL_PRESENCE", "OWNERSHIP_STRUCTURE"],
  "warnings": []
}
```

| Campo | Descripción |
| - | - |
| `items[]` | Filas de documentos individuales: cada una tiene su propio `status`, `document_type` y `document_group` (el grupo), `document_subtype`, `file_url` (firmada), `document_metadata` y la extracción OCR |
| `groups` | Contadores de progreso por grupo, con el valor del grupo como clave (`LEGAL_PRESENCE`, `COMPANY_DETAILS`, `OWNERSHIP_STRUCTURE`, `REPRESENTATIVES_AUTHORIZATION`, además de `OTHER` para documentos sin clasificar). Cada grupo contiene `total`, `approved`, `pending`, `declined`, `in_review`, `other` y `missing`. Consulta los [grupos de documentos KYB](https://docs.didit.me/es/business-verification/documents.md#grupos-de-documentos) |
| `required_groups` | Grupos que tu flujo marcó como obligatorios; la aprobación de la sesión depende de que se cumplan todos los requisitos |

### Metadatos de documentos corporativos

En los documentos corporativos en PDF, `items[].document_metadata.overlay_manipulation` puede incluir evidencia forense de una posible edición mediante texto superpuesto. Cuando está presente, incluye:

| Campo | Descripción |
| - | - |
| `detected` | Si se detectó evidencia de manipulación mediante texto superpuesto |
| `analyzed` | Si se pudo analizar el PDF |
| `signals` | Señales forenses que se activaron, como `duplicate_font_subset` o `glyph_fragmentation` |
| `manipulated_regions` | Rectángulos en coordenadas de página del PDF alrededor del texto que se sospecha que fue editado: `page`, `x`, `y`, `width`, `height`, `page_width`, `page_height` |

El campo es `null` cuando no se encontró evidencia de manipulación mediante texto superpuesto, cuando el documento no es un PDF o cuando no se pudo analizar el PDF.

## `aml_screenings[]`

Análisis AML a nivel de empresa y (cuando el flujo los incluye) a nivel de persona.

```json theme={null}
{
  "node_id": "feature_aml",
  "status": "Approved",
  "total_hits": 0,
  "score": 0,
  "entity_type": "COMPANY",
  "screened_data": {
    "company_name": "Acme Corporation Limited",
    "country_code": "GBR"
  },
  "is_ongoing_monitoring_enabled": true,
  "next_ongoing_monitoring_bill_date": "2027-04-16",
  "last_ongoing_screening_at": "2026-09-12T04:03:11Z",
  "last_ongoing_screening_datasets_updated_at": null,
  "hits": [],
  "warnings": []
}
```

Cuando `total_hits > 0`, cada coincidencia incluye la puntuación de coincidencia, la puntuación de riesgo, las fuentes de la lista de vigilancia y un `review_status` por coincidencia que puedes actualizar con el endpoint update-aml-hit-status. Consulta el [informe de Análisis AML](https://docs.didit.me/es/core-technology/aml-screening/report-aml-screening.md) para ver la estructura de las coincidencias.

## Arrays de funciones compartidas

`phone_verifications`, `email_verifications`, `questionnaire_responses` e `ip_analyses` usan la misma estructura por elemento que las sesiones de usuario (KYC). Son `null` cuando el flujo no las incluye. Consulta la [respuesta de KYC](https://docs.didit.me/es/sessions-api/retrieve-session.md) para ver los esquemas de los elementos.

`signatures` está presente cuando el flujo tiene un paso de [Firma electrónica](https://docs.didit.me/es/core-technology/electronic-signature/overview.md). Una sesión de empresa tiene un elemento por cada persona clave que firma en nombre de la empresa, con `signer.capacity: "company"`, el nombre de la empresa y los roles de la persona clave. Consulta el [informe de Firma electrónica](https://docs.didit.me/es/core-technology/electronic-signature/report-electronic-signature.md).

## Grupos de advertencias por función

Las advertencias de Verificación de empresas se agrupan según la función que las generó:

* `KYB_REGISTRY` para problemas de disponibilidad del registro, propiedad, actividad de la empresa y restricciones por país.
* `KYB_DOCUMENTS` para problemas de extracción de documentos corporativos, verificación cruzada, metadatos, manipulación, subtipo, antigüedad y límite de intentos.
* `AML` para coincidencias en el análisis AML de la empresa o falta de datos del análisis.
* `KYB_KEY_PEOPLE` para problemas a nivel de persona relacionados con directores, directivos, UBO o representantes.
* `PHONE` para problemas de riesgo del número de teléfono, duplicados, lista de bloqueo e intentos del código de verificación.
* `EMAIL` para problemas de riesgo del correo electrónico, entregabilidad, duplicados, lista de bloqueo e intentos del código de verificación.
* `QUESTIONNAIRE` para reglas de estado personalizadas basadas en las respuestas del cuestionario.
* `LOCATION` para problemas de Análisis de dispositivo e IP, red privada, lista de bloqueo de IP, lista de bloqueo de dispositivos y dispositivos o IP duplicados.
* `SIGNATURE` para rechazos de Firma electrónica, confirmaciones de código fallidas, discrepancias en el nombre del firmante, firmantes no verificados, documentos modificados y datos de campos faltantes. Consulta las [advertencias de Firma electrónica](https://docs.didit.me/es/core-technology/electronic-signature/warnings-electronic-signature.md).

Consulta las [advertencias de Verificación de empresas](https://docs.didit.me/es/business-verification/warnings.md) para ver la lista completa de códigos de advertencia.

## Filtrado de campos según el flujo

Los flujos pueden limitar qué campos anidados aparecen en cada elemento de función mediante `response_attributes`. Estos campos se incluyen siempre, sin excepción: `status`, `warnings`, `node_id`. Todos los demás campos se establecen en null cuando no están en la lista de permitidos: la clave se mantiene en la respuesta para que el esquema sea estable.

## Próximos pasos

> [card] [Estados](https://docs.didit.me/es/business-verification/statuses.md)
>
> Qué significa cada valor de estado.

> [card] [Evaluación de riesgo](https://docs.didit.me/es/business-verification/risk-assessment.md)
>
> Qué determina el resultado de una verificación KYB.

> [card] [Informe AML](https://docs.didit.me/es/core-technology/aml-screening/report-aml-screening.md)
>
> Referencia completa del payload de coincidencias AML.

> [card] [Personas clave](https://docs.didit.me/es/business-verification/key-people.md)
>
> Cómo las partes del registro y las enviadas por el usuario se clasifican en los grupos `registry` / `submitted`.

> [card] [Documentos](https://docs.didit.me/es/business-verification/documents.md)
>
> Grupos de documentos, OCR y verificación cruzada.

> [card] [Recuperar sesión](https://docs.didit.me/es/sessions-api/retrieve-session.md)
>
> Referencia completa del endpoint con ejemplos de respuestas.


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