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

> Reintenta de forma segura las solicitudes POST

La API de Fintoc soporta idempotencia para reintentar solicitudes de forma segura sin ejecutar accidentalmente la misma operación dos veces. Esto puede ser muy útil al crear [Charges](/es/reference/direct-debit-legacy/charges/charge-object), [Payment Intents](/es/reference/payments-api/payment-intents/payment-intents-object), [Transfers](/es/reference/transfers-api/transfers/transfers-create) o cualquier otro recurso que quieras evitar crear dos veces debido a problemas de red.

Si ocurre un error de conexión al crear un objeto junto con una idempotency key, puedes repetir la solicitud de forma segura sin riesgo de crear un segundo objeto.

Para realizar una solicitud idempotente, agrega un header adicional `Idempotency-Key: <idempotency-key-value>` a la solicitud.

Una idempotency key es un valor único generado por el cliente que el servidor utiliza para reconocer los reintentos subsecuentes de la misma solicitud. Cómo crear claves únicas depende de ti, pero sugerimos usar UUIDs V4, u otro string aleatorio con suficiente entropía para evitar colisiones. Las idempotency keys pueden tener hasta 255 caracteres.

La idempotencia de Fintoc funciona guardando el código de estado y el cuerpo de la respuesta de la primera solicitud realizada para cualquier idempotency key, independientemente de si tuvo éxito o falló. Las solicitudes posteriores con la misma clave devuelven el mismo resultado, incluyendo errores 400/500.

<Info>
  **Se requiere autenticación**

  Si una solicitud entrante falla en la autenticación, no se guarda ningún resultado idempotente porque ningún endpoint de la API comenzó su ejecución.
</Info>

La capa de idempotencia compara los parámetros entrantes con los de la solicitud original y lanza un error a menos que sean los mismos, para evitar usos accidentales indebidos.

Las claves son elegibles para ser eliminadas automáticamente del sistema después de tener al menos 24 horas, y se genera una nueva solicitud si una clave se reutiliza después de que la original haya sido purgada.

Todas las solicitudes POST aceptan idempotency keys. Enviar idempotency keys en solicitudes GET y DELETE no tiene efecto, ya que estas solicitudes son idempotentes por definición.

A continuación puedes ver un ejemplo de creación de un charge que permite reintentar la solicitud evitando cualquier riesgo de duplicar el charge.

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

```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"},
)
```

```node 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'
  },
});
```
