HTTP status codes / 4xx — Client errors
409 Conflict
The request clashes with the current state of the resource.
What it means
State conflict: duplicate unique value, concurrent edit (version/ETag mismatch), or an operation the resource’s lifecycle does not allow right now. The body should say which constraint was violated.
Common causes
- Duplicate unique value (email/username already exists)
- Optimistic-lock version/ETag mismatch — someone edited first
- State machine violation (cancelling an already-shipped order)
Reproduce it in cURL
curl -i https://httpbin.org/status/409
Same request, no terminal: paste this into the cURL converter for native code, or straight into ReqPad on your phone.
How to debug it
For optimistic-locking APIs, refetch the resource, reapply your change on the fresh version and resend with the new ETag/version.
Server-side note: For lock conflicts: refetch, merge, retry with the fresh ETag/version. For duplicates: the body should say which field collides.
The fastest way to pin down a 409 is to reproduce the exact request and inspect what actually went over the wire — status, headers, timing and body, without your app code in the way. That is what an API client is for; ReqPad does it from your phone, with every request saved to history.
Related codes
400 Bad Request · 401 Unauthorized · 402 Payment Required · 403 Forbidden · 404 Not Found · 405 Method Not Allowed — or the full reference.
Reproduce that 409 in 10 seconds.
Build the request, send it, read status + headers + timing — on your iPhone. Free to start.