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

# Verificar cuenta bancaria: titularidad sin iniciar sesión

> Didit confirma que una cuenta bancaria pertenece a la persona verificada con los datos que escribe, sin iniciar sesión. IBAN, CLABE, CBU, IFSC y más.

La comprobación de cuenta confirma que una cuenta bancaria pertenece a la persona que tu flujo de verificación (workflow) ya verificó, a partir de los datos de la cuenta que escribe. No hay inicio de sesión bancario ni pantalla de consentimiento: la persona introduce su cuenta en el formato que se usa en su país, y el banco compara el nombre que figura en ella con el nombre que verificó un paso anterior.

Es uno de los dos [métodos de Verificación bancaria](https://docs.didit.me/es/core-technology/bank-verification/verification-methods.md), junto al inicio de sesión bancario, y su valor de método es `account_lookup`. La carga de extractos y los microdepósitos siguen siendo alternativas después de ambos, y la persona siempre puede [continuar sin banco](https://docs.didit.me/es/core-technology/bank-verification/fallbacks.md). Para comprobar una cuenta desde tu backend sin sesión, por ejemplo antes de un pago, usa la [API de comprobación de cuenta](https://docs.didit.me/es/standalone-apis/bank-account-check.md).

> [!WARNING]
>
> La Verificación bancaria aún no está habilitada en producción.
> Hasta que lo esté, no puedes añadir este paso a un flujo ni llamar a esta API, ni en producción ni en sandbox, y esta página describe cómo funcionará.

> [!NOTE]
>
> La Verificación bancaria confirma que el titular de una cuenta coincide con una identidad que estableció **otro paso**, por lo que no es una prueba de identidad por sí sola. Coloca Verificación de identidad, Validación de base de datos, un cuestionario o `expected_details` antes del paso. La persona nunca escribe un nombre para la comprobación: Didit siempre compara el nombre que la sesión ya verificó.

## Cómo funciona

**1. La persona elige su país**

En el paso de Verificación bancaria, la persona elige uno de los países que ofrece el paso. Donde la comprobación de cuenta va primero, el paso abre un formulario breve con el formato de cuenta de ese país. Donde el inicio de sesión bancario va primero, la persona elige **Introduce los datos de tu cuenta** para llegar al formulario.

**2. La persona escribe su cuenta**

Por ejemplo, un IBAN, un sort code y un número de cuenta, o una CLABE. El flujo de verificación construye el formulario a partir de lo que la API devuelve para ese país, así que un país que Didit añada más adelante no requiere ningún cambio por tu parte.

**3. Didit comprueba primero el formato**

Antes de facturar nada, Didit comprueba cada valor: su longitud, sus caracteres, sus dígitos de control y, en el caso de un IBAN, que pertenezca al país seleccionado. Un valor que no pasa la comprobación se rechaza indicando el campo que hay que corregir. La persona lo corrige ahí mismo y no se consume ningún intento.

**4. El banco comprueba el nombre de la cuenta**

Didit realiza una comprobación con el nombre verificado en la sesión. Cualquier otro dato que envíe el cliente se ignora.

**5. El paso decide**

La respuesta se convierte en un resultado de propiedad, y las acciones del paso lo transforman en el veredicto exactamente igual que con el inicio de sesión bancario.

## Dónde se ofrece la comprobación

La cobertura es por país. Didit activa la comprobación país por país, una vez que dispone de una ruta con precio en él; un país sin ruta no la ofrece. Se van añadiendo países con el tiempo, y el paso siempre lee la lista actual, así que nunca necesitas cambiar tu integración cuando se añade uno.

Dentro de un país con cobertura, los métodos del paso deciden si la persona la ve:

* **El orden del paso.** `bank_method_order` define qué métodos ofrece cada país y cuál va primero. El valor predeterminado, `["open_banking", "account_lookup"]`, empieza con el inicio de sesión bancario y ofrece la comprobación de cuenta como respaldo.
* **El orden propio de un país.** `methods` en un país de `bank_countries` sustituye allí el orden del paso, por ejemplo `["account_lookup"]` para ofrecer solo la comprobación de cuenta, o `["account_lookup", "open_banking"]` para empezar con ella.
* **Un banco caído.** Donde un país ofrece la comprobación de cuenta, también sirve de respaldo si el inicio de sesión bancario de un banco se ha degradado o no está disponible: el paso pasa al formulario de cuenta antes de pedir ningún consentimiento, siempre que a la persona le queden comprobaciones de cuenta.
* **La comprobación se ejecuta en las rutas propias de Didit.** Un paso que se ejecuta con tu propio proveedor del marketplace (`provider_key`) solo la ofrece con `fallback_to_native` activado.
* **Cuentas de empresa.** En una sesión de verificación de empresas, la comprobación compara una cuenta de empresa con la empresa verificada, en los países donde Didit comprueba cuentas de empresa.

Consulta [Elige los métodos por país](https://docs.didit.me/es/core-technology/bank-verification/verification-methods.md#elige-los-métodos-por-país) para ver las reglas que se aplican al guardar.

## Qué escribe la persona

Estos son los formatos de cuenta que entiende el formulario. No son una lista de cobertura: que la comprobación se ejecute en un país depende de [dónde se ofrece](#dónde-se-ofrece-la-comprobación), y el paso siempre muestra los campos exactos de ese país.

| Formato de cuenta | Países | Qué escribe la persona |
| - | - | - |
| IBAN | Países que usan IBAN | El IBAN completo, que debe pertenecer al país seleccionado |
| Sort code y número de cuenta | Reino Unido | Un sort code de 6 dígitos y un número de cuenta de 8 dígitos |
| Número de ruta y número de cuenta | Estados Unidos | Un número de ruta ABA de 9 dígitos y el número de cuenta |
| Número de tránsito y de institución | Canadá | El número de tránsito y de institución de 8 dígitos (el tránsito de 5 dígitos seguido de la institución de 3 dígitos) y el número de cuenta |
| BSB y número de cuenta | Australia | Un BSB de 6 dígitos y el número de cuenta |
| CLABE | México | La CLABE de 18 dígitos, que ya identifica el banco |
| CBU o CVU | Argentina | El CBU o CVU de 22 dígitos, que ya identifica el banco |
| IFSC y número de cuenta | India | El IFSC de 11 caracteres y el número de cuenta |
| NUBAN y código bancario | Nigeria | El NUBAN de 10 dígitos y el código o BIC del banco |
| Número de cuenta | Otros países | El número de cuenta, y un código bancario o BIC donde el país lo exija |

En algunos países el formulario también pide un número de registro: para cuentas de empresa y, en unos pocos países, para todas las cuentas.

Antes de comprobar un valor, se eliminan los espacios, guiones y puntos, y las letras se pasan a mayúsculas, para que la persona pueda escribir la cuenta tal como la imprime su banco.

## Actívala

Un paso nuevo ofrece la comprobación de cuenta de forma predeterminada, como alternativa al inicio de sesión bancario. Para empezar por ella, o para ofrecerla sola, pon `account_lookup` primero en el orden:

```json theme={null}
{
  "bank_method_order": ["account_lookup", "open_banking"]
}
```

Esta configuración determina cómo funciona la comprobación:

| Configuración | Efecto en la comprobación de cuenta |
| - | - |
| `bank_method_order`, `bank_countries.<ISO3>.methods` | Si un país ofrece la comprobación, y si va antes o después del inicio de sesión bancario. |
| `bank_countries` | La comprobación solo se ejecuta en los países que ofrece el paso. |
| `bank_reference_identity` | El paso cuyo nombre verificado se usa para comprobar la cuenta. |
| `bank_account_check_max_attempts` | Cuántas comprobaciones tiene la persona, de `1` a `5` (`3` de forma predeterminada). Es un recuento independiente del `bank_max_attempts` del inicio de sesión bancario. |
| `bank_account_check_accept_close_match` | Activada (predeterminado): una coincidencia cercana pasa a la confirmación de coincidencia cercana, o a `bank_partial_match_action`. Desactivada: se considera que no hay coincidencia en todos los casos de coincidencia cercana. |
| `bank_name_match_threshold`, `bank_partial_match_floor` | Las mismas franjas de puntuación del nombre que en el inicio de sesión bancario: una coincidencia en el umbral o por encima (85 de forma predeterminada), y una coincidencia cercana, la franja de coincidencia parcial, entre el mínimo (70 de forma predeterminada) y el umbral. |
| `bank_use_provider_score` | Activada (predeterminado): la puntuación del nombre que devuelve la propia comprobación decide cuando es mayor que la de Didit, o cuando la comprobación devuelve una puntuación pero ningún nombre del titular; en ese caso, `ownership.method` indica `provider_only`. Desactivada: una respuesta sin nombre del titular es `not_verifiable`. |
| `bank_suggest_holder_name` | Activada (predeterminado): ante una coincidencia cercana que indica el nombre del titular, la persona ve el nombre y confirma que es el suyo o prueba con otra cuenta. |

## Resultados

### Comprobaciones que devuelven una respuesta

Cada una de estas se factura una vez y consume una de las comprobaciones de cuenta de la persona (`bank_account_check_max_attempts`). Hasta que el paso se completa, la persona puede volver a intentarlo con otra cuenta mientras le queden comprobaciones. El resultado está en `ownership.result`, salvo en el caso de una cuenta que no existe, que está en `connection.reason_code`.

| La comprobación devuelve | Resultado | Qué decide |
| - | - | - |
| La cuenta pertenece a la persona verificada | `match` | El paso se aprueba, salvo que otra de sus comprobaciones indique lo contrario. |
| Una coincidencia cercana que indica el nombre del titular | `partial_match` | Con `bank_suggest_holder_name` activada, la persona confirma el nombre o prueba con otra cuenta. Si lo confirma, el paso termina según `bank_partial_match_action` (`REVIEW` de forma predeterminada). |
| Una coincidencia cercana con una puntuación pero sin nombre del titular | `partial_match` | `bank_partial_match_action` (`REVIEW` de forma predeterminada). `ownership.method` indica `provider_only`. Requiere `bank_use_provider_score` activada, que es lo predeterminado; si está desactivada, la respuesta es `not_verifiable`. |
| La cuenta pertenece a otra persona | `no_match` | `bank_no_match_action` (`DECLINE` de forma predeterminada). |
| Una respuesta que no comparó ningún nombre | `not_verifiable` | `bank_not_verifiable_action` (`REVIEW` de forma predeterminada). |
| No existe ninguna cuenta con estos datos | `ACCOUNT_NOT_FOUND` | La persona puede probar con otra cuenta mientras le queden comprobaciones. |

Con `bank_account_check_accept_close_match` desactivada, ambas coincidencias cercanas pasan a ser `no_match`, con el código de motivo `OWNER_NAME_MISMATCH`: nunca se pide a la persona que confirme el nombre, y decide `bank_no_match_action`. El inicio de sesión bancario mantiene sus coincidencias cercanas en cualquier caso.

Cuando la persona ha consumido todas las comprobaciones de cuenta, y todos los intentos de inicio de sesión bancario si el país también lo ofrece, sin lograr una conexión, el paso sigue abierto mientras le ofrezca una carga de extracto con intentos disponibles: consulta [La carga de extracto](https://docs.didit.me/es/core-technology/bank-verification/fallbacks.md#la-subida-de-extracto). Cuando no queda ninguna vía, el paso termina según `bank_attempts_exhausted_action` (`DECLINE` de forma predeterminada), salvo que un intento anterior ya haya dado un veredicto, como una discrepancia de nombre. En ese caso, se mantiene ese veredicto.

### Resultados que nunca se facturan

Ninguno de estos consume una comprobación. Cada uno se muestra en `connection.reason_code`.

| Qué ocurre | Código de motivo | Qué sigue |
| - | - | - |
| La cuenta se rechaza tal como se escribió, por la validación de formato de Didit o por el banco | `INVALID_ACCOUNT_INPUT`, mientras el intento sigue abierto | Se indica a la persona qué campo debe corregir y lo corrige. |
| La comprobación no está disponible en este momento | `PROVIDER_UNAVAILABLE` | La persona puede volver a intentarlo. |
| La sesión no tiene ningún nombre verificado con el que comparar | `REFERENCE_IDENTITY_MISSING` | La comprobación no llega a ejecutarse. El paso termina según `bank_reference_identity_missing_action` (`REVIEW` de forma predeterminada). |

### En la decisión

La decisión de la sesión incluye el paso en `bank_verifications[]`. Una vez evaluada una cuenta, `method` indica `account_lookup`. Mientras no se haya evaluado ninguna cuenta, `method` y `ownership` son `null`, y `connection.reason_code` indica el motivo, por ejemplo `ACCOUNT_NOT_FOUND`, `PROVIDER_UNAVAILABLE` o `REFERENCE_IDENTITY_MISSING`.

En la comprobación no se elige ningún banco, por lo que `connection.institution_id`, `connection.institution_name` y `connection.oauth` son `null`, y `connection.institution_country` es el país que eligió la persona. Didit no conserva ningún acceso a la cuenta una vez completado el paso, así que una comprobación que terminó con una coincidencia indica `connection.status: revoked` con `reason_code: VERIFICATION_COMPLETED`. El resultado en sí se conserva en la sesión.

Una comprobación de cuenta no lee saldos, transacciones ni ingresos. Cuando el paso los solicita, `financial_data.not_collected` los enumera; consulta [Los datos financieros requieren el inicio de sesión bancario](https://docs.didit.me/es/core-technology/bank-verification/verification-methods.md#los-datos-financieros-requieren-el-inicio-de-sesión-en-el-banco).

```json theme={null}
{
  "bank_verifications": [
    {
      "status": "Approved",
      "method": "account_lookup",
      "connection": {
        "status": "revoked",
        "institution_id": null,
        "institution_name": null,
        "institution_country": "ESP",
        "oauth": null,
        "attempts": 1,
        "reason_code": "VERIFICATION_COMPLETED"
      },
      "ownership": {
        "result": "match",
        "method": "exact"
      },
      "financial_data": {
        "balances": null,
        "transactions": null,
        "income": null,
        "categorization": null,
        "not_collected": []
      },
      "billing": {
        "route": "native",
        "billed": true,
        "marketplace_fee": null,
        "usage_type": "bank_verification"
      }
    }
  ]
}
```

El ejemplo muestra solo los campos que trata esta página. Una vez evaluada una cuenta, lee `method` para distinguir una comprobación de cuenta del inicio de sesión bancario: es el único campo pensado para ello.

### En las reglas del flujo y en los informes

* **Ramas y reglas de estado:** `bank.method` es `account_lookup` (**Comprobación de cuenta** en el editor de reglas), y `bank.reason_code` puede ser `ACCOUNT_NOT_FOUND`.
* **Informe PDF de la sesión:** la fila **Método de verificación** indica **Comprobación de cuenta**.

## Precios

Cada comprobación que devuelve una respuesta es un cargo de Verificación bancaria: se facturan la coincidencia, la coincidencia cercana, la falta de coincidencia, la cuenta que no se pudo verificar y la cuenta que no se encontró. Nunca se facturan un valor rechazado antes de la comprobación, una comprobación no disponible ni una sesión sin un nombre verificado con el que comparar. El precio se fija por país: consulta [Precios de Verificación bancaria](https://docs.didit.me/es/getting-started/bank-verification-pricing.md).

La comprobación de cuenta es un método de pago independiente, nunca una alternativa: `bank_fallback_used_action` no se activa para ella. Tras una comprobación facturada, los microdepósitos y la carga del extracto se incluyen sin coste adicional en la misma sesión, siempre que el paso los active y el país los ofrezca.

## Pruébalo en sandbox

En una aplicación de sandbox, la comprobación se ejecuta sobre un servicio simulado y no se factura nada. Sandbox ofrece ambos métodos en todos los países, en el orden que fija el paso: con el orden predeterminado, elige **Introduce los datos de tu cuenta** para ejecutar la comprobación, o establece `bank_method_order` en `["account_lookup", "open_banking"]` para empezar por ella.

Los últimos cuatro caracteres de la cuenta que escribe la persona (el IBAN o, si no, el número de cuenta) determinan la respuesta. Cualquier otra terminación da una coincidencia con el nombre verificado.

| Termina en | Respuesta |
| - | - |
| `0001` | Una coincidencia cercana que indica el nombre del titular: se pide a la persona que confirme el nombre. Con `bank_account_check_accept_close_match` desactivado, sin coincidencia. |
| `0002` | Una coincidencia cercana sin nombre del titular: decide `bank_partial_match_action`. Con `bank_use_provider_score` desactivado, la respuesta es `not_verifiable`; con `bank_account_check_accept_close_match` desactivado, sin coincidencia. |
| `0003` | Sin coincidencia: la cuenta pertenece a otra persona. Consume una comprobación. |
| `0004` | Se recibió una respuesta, pero no se comparó ningún nombre (`not_verifiable`). Consume una comprobación. |
| `0005` | La comprobación no está disponible (`PROVIDER_UNAVAILABLE`). Puedes reintentar sin coste. |
| `0006` | No existe ninguna cuenta con estos datos (`ACCOUNT_NOT_FOUND`). Consume una comprobación. |
| `0009` | Se rechaza tal como se escribió: se pide a la persona que corrija el campo. El intento sigue abierto. |

Sandbox registra cada comprobación respondida como uso sin coste, para que veas qué comprobaciones facturaría una sesión en producción.

Un IBAN, una CLABE y un CBU llevan dígitos de control, así que no basta con cambiar sus últimos cuatro caracteres. Usa estos valores, que superan todas las comprobaciones de formato:

> [tab] Alemania (IBAN)
>
> | Respuesta | IBAN |
> | - | - |
> | Coincidencia | `DE43123456789012345678` |
> | `0001` | `DE62123456789012340001` |
> | `0002` | `DE35123456789012340002` |
> | `0003` | `DE08123456789012340003` |
> | `0004` | `DE78123456789012340004` |
> | `0005` | `DE51123456789012340005` |
> | `0006` | `DE24123456789012340006` |
> | `0009` | `DE40123456789012340009` |

> [tab] Reino Unido
>
> Sort code `123456`, con:
>
> | Respuesta | Número de cuenta |
> | - | - |
> | Coincidencia | `12345678` |
> | `0001` | `12340001` |
> | `0002` | `12340002` |
> | `0003` | `12340003` |
> | `0004` | `12340004` |
> | `0005` | `12340005` |
> | `0006` | `12340006` |
> | `0009` | `12340009` |

> [tab] Estados Unidos
>
> Routing number `021000021`, con:
>
> | Respuesta | Número de cuenta |
> | - | - |
> | Coincidencia | `000123456789` |
> | `0001` | `000123450001` |
> | `0002` | `000123450002` |
> | `0003` | `000123450003` |
> | `0004` | `000123450004` |
> | `0005` | `000123450005` |
> | `0006` | `000123450006` |
> | `0009` | `000123450009` |

> [tab] México (CLABE)
>
> | Respuesta | CLABE |
> | - | - |
> | Coincidencia | `002010077777777771` |
> | `0001` | `002010077777780001` |
> | `0002` | `002010077777750002` |
> | `0003` | `002010077777720003` |
> | `0004` | `002010077777790004` |
> | `0005` | `002010077777760005` |
> | `0006` | `002010077777730006` |
> | `0009` | `002010077777740009` |

> [tab] Argentina (CBU)
>
> | Respuesta | CBU |
> | - | - |
> | Coincidencia | `2850590940090418135201` |
> | `0001` | `2850590940090418160001` |
> | `0002` | `2850590940090418170002` |
> | `0003` | `2850590940090418180003` |
> | `0004` | `2850590940090418190004` |
> | `0005` | `2850590940090418100005` |
> | `0006` | `2850590940090418110006` |
> | `0009` | `2850590940090418140009` |

> [tab] India
>
> IFSC `ALLA0211480`, con:
>
> | Respuesta | Número de cuenta |
> | - | - |
> | Coincidencia | `123456789007` |
> | `0001` | `123456780001` |
> | `0002` | `123456780002` |
> | `0003` | `123456780003` |
> | `0004` | `123456780004` |
> | `0005` | `123456780005` |
> | `0006` | `123456780006` |
> | `0009` | `123456780009` |

La [API de comprobación de cuenta](https://docs.didit.me/es/standalone-apis/bank-account-check.md) responde según las mismas terminaciones al usar una clave de sandbox, sin sesión.

Consulta [Pruebas en sandbox](https://docs.didit.me/es/integration/sandbox-testing.md) para saber cómo funcionan las aplicaciones de sandbox en general.


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