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

# Guardar el método de pago de un cliente para pagos futuros

> >-

Crea un flujo que guarde el método de pago de un cliente durante un pago o a través de una sesión de setup independiente.

Para flujos de pago donde los clientes pagan con frecuencia, como apps de transporte o delivery, puedes permitir que tus clientes guarden un método de pago para pagos futuros. Un método de pago guardado puede ser una tarjeta o una cuenta bancaria, de modo que sus siguientes pagos requieran menos pasos.

Puedes guardar el método de pago de un cliente de dos maneras:

1. **Guardar durante un pago:** crea una Checkout Session con `flow` en `payment` y `save_payment_method` en `enabled`. Tu cliente obtiene la opción de guardar el método de pago para pagos futuros.
2. **Guardar sin un pago actual:** crea una Checkout Session con `flow` en `setup` para registrar un método de pago sin procesar un pago.

## Opción 1: Guardar durante un pago (recomendado)

El cliente paga y su método de pago se guarda en un solo paso.

### Crea o elige un Customer

Cada método de pago guardado debe pertenecer a un `Customer`. Si ya tienes uno, reutiliza su `id`. De lo contrario, puedes crearlo primero con la API de Customers o enviar `customer_data` en la Checkout Session para crear el `Customer` en línea.

**Servidor**

```curl theme={null}
curl --request POST "https://api.fintoc.com/v2/customers" \
  --header "Authorization: YOUR_SECRET_API_KEY" \
  --header "Content-Type: application/json" \
  --data-raw '{
    "name": "Felipe Castro",
    "email": "jon@snow.com"
  }'
```

```javascript Node theme={null}
const { Fintoc } = require('fintoc');

const fintoc = new Fintoc('YOUR_SECRET_API_KEY');

const customer = await fintoc.customers.create({
  name: 'Felipe Castro',
  email: 'jon@snow.com'
});
```

```python theme={null}
from fintoc import Fintoc

client = Fintoc('YOUR_SECRET_API_KEY')

customer = client.customers.create(
    name='Felipe Castro',
    email='jon@snow.com'
)
```

Fintoc responde con el `Customer` creado:

```json theme={null}
{
  "id": "cus_3B2bODrQFje7ZVkT69xyaTSDwXQ",
  "object": "customer",
  "address": null,
  "created_at": "2026-03-16T19:41:17Z",
  "email": "jon@snow.com",
  "metadata": {},
  "mode": "live",
  "name": "Felipe Castro",
  "phone": null,
  "tax_id": null,
  "updated_at": "2026-03-16T19:41:17Z"
}
```

Guarda el `id` devuelto (por ejemplo, `cus_3B2bODrQFje7ZVkT69xyaTSDwXQ`).

Si ya existe un `Customer` con el mismo `tax_id`, la solicitud devuelve un error `409 Conflict`. Para reutilizar un `Customer` existente, envía su `id` en `customer` en lugar de `customer_data`.

### Crea una Checkout Session con `save_payment_method`

Crea una Checkout Session con el ID del `customer`, `flow` en `payment` y `save_payment_method` en `enabled`. Fintoc procesa el pago y, si tu cliente elige guardar el método de pago durante el flujo, almacena sus credenciales para uso futuro.

**Servidor**

```curl theme={null}
curl --request POST "https://api.fintoc.com/v2/checkout_sessions" \
  --header "Authorization: YOUR_SECRET_API_KEY" \
  --header "Content-Type: application/json" \
  --data-raw '{
    "flow": "payment",
    "customer": "cus_3B2bODrQFje7ZVkT69xyaTSDwXQ",
    "amount": 5000,
    "currency": "CLP",
    "success_url": "https://merchant.com/success",
    "cancel_url": "https://merchant.com/cancel",
    "save_payment_method": "enabled",
    "payment_method_types": ["bank_transfer"]
  }'
```

