The request conflicts with the current state of the target resource.
The request could not be completed because it conflicts with the current state of the resource on the server. This typically happens when two clients try to modify the same resource simultaneously, or when an update is based on an outdated version of the data.
A 409 Conflict occurs when the server detects that fulfilling the request would create an inconsistent or invalid state. The most common scenario is concurrent editing: two users fetch the same document, both make changes, and the second save attempt conflicts with the first.
Unlike a 400 Bad Request (malformed syntax) or a 403 Forbidden (authorization issue), a 409 means the request itself is valid but cannot be applied given the resource's current state.
If-Match ETag doesn't match the current resource versionPlatform-Specific Notes:
Node.js Common in REST APIs using Mongoose or Sequelize with optimistic locking. Check __v (Mongoose) or version fields.
Nginx Does not generate 409 natively. Proxied from your application backend when conflict detection logic triggers.
Apache WebDAV module returns 409 when creating a resource in a non-existent collection or when lock conflicts occur.
# Client tries to update a resource with a stale ETag PUT /api/documents/42 HTTP/1.1 Host: api.example.com Content-Type: application/json If-Match: "v3-abc123" {"title": "Updated Title", "content": "New content"} # Server Response (resource was already modified to v4) HTTP/1.1 409 Conflict Content-Type: application/json ETag: "v4-def456" { "error": "Conflict", "message": "Resource was modified by another client. Fetch the latest version and retry.", "current_version": "v4-def456", "your_version": "v3-abc123", "statusCode": 409 }
If-Match or If-Unmodified-Since) and the precondition evaluated to false. Use 409 when the conflict is inherent to the operation itself, and 412 when conditional request headers specifically fail their check.If-Match header. When versions don't match, return 409 with the current version so the client can fetch, merge, and retry. This pattern prevents silent data overwrites without requiring pessimistic locks.Detect conflict errors, broken endpoints, and misconfigurations across your website automatically.
Start Free Scan