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

# Idempotencia

> Reintenta escrituras sin miedo a duplicar usando el header Idempotency-Key.

Al **crear una transacción** (`POST /v1/transactions`), un timeout o un reintento de red podrían
mandar el mismo request dos veces y **duplicar** el movimiento. Para evitarlo, manda un
**`Idempotency-Key`**.

## Cómo usarlo

Genera una clave única por operación (un UUID v4 sirve) y mándala en el header:

<CodeGroup>
  ```bash curl theme={null}
  curl https://api.finzaria.com/v1/transactions \
    -H "Authorization: Bearer $FINZARIA_API_KEY" \
    -H "Content-Type: application/json" \
    -H "Idempotency-Key: 6f9619ff-8b86-d011-b42d-00cf4fc964ff" \
    -d '{ "type": "expense", "amount": "150.50", "date": "2026-07-14", "accountId": "…" }'
  ```

  ```javascript Node.js theme={null}
  import { randomUUID } from "node:crypto"

  await fetch("https://api.finzaria.com/v1/transactions", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.FINZARIA_API_KEY}`,
      "Content-Type": "application/json",
      "Idempotency-Key": randomUUID(),
    },
    body: JSON.stringify({ type: "expense", amount: "150.50", date: "2026-07-14", accountId: "…" }),
  })
  ```
</CodeGroup>

## Comportamiento

* **Primer request** con una clave: se procesa normal y se recuerda el resultado.
* **Reintento** con la **misma** clave (mismo request): devuelve el **mismo resultado**, sin crear un
  segundo movimiento.
* Usa **una clave nueva por cada operación distinta** — reutilizarla haría que la segunda operación
  devuelva el resultado de la primera.

<Tip>
  Regla práctica: genera el `Idempotency-Key` **antes** de tu bloque de reintentos y reúsalo en todos
  los reintentos de *esa* misma operación.
</Tip>