```javascript Node theme={null}
const { Fintoc } = require('fintoc');

const fintoc = new Fintoc('YOUR_SECRET_API_KEY');

const checkoutSession = await fintoc.checkoutSessions.create({
  flow: 'payment',
  customer: 'cus_3B2bODrQFje7ZVkT69xyaTSDwXQ',
  amount: 5000,
  currency: 'CLP',
  success_url: 'https://merchant.com/success',
  cancel_url: 'https://merchant.com/cancel',
  save_payment_method: 'enabled',
  payment_method_types: ['bank_transfer']
});
```

```python theme={null}
from fintoc import Fintoc

client = Fintoc('YOUR_SECRET_API_KEY')

checkout_session = client.checkout_sessions.create(
    flow='payment',
    customer='cus_3B2bODrQFje7ZVkT69xyaTSDwXQ',
    amount=5000,
    currency='CLP',
    success_url='https://merchant.com/success',
    cancel_url='https://merchant.com/cancel',
    save_payment_method='enabled',
    payment_method_types=['bank_transfer']
)
```

Fintoc responde con el `CheckoutSession` creado, incluyendo su `redirect_url`:

```json theme={null}
{
  "id": "cs_VvO7kpUMWlq2N10B",
  "object": "checkout_session",
  "flow": "payment",
  "status": "created",
  "amount": 5000,
  "currency": "CLP",
  "customer": {
    "id": "cus_3B2bODrQFje7ZVkT69xyaTSDwXQ",
    "object": "customer",
    "email": "jon@snow.com",
    "metadata": {},
    "name": "Felipe Castro",
    "tax_id": null
  },
  "save_payment_method": "enabled",
  "payment_method_types": ["bank_transfer"],
  "success_url": "https://merchant.com/success",
  "cancel_url": "https://merchant.com/cancel",
  "redirect_url": "https://pay.fintoc.com/checkout/cs_VvO7kpUMWlq2N10B",
  "metadata": {}
}
```

| **Parámetro**            | **Ejemplo**                                                | **Descripción**                                                                                                                                                                                                                                                                                                                    |
| ------------------------ | ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `flow`                   | `payment`                                                  | **Requerido.** Flujo que ejecuta la sesión. Uno de `payment`, `setup` o `subscription`.                                                                                                                                                                                                                                            |
| `amount`                 | `5000`                                                     | **Requerido.** Un entero positivo que representa el monto a cobrar en la unidad menor de la moneda. CLP no tiene unidad menor, por lo que `5000` cobra \$5000 CLP.                                                                                                                                                                 |
| `currency`               | `CLP`                                                      | **Requerido.** Código ISO 4217 de tres letras de la moneda. Solo `CLP` soporta guardar un método de pago.                                                                                                                                                                                                                          |
| `success_url`            | `https://merchant.com/success`                             | **Requerido.** URL a la que Fintoc redirige a tu cliente después de un pago exitoso.                                                                                                                                                                                                                                               |
| `cancel_url`             | `https://merchant.com/cancel`                              | **Requerido.** URL a la que Fintoc redirige a tu cliente si cancela el pago y vuelve a tu sitio.                                                                                                                                                                                                                                   |
| `customer`               | `"cus_3B2bODrQFje7ZVkT69xyaTSDwXQ"`                        | **Requerido si no hay `customer_data`.** ID de un `Customer` existente.                                                                                                                                                                                                                                                            |
| `customer_data`          | `{"email": "jon@snow.com"}`                                | **Requerido si no hay `customer`.** Datos para crear un customer en línea. Envía al menos uno de `email` o `tax_id`.<br /><br />Si ya existe un `Customer` con el mismo `tax_id`, la solicitud devuelve un error `409 Conflict`. Para reutilizar un `Customer` existente, envía su `id` en `customer` en lugar de `customer_data`. |
| `metadata`               | `{"order": "987654321"}`                                   | Conjunto de pares clave-valor que puedes adjuntar a un objeto. Útil para almacenar información adicional sobre el objeto en un formato estructurado.                                                                                                                                                                               |
| `payment_method_types`   | `["bank_transfer"]`                                        | **Requerido.** Tipos de métodos de pago disponibles para la sesión. Para el flujo `payment`, uno o más de `bank_transfer` o `card`.<br /><br />Solo `bank_transfer` soporta guardar un método de pago mientras se cobra un pago.                                                                                                   |
| `payment_method_options` | Objeto `bank_transfer` con información de `sender_account` | Opciones para un tipo de método de pago específico, como preseleccionar un banco específico. Consulta el [ejemplo completo](/es/reference/payments-api/checkout-sessions/checkout-sessions-create) en la Referencia de la API.                                                                                                     |
| `save_payment_method`    | `enabled`                                                  | Si tu cliente obtiene la opción de guardar el método de pago durante el flujo. Uno de `enabled` o `disabled`. Por defecto `disabled`.                                                                                                                                                                                              |

