HTTP 409 Conflict: What It Means and When You See It
Quick Answer
HTTP 409 Conflict means the request conflicts with the current state of the server — for example, trying to create a resource that already exists.
When HTTP 409 Is Returned
HTTP 409 Conflict means the request cannot be completed because of a conflict with the current state of the resource. Common examples: creating a user with an email that already exists, updating a record with an outdated version (optimistic locking), concurrent edits to the same resource, and violating a unique constraint in the database. The response body typically explains what conflicted and how to resolve it.
Implementing 409 in APIs
Use 409 when a uniqueness constraint fails: if (await db.users.findByEmail(email)) return res.status(409).json({ error: "Email already in use" }). For optimistic locking: check the version or ETag before updating, return 409 if the record was modified by another request. The client should read the current state, resolve the conflict, and retry. Express.js: res.status(409).json({ error: "Conflict", field: "email" }).
Try the interactive tool
Convert any value instantly — no sign-up required
Frequently Asked Questions
Related Values
100
HTTP 100 Continue means the server has received the request headers and the client should proceed to send the request body. It is an interim response used to inform the client to continue.
101
HTTP 101 Switching Protocols indicates the server is switching to the protocol specified in the Upgrade header field. Commonly used when upgrading to WebSocket connections.
200
HTTP 200 OK is the standard success response. The request has succeeded and the server has returned the requested resource in the response body.
201
HTTP 201 Created means the request succeeded and a new resource was created as a result. The Location header typically points to the new resource URL.