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

# idempotency_conflict

> 409 conflict — this Idempotency-Key was already used with a different body.

**HTTP 409 · type `conflict`.** Within the 24-hour idempotency window (scoped to the
API key), this `Idempotency-Key` was already used for a request with a **different
body**. The original request stands; this one did nothing and charged nothing.

For contrast: same key + **same** body is a replay — it returns the original response
with `fn-idempotent-replay: true` and never bills twice. The dedupe lives in the
ledger, not just the HTTP layer: a replayed spending POST can never create a second
reservation.

## The shape

```json theme={null}
{
  "error": {
    "type": "conflict",
    "code": "idempotency_conflict",
    "message": "Idempotency-Key was used 4 minutes ago with a different request body.",
    "doc_url": "https://docs.fiveninelabs.com/errors/idempotency_conflict",
    "request_id": "req_4hh27p",
    "original_request_id": "req_9tt41w"
  }
}
```

`original_request_id` identifies the request that claimed the key — findable in the
dashboard's API log.

## How to fix

* If this is a genuinely new request, give it a fresh `Idempotency-Key` (UUIDs
  recommended).
* **The classic cause is confirming a proposal with the original turn's key.** The
  confirm re-POSTs the turn with `"confirm": true` — a different body — so it needs a
  fresh key. This error firing there is the guardrail working: you got a 409, not a
  silent spend. See [Budgets and proposals](/guides/proposals).
* If you build keys deterministically (e.g. from an order id), make every distinct
  body produce a distinct key — hash the body in.

## Reproduce it

Two calls, same key, different body (works on an `fn_test_` key, \$0):

```bash theme={null}
curl https://api.fiveninelabs.com/v1/sessions \
  -H "Authorization: Bearer $FIVENINE_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: demo-conflict-1" \
  -d '{"query": "vinyl records", "max_spend_usd": 1}'

curl https://api.fiveninelabs.com/v1/sessions \
  -H "Authorization: Bearer $FIVENINE_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: demo-conflict-1" \
  -d '{"query": "espresso machines", "max_spend_usd": 1}'
```