### Redirige al cliente

Usa el `redirect_url` devuelto en la respuesta para redirigir a tu cliente a la página alojada por Fintoc, donde completa el pago y puede elegir guardar sus credenciales para pagos futuros.

**Cliente**

```javascript theme={null}
window.location.assign(REDIRECT_URL_FROM_YOUR_BACKEND);
```

### Maneja los eventos posteriores al pago

Siempre usa webhooks para determinar el resultado final. Tu cliente puede cerrar la pestaña, perder conexión o nunca llegar a tu `success_url`.

#### Eventos de Checkout Session

* `checkout_session.finished`: Enviado cuando una Checkout Session alcanza un estado final exitoso. El evento incluye el resultado del pago y, si tu cliente optó por hacerlo, el `payment_method` guardado.

  Ejemplo del objeto `data`:

  ```json theme={null}
  {
      "id": "cs_VvO7kpUMWlq2N10B",
      "flow": "payment",
      "mode": "test",
      "amount": 5000,
      "object": "checkout_session",
      "status": "finished",
      "currency": "CLP",
      "customer": {
          "id": "cus_3B2bODrQFje7ZVkT69xyaTSDwXQ",
          "mode": "test",
          "name": null,
          "email": "jon@snow.com",
          "phone": null,
          "object": "customer",
          "tax_id": {
              "type": "cl_rut",
              "value": "11.111.111-1"
          },
          "address": null,
          "metadata": {},
          "created_at": "2026-03-16T19:41:17Z"
      },
      "metadata": {},
      "cancel_url": "https://merchant.com/cancel",
      "created_at": "2026-03-30T20:47:41Z",
      "expires_at": "2026-03-31T20:47:41Z",
      "line_items": null,
      "success_url": "https://merchant.com/success",
      "redirect_url": "https://pay.fintoc.com/checkout/cs_VvO7kpUMWlq2N10B",
      "setup_intent": null,
      "subscription": null,
      "session_token": "cs_VvO7kpUMWlq2N10B_sec_UuSuPYRuEQTcWKXT6ba9LDTh",
      "customer_email": null,
      "payment_method": "pm_3BgHP7aSqsqLiEcotFQfyx7Of8u",
      "business_profile": null,
      "payment_resource": {
          "payment_intent": {
              "id": "pi_3BgHFvey4Qj4QZvTTZwyLL9OfSA",
              "mode": "test",
              "amount": 5000,
              "object": "payment_intent",
              "status": "succeeded",
              "currency": "CLP",
              "metadata": {},
              "created_at": "2026-03-30T20:48:12Z",
              "expires_at": null,
              "next_action": null,
              "error_reason": null,
              "payment_type": "bank_transfer",
              "reference_id": "575930",
              "widget_token": null,
              "customer_email": null,
              "sender_account": {
                  "type": "checking_account",
                  "number": "19831940978",
                  "holder_id": "11.111.111-1",
                  "institution_id": "cl_banco_falabella"
              },
              "business_profile": null,
              "transaction_date": "2026-03-30T20:49:00Z",
              "recipient_account": {
                  "type": "checking_account",
                  "number": "922358017",
                  "holder_id": "11.111.111-1",
                  "institution_id": "cl_banco_security"
              },
              "payment_type_options": {}
          }
      },
      "save_payment_method": "enabled",
      "payment_method_types": [
          "bank_transfer"
      ],
      "payment_method_options": {}
  }
  ```

