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

# Solicitudes idempotentes

> Cómo reintentar de forma segura las solicitudes POST a la API de Fintoc usando el header Idempotency-Key para evitar duplicar cargos, pagos o transferencias.

La API de Fintoc admite solicitudes idempotentes. Puedes reintentar una solicitud idempotente sin ejecutar la misma operación dos veces. Usa la idempotencia en solicitudes de creación de recursos que podrías reintentar después de un error de red. Algunos ejemplos son los [cargos](/es/api/direct-debit-legacy/charges/charge-object), las [intenciones de pago](/es/api/payments-api/payment-intents/payment-intents-object) y las [transferencias](/es/api/transfers-api/transfers/transfers-create).

Si ocurre un error de conexión después de enviar una solicitud idempotente, puedes reintentarla sin crear un segundo objeto.

Para realizar una solicitud idempotente, incluye el encabezado `Idempotency-Key: <idempotency-key-value>`.

Una clave de idempotencia es un valor único que genera tu cliente. Fintoc usa esta clave para reconocer los reintentos de una misma solicitud. Usa UUID de versión 4 o cadenas aleatorias con suficiente entropía para evitar colisiones. Las claves de idempotencia pueden contener hasta 255 caracteres.

Fintoc guarda el código de estado y el cuerpo de la respuesta de la primera solicitud para cada clave de idempotencia, tanto si la solicitud tiene éxito como si falla. Las solicitudes posteriores con la misma clave devuelven el resultado guardado, incluidos los errores `4xx` y `5xx`.

<Info>
  **Autenticación necesaria**

  Fintoc no guarda un resultado idempotente cuando falla la autenticación porque la solicitud no llega al endpoint de la API.
</Info>

En cada reintento, la capa de idempotencia compara los parámetros de la solicitud con los parámetros originales. Fintoc devuelve un error si los parámetros son diferentes.

Fintoc puede eliminar automáticamente las claves de idempotencia cuando tienen al menos 24 horas. Si reutilizas una clave después de que Fintoc elimina el resultado original, la API procesa la solicitud como nueva.

Todas las solicitudes `POST` aceptan claves de idempotencia. Enviar claves de idempotencia en solicitudes `GET` y `DELETE` no tiene efecto porque estas solicitudes son idempotentes por definición.

Los siguientes ejemplos crean un cargo con una clave de idempotencia. Puedes reintentar la solicitud sin crear un cargo duplicado.

```bash theme={null}
curl --request POST "https://api.fintoc.com/v1/charges" \
--header 'Authorization: sk_test_0000000000000000' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: 31a0dd22-38e4-4392-81e1-aa3a2018b48d' \
--data-raw '{
  "subscription_id": "sub_000000",
  "amount": 1000,
  "currency": "clp",
  "metadata": {
    "customer": "123456"
  }
}'
```

```javascript theme={null}
// First install our Node SDK (https://github.com/fintoc-com/fintoc-node)
// $ npm install fintoc

const { Fintoc } = require('fintoc');

const fintoc = Fintoc('your_api_key')
await fintoc.charges.create({
  idempotency_key: '31a0dd22-38e4-4392-81e1-aa3a2018b48d',
  subscription_id: 'sub_000000',
  amount: 1000,
  currency: 'clp',
  metadata: {
    customer: '123456'
  },
});
```

```python theme={null}
# First install our Python SDK (https://github.com/fintoc-com/fintoc-python)
# $ pip install fintoc

from fintoc import Fintoc

client = Fintoc("your_api_key")
client.charges.create(
    idempotency_key="31a0dd22-38e4-4392-81e1-aa3a2018b48d",
    subscription_id="sub_000000",
    amount=1000,
    currency="clp",
    metadata={"customer": "123456"},
)
```
