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

# Idempotency

> Every call that places, replaces, or protects an order carries a caller-supplied clientOrderId.

Every call that places, replaces, or protects an order carries a caller-supplied
`clientOrderId`. It is the identity of one trading intent.

The rule is simple: one intent, one id, forever.

* Mint a new id when the trader creates a new intent.
* Reuse the same id when you retry the same intent, no matter why the first attempt failed.
* Never reuse an id for a different intent.

A repeat of a used id answers `409` and the earlier order stands. That is the guarantee doing
its job: a timeout, a crashed process, or a double-clicked button can re-send the request as many
times as it likes, and the trader still gets exactly one order.

This matters most when things go wrong. If a request times out, you do not know whether the
engine received it. With a stable `clientOrderId` you do not need to know. Retry with the same
id: either it places now, or it answers `409` because it already placed. Both outcomes are
correct, and neither doubles the trader's position.

```ts theme={null}
// mint once per intent, at the moment the trader commits
const clientOrderId = crypto.randomUUID()

// every retry of this intent sends the SAME id
await placeOrder({ instrument: 'ESU6', side: 'buy', qty: 1, clientOrderId })
```