#### Eventos de Payment Method

Si tu cliente eligió guardar el método, Fintoc también envía un evento `payment_method.activated`. El campo `data` del evento contiene un `PaymentMethod` como este:

```json theme={null}
{
  "id": "pm_3BgHP7aSqsqLiEcotFQfyx7Of8u",
  "object": "payment_method",
  "card": null, 
  "created_at": "2026-03-30T20:49:12Z",
  "customer": "cus_3B2bODrQFje7ZVkT69xyaTSDwXQ",
  "mode": "test",
  "metadata": {},
  "bank_transfer": {
    "account_holder_id": "11.111.111-1",
    "account_number": "19831940978",
    "account_type": "checking_account",
    "institution_id": "cl_banco_falabella",
    "status": "active"
  },
  "type": "bank_transfer"
}
```

Suscríbete a los siguientes eventos posteriores a la sesión:

| **Evento**                  | **Descripción**                                 | **Acción recomendada**                                                               |
| --------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------ |
| `checkout_session.finished` | Sesión completada exitosamente.                 | Guarda `customer` + `payment_method`. Actualiza tus registros según el estado final. |
| `checkout_session.expired`  | La sesión expiró antes de completarse.          | Permite a tu cliente reintentar.                                                     |
| `payment_method.activated`  | El método queda disponible para cobros futuros. | Habilita experiencias de "pagar con método guardado" para ese cliente.               |
| `payment_intent.succeeded`  | Pago exitoso.                                   | Cumple la orden.                                                                     |
| `payment_intent.failed`     | Pago fallido.                                   | Pide a tu cliente reintentar o usar otro método de pago.                             |

***

## Opción 2: Guarda un método sin un pago actual

### Crea una sesión de Setup

El objeto [**Checkout Session**](/es/reference/payments-api/checkout-sessions/checkout-session-object) representa tu intención de guardar un método de pago sin procesar un pago.

Usando tu [**Secret Key**](/es/docs/home/api-keys), crea una Checkout Session desde tu backend con `flow` en `setup`:

**Servidor**

```curl theme={null}
curl --request POST "https://api.fintoc.com/v2/checkout_sessions" \
  --header "Authorization: YOUR_SECRET_API_KEY" \
  --header "Content-Type: application/json" \
  --data-raw '{
    "flow": "setup",
    "currency": "CLP",
    "success_url": "https://merchant.com/success",
    "cancel_url": "https://merchant.com/cancel",
    "customer_data": {
      "email": "jon@snow.com"
    },
    "metadata": {}
  }'
```

```javascript Node theme={null}
const { Fintoc } = require('fintoc');

const fintoc = new Fintoc('YOUR_SECRET_API_KEY');

const checkoutSession = await fintoc.checkoutSessions.create({
  flow: 'setup',
  currency: 'CLP',
  success_url: 'https://merchant.com/success',
  cancel_url: 'https://merchant.com/cancel',
  customer_data: {
    email: 'jon@snow.com'
  },
  metadata: {}
});
```

```python theme={null}
from fintoc import Fintoc

client = Fintoc('YOUR_SECRET_API_KEY')

checkout_session = client.checkout_sessions.create(
    flow='setup',
    currency='CLP',
    success_url='https://merchant.com/success',
    cancel_url='https://merchant.com/cancel',
    customer_data={
        'email': 'jon@snow.com'
    },
    metadata={}
)
```

Fintoc responde con el `CheckoutSession` creado, incluyendo su `redirect_url`:

```json theme={null}
{
  "id": "cs_VvO7kpUMWlq2N10B",
  "object": "checkout_session",
  "flow": "setup",
  "status": "created",
  "currency": "CLP",
  "customer": {
    "id": "cus_3B2bODrQFje7ZVkT69xyaTSDwXQ",
    "object": "customer",
    "email": "jon@snow.com",
    "metadata": {},
    "name": null,
    "tax_id": null
  },
  "success_url": "https://merchant.com/success",
  "cancel_url": "https://merchant.com/cancel",
  "redirect_url": "https://pay.fintoc.com/checkout/cs_VvO7kpUMWlq2N10B",
  "metadata": {}
}
```

