> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fintoc.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Verificación de elegibilidad del pago

Validar previamente un payment intent ayuda a reducir las probabilidades de que los pagos fallen debido a límites de transferencia. Hay dos formas de verificar la elegibilidad de un pago:

* Usar el endpoint `payment_intents/check_eligibility` para verificar la elegibilidad antes de mostrarle al usuario los métodos de pago aceptados.
* Incluir un objeto `sender_account` al crear una Checkout Session o un Payment Intent para verificar cuando el usuario selecciona Fintoc como método de pago.

Al crear un payment intent, puedes incluir un objeto `sender_account` en tu solicitud. Este objeto te permite especificar los detalles de la cuenta del remitente, permitiendo a nuestro sistema realizar validaciones más precisas en función de los límites generales de transferencia y de transacciones anteriores realizadas a través de Fintoc. **Esta funcionalidad solo está disponible en Chile**.

## Uso del endpoint `payment_intents/check_eligibility`

Si quieres verificar la elegibilidad de un pago antes de mostrarle al usuario los métodos de pago aceptados, puedes usar el siguiente endpoint:

```curl cURL theme={null}
curl --request POST \
     --url https://api.fintoc.com/v1/payment_intents/check_eligibility \
     --header 'Authorization: sk_test_9c8d8CeyBTx1VcJzuDgpm4H' \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --data '
{
  "amount": 1000,
  "currency": "clp",
  "sender_account": {
      "holder_id": "195669317",
      "institution_id": "cl_banco_estado"
  },
}
```

El objeto `sender_account` contiene dos campos:

