# ORDER_ALREADY_PLACED

# ORDER_ALREADY_PLACED

A duplicate `place` request was received for an order that has already been accepted by the merchant. This is the conflict signal returned when an idempotency key matches a prior successful submission with a non-matching body, or when the underlying cart is already attached to a placed order.

*Reserved error code — not currently emitted by any endpoint. Partners may begin handling it defensively; backend will start emitting once wired in.*

## Summary

| Field | Value |
|---|---|
| HTTP status | `409` |
| `errorCategory` | `conflict` |
| `retryable` | `false` |

## When This Fires

- **`POST /v1/marketfront/orders/place`** — the supplied `Idempotency-Key` was previously used for a different request body, **or** the cart referenced has already been turned into a placed order.

A clean retry with the **same** idempotency key and the **same** body returns the original successful response, not this error. This error indicates the bodies diverged.

## Recommended Action

Do not retry. Treat the user's order as already placed:

1. Look up the prior order in your own records — the original `place` response carried the full order, and there is no partner-facing read-back endpoint. Persist the `place` response against your `Idempotency-Key` so this path is always recoverable.
2. Surface the existing order's status to the user — confirmation page, tracking link, etc.
3. If the user genuinely wants a second order, start a fresh cart (new `Idempotency-Key`).

A blind retry with the same key will continue to return `409`.

## Example

```json
{
  "type": "https://developer.gett-tech.com/errors/ORDER_ALREADY_PLACED",
  "title": "Conflict",
  "status": 409,
  "detail": "An order has already been placed for this idempotency key with a different body.",
  "instance": "/v1/marketfront/orders/place",
  "requestId": "req_abc123",
  "timestamp": "2026-04-27T14:30:00.000Z",
  "errorCode": "ORDER_ALREADY_PLACED",
  "errorCategory": "conflict",
  "retryable": false
}
```