| **Parámetro**            | **Ejemplo**                                      | **Descripción**                                                                                                                                                                                                                                                                                                                                                             |
| ------------------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `flow`                   | `setup`                                          | **Requerido.** Flujo que ejecuta la sesión. Uno de `payment`, `setup` o `subscription`.                                                                                                                                                                                                                                                                                     |
| `currency`               | `CLP`                                            | **Requerido.** Código ISO 4217 de tres letras de la moneda. Solo `CLP` soporta el flujo `setup`.                                                                                                                                                                                                                                                                            |
| `success_url`            | `https://merchant.com/success`                   | **Requerido.** URL a la que Fintoc redirige a tu cliente después de un setup exitoso.                                                                                                                                                                                                                                                                                       |
| `cancel_url`             | `https://merchant.com/cancel`                    | **Requerido.** URL a la que Fintoc redirige a tu cliente si cancela el setup y vuelve a tu sitio.                                                                                                                                                                                                                                                                           |
| `customer`               | `"cus_3B2bODrQFje7ZVkT69xyaTSDwXQ"`              | **Requerido si no hay `customer_data`.** ID de un `Customer` existente.                                                                                                                                                                                                                                                                                                     |
| `customer_data`          | `{"email": "jon@snow.com"}`                      | **Requerido si no hay `customer`.** Datos para crear un customer en línea. Envía al menos uno de `email` o `tax_id`.<br /><br />Si ya existe un `Customer` con el mismo `tax_id`, la solicitud devuelve un error `409 Conflict`. Para reutilizar un `Customer` existente, envía su `id` en `customer` en lugar de `customer_data`.                                          |
| `metadata`               | `{"order": "987654321"}`                         | Conjunto de pares clave-valor que puedes adjuntar a un objeto. Útil para almacenar información adicional sobre el objeto en un formato estructurado.                                                                                                                                                                                                                        |
| `payment_method_types`   | `["pac", "direct_debit", "card"]`                | Tipos de métodos de pago disponibles para la sesión. Para el flujo `setup`, uno o más de `pac`, `direct_debit` o `card`. Envía este parámetro si tu cliente ya seleccionó el método en tu sitio.                                                                                                                                                                            |
| `payment_method_options` | Objeto `pac` con información de `sender_account` | Opciones para un tipo de método de pago específico, como un banco preseleccionado o restricciones de enrolamiento. Para `card`, restringe `kinds` (`credit`, `debit`); para `pac`, restringe `sender_account.types` (`checking_account`). Consulta el [ejemplo completo](/es/reference/payments-api/checkout-sessions/checkout-sessions-create) en la Referencia de la API. |

<Info>
  **Envía `payment_method_options` para preseleccionar un banco para tu cliente**

  Puedes crear la Checkout Session con un banco específico enviando su `institution_id` dentro de `sender_account` en `payment_method_options`. Tu cliente entonces solo podrá guardar una cuenta bancaria de esa institución. También puedes enviar el tax ID chileno (RUT) del cliente como `holder_id`, para que el flujo lo prellene.

  Recomendamos esta opción cuando tu cliente selecciona su banco en tu flujo antes de que crees la sesión, para que no tenga que seleccionar un banco dos veces.

  También puedes restringir el enrolamiento por tipo de tarjeta o tipo de cuenta. Envía `kinds` (`credit`, `debit`) dentro de `payment_method_options.card` para limitar los tipos de tarjeta. Envía `types` (`checking_account`) dentro de `payment_method_options.pac.sender_account` para limitar los tipos de cuenta. Para no aplicar ninguna restricción, omite la opción en lugar de enviar un arreglo vacío: un arreglo vacío no permite nada.
</Info>