* `holder_id`: el RUT (Rol Único Tributario) del titular de la cuenta
* `institution_id`: el [ID](/es/v2023-11-15/docs/payments/overview-payment-initiation/payment-initiation-countries-and-institutions#available-sender-banks) de la institución bancaria

Combinar estos campos te ayudará a validar ciertos límites:

* Si solo envías el `institution_id` y no el `holder_id`, Fintoc solo validará los límites específicos del banco para los montos máximos y mínimos de transferencia.
* Si envías ambos, Fintoc realizará todas las validaciones del payment intent.

Si el pago es elegible, este endpoint responderá con el siguiente objeto:

```json JSON theme={null}
{
    "eligible_payment": true,
    "error": null
}
```

Si no es válido, responderá con una de las respuestas de error como esta:

```json JSON theme={null}
{
    "eligible_payment": false,
    "error": {
      "type": "new_contact_error",
      "message": "The amount exceeds the maximum amount permitted for new contacts. For #{institution_name}, the maximum permissible amount is $250,000. This restriction ends at 2024-08-20T16:08:28Z",
      "code": "new_contact_maximum_amount_limit_error",
      "param": "amount",
      "doc_url": "https://docs.fintoc.com/reference/errors"
  }
}
```

## Incluir un objeto `sender_account` al crear una Checkout Session

Al realizar una solicitud POST para crear una Checkout Session, incluye el objeto `sender_account` en tu payload JSON. Aquí tienes un ejemplo:

```json theme={null}
{
  "amount": 1000,
  "currency": "clp",
  "metadata": {
    "order": "#987654321"
  },
  "customer_email": "customer@example.com",
  "payment_method_options": {
    "payment_intent": {
      "sender_account": {
        "holder_id": "12345678-9",
        "institution_id": 'cl_banco_estado'
      }
    }
  },
}

```

El objeto `sender_account` contiene dos campos:

* `holder_id`: el RUT (Rol Único Tributario) del titular de la cuenta
* `institution_id`: el [ID](/es/v2023-11-15/docs/payments/overview-payment-initiation/payment-initiation-countries-and-institutions#available-sender-banks) de la institución bancaria

Combinar estos campos te ayudará a validar ciertos límites:

* Si solo envías el `holder_id` y no el `institution_id`, Fintoc usará los límites generales para nuevos contactos, permitiendo que más pagos pasen sin cancelar incorrectamente ninguno.
* Si solo envías el `institution_id` y no el `holder_id`, Fintoc solo validará los límites específicos del banco para los montos máximos y mínimos de transferencia.
* Si envías ambos, Fintoc realizará todas las validaciones del payment intent.

<Warning>
  **Usa el mismo Holder ID**

  Cuando configures el widget para precompletar un nombre de usuario, usa el mismo holder\_id que usaste para prevalidar los pagos. Esto asegura consistencia y ayuda a prevenir fallas en los pagos.
</Warning>

## Proceso de validación

Cuando incluyes la información de `sender_account`, nuestro sistema realiza varias verificaciones para validar el payment intent:

1. **Límites específicos de la institución**: verificamos si el monto del pago está dentro de los límites permitidos para la institución especificada.
2. **Límites para nuevos contactos**: para transferencias por primera vez o transferencias dentro de las 24 horas posteriores a la primera transferencia, las instituciones aplican límites más estrictos.
3. **Montos máximos de transferencia**: nos aseguramos de que el pago no exceda el monto máximo de transferencia permitido para el banco especificado.

## Respuestas de error

Si una validación falla, recibirás una de las siguientes respuestas de error:

1. **Error de límite de monto máximo para nuevo contacto**: Fintoc primero verifica si el `holder_id` ha realizado una transferencia. Si no, luego verifica si el monto excede el límite de la institución.

```json theme={null}
{
  "error": {
    "type": "new_contact_error",
    "message": "The amount exceeds the maximum amount permitted for new contacts. For #{institution_name}, the maximum permissible amount is $250,000. This restriction ends at 2024-08-20T16:08:28Z",
    "code": "new_contact_maximum_amount_limit_error",
    "param": "amount",
    "doc_url": "https://docs.fintoc.com/reference/errors"
  }
}

```

2. **Error de límite de número de pagos para nuevo contacto**: Fintoc primero verifica si el `holder_id` ha realizado su primera transferencia durante el mismo día. Si lo ha hecho, luego verifica si la institución permite más de una transferencia a un nuevo contacto.

```json theme={null}

{
  "error": {
    "type": "new_contact_error",
    "message": "The maximum number of transfers for new contacts in #{institution_name} was reached. This restriction ends at 2024-08-20T16:08:28Z",
    "code": "new_contact_payment_number_limit_error",
    "param": "sender_account",
    "doc_url": "https://docs.fintoc.com/reference/errors"
  }
}

```

3. **Error de límite de monto mínimo**: Fintoc verifica si el monto es menor que el mínimo permitido por la institución.

```json theme={null}

{
  "error": {
    "type": "amount_error",
    "message": "The amount is lower than the minimum amount permitted for payments by #{institution_name}. Please enter an amount greater than $1000.",
    "code": "minimum_amount_limit_error",
    "param": "amount",
    "doc_url": "https://docs.fintoc.com/reference/errors"
  }
}

```

4. **Error de límite de monto máximo**: Fintoc verifica si el monto es menor que el mínimo permitido por la institución.

```json theme={null}

{
  "error": {
    "type": "amount_error",
    "message": "The amount exceeds the maximum amount permitted for payments by #{institution_name}. Please enter an amount less than $70000000.",
    "code": "maximum_amount_limit_error",
    "param": "amount",
    "doc_url": "https://docs.fintoc.com/reference/errors"
  }
}

```

## Buenas prácticas

1. Incluye siempre la información de `sender_account` al crear una Checkout Session para garantizar las validaciones más precisas.
2. Maneja las respuestas de error de forma elegante en tu aplicación, proporcionando retroalimentación clara a tus usuarios sobre por qué no se pudo procesar un pago.
3. Realiza ajustes a tu orden para que los usuarios puedan pagar. Estos pueden ser cambiar el monto del pago si es posible o configurar recordatorios para pagos futuros.