### Redirige al cliente

Después de crear una sesión, recibes un `redirect_url` que usas para redirigir a tu cliente y que pueda registrar su cuenta bancaria como método de pago guardado.

**Cliente**

```javascript theme={null}
window.location.assign(REDIRECT_URL_FROM_YOUR_BACKEND);
```

<Frame>
  <img src="https://mintcdn.com/fintoc-49b8bee8/SkvJJ-DZ5D4yC6tQ/images/d511cfe7c0e86a1d7abadf52209a6f4037ba3c73ce2d6d80768fe031d3e7a24e-setup_1.png?fit=max&auto=format&n=SkvJJ-DZ5D4yC6tQ&q=85&s=d6b14d623a8cb97127be0bf7b1cdfd31" width="2068" height="700" data-path="images/d511cfe7c0e86a1d7abadf52209a6f4037ba3c73ce2d6d80768fe031d3e7a24e-setup_1.png" />
</Frame>

***

### Maneja los eventos posteriores a la sesión

Suscríbete a `checkout_session.finished`, `checkout_session.expired` y `payment_method.activated` para el flujo independiente de `setup`.

***

## Crea una sesión de pago con un método de pago guardado

Si tu cliente tiene un método de pago `bank_transfer` guardado, puedes crear una Checkout Session de pago que use el método guardado. Fintoc redirige a tu cliente directamente al paso de aprobación bancaria, sin pedirle que inicie sesión con sus credenciales bancarias.

**Servidor**

```curl theme={null}
curl --request POST "https://api.fintoc.com/v2/checkout_sessions" \
  --header "Authorization: YOUR_SECRET_API_KEY" \
  --header "Content-Type: application/json" \
  --data-raw '{
    "amount": 100000,
    "currency": "CLP",
    "flow": "payment",
    "success_url": "https://merchant.com/success",
    "cancel_url": "https://merchant.com/cancel",
    "customer": "cus_3B2bODrQFje7ZVkT69xyaTSDwXQ",
    "payment_method": "pm_1NkL7QKs215JZ1LyW4c1m9Ut",
    "payment_method_types": [
      "bank_transfer"
    ]
  }'
```

```javascript Node theme={null}
const { Fintoc } = require('fintoc');

const fintoc = new Fintoc('YOUR_SECRET_API_KEY');

const checkoutSession = await fintoc.checkoutSessions.create({
  amount: 100000,
  currency: 'CLP',
  flow: 'payment',
  success_url: 'https://merchant.com/success',
  cancel_url: 'https://merchant.com/cancel',
  customer: 'cus_3B2bODrQFje7ZVkT69xyaTSDwXQ',
  payment_method: 'pm_1NkL7QKs215JZ1LyW4c1m9Ut',
  payment_method_types: ['bank_transfer']
});
```

```python theme={null}
from fintoc import Fintoc

client = Fintoc('YOUR_SECRET_API_KEY')

checkout_session = client.checkout_sessions.create(
    amount=100000,
    currency='CLP',
    flow='payment',
    success_url='https://merchant.com/success',
    cancel_url='https://merchant.com/cancel',
    customer='cus_3B2bODrQFje7ZVkT69xyaTSDwXQ',
    payment_method='pm_1NkL7QKs215JZ1LyW4c1m9Ut',
    payment_method_types=['bank_transfer']
)
```

Fintoc responde con el `CheckoutSession` creado, incluyendo su `redirect_url`:

```json theme={null}
{
  "id": "cs_VvO7kpUMWlq2N10B",
  "object": "checkout_session",
  "flow": "payment",
  "status": "created",
  "amount": 100000,
  "currency": "CLP",
  "customer": {
    "id": "cus_3B2bODrQFje7ZVkT69xyaTSDwXQ",
    "object": "customer",
    "email": "jon@snow.com",
    "metadata": {},
    "name": "Felipe Castro",
    "tax_id": null
  },
  "payment_method": "pm_1NkL7QKs215JZ1LyW4c1m9Ut",
  "payment_method_types": ["bank_transfer"],
  "success_url": "https://merchant.com/success",
  "cancel_url": "https://merchant.com/cancel",
  "redirect_url": "https://pay.fintoc.com/checkout/cs_VvO7kpUMWlq2N10B",
  "metadata": {}
}
```

### Redirige al cliente

Usa el `redirect_url` para redirigir a tu cliente a la página alojada por Fintoc, donde va directamente al paso de aprobación bancaria sin iniciar sesión con sus credenciales bancarias.

**Cliente**

```javascript theme={null}
window.location.assign(REDIRECT_URL_FROM_YOUR_BACKEND);
```

### Maneja los eventos posteriores al pago

Después del pago, Fintoc envía `checkout_session.finished`, `checkout_session.expired`, `payment_intent.succeeded`, o `payment_intent.failed`, según el resultado:

| **Evento**                  | **Descripción**                        | **Acción recomendada**                                                               |
| --------------------------- | -------------------------------------- | ------------------------------------------------------------------------------------ |
| `checkout_session.finished` | Sesión completada exitosamente.        | Guarda `customer` + `payment_method`. Actualiza tus registros según el estado final. |
| `checkout_session.expired`  | La sesión expiró antes de completarse. | Permite a tu cliente reintentar.                                                     |
| `payment_intent.succeeded`  | Pago exitoso.                          | Cumple la orden.                                                                     |
| `payment_intent.failed`     | Pago fallido.                          | Pide a tu cliente reintentar o usar otro método de pago.                             |

## Prueba tu integración

Usando tu [**Secret Key de modo de prueba**](/es/docs/resources/test-mode), puedes crear Checkout Sessions que simulan resultados exitosos y fallidos sin mover dinero.

Esto te permite validar tu flujo completo de setup y pago de extremo a extremo:

* Tus solicitudes a la API del backend (creación de sesiones y manejo de respuestas)
* El flujo de redirección desde tu frontend al `redirect_url` y de vuelta al `success_url` o `cancel_url` después del setup o pago
* Los webhooks para eventos posteriores a la sesión que guardan el `customer`, el `payment_method` y el resultado del pago
  * Después de un setup o pago exitoso que guarda un `payment_method`, prueba creando una sesión de pago con el método guardado del cliente

Para aprender cómo disparar escenarios específicos, usa las **credenciales de prueba** y valores especiales de prueba descritos en nuestra [**guía de pruebas**](/es/docs/payments/payment-initiation-test-your-integration).

Para un flujo `bank_transfer` en modo de prueba, abre el `redirect_url`, selecciona el banco de prueba e inicia sesión con las credenciales de prueba `user_good` y `pass_good`. Esta combinación simula un registro y pago exitosos.

Después de una ejecución exitosa, Fintoc envía un evento `checkout_session.finished` con `status` en `finished`:

```json theme={null}
{
  "id": "cs_VvO7kpUMWlq2N10B",
  "object": "checkout_session",
  "flow": "payment",
  "mode": "test",
  "status": "finished",
  "customer": {
    "id": "cus_3B2bODrQFje7ZVkT69xyaTSDwXQ",
    "object": "customer",
    "email": "jon@snow.com",
    "metadata": {},
    "name": "Felipe Castro",
    "tax_id": null
  },
  "payment_method": "pm_3BgHP7aSqsqLiEcotFQfyx7Of8u"
}
```

Si tu cliente optó por hacerlo, Fintoc también envía un evento `payment_method.activated` con `status` en `active`:

```json theme={null}
{
  "id": "pm_3BgHP7aSqsqLiEcotFQfyx7Of8u",
  "object": "payment_method",
  "customer": "cus_3B2bODrQFje7ZVkT69xyaTSDwXQ",
  "mode": "test",
  "type": "bank_transfer",
  "bank_transfer": {
    "account_holder_id": "11.111.111-1",
    "account_number": "19831940978",
    "account_type": "checking_account",
    "institution_id": "cl_banco_falabella",
    "status": "active"
  }
}
```
