# CONCURRENT_MODIFICATION

The resource was modified by another operation. Please retry.

<Callout type="info">
**Category:** [General](/errors/category/shared)
</Callout>

| | |
|---|---|
| HTTP status | `409` Conflict |
| Retry | Yes, unchanged |

## When it happens

Another request changed the same resource while yours was being processed, so yours was rolled back and nothing of it was applied.

## How to fix it

Retry the same request after a short delay: the `409` released your `Idempotency-Key`, so the same key runs it again. If you rebuild the body from the resource's current state first, send it under a new key. On issue and void the conflict is already an answer — another request is issuing or voiding that invoice — so read the invoice instead of retrying.

## Retry

Retry the same request unchanged, with the same `Idempotency-Key` if you sent one. Wait first, and honour the `Retry-After` header when the response carries it.

## Returned by

The operations where this code is most likely. The list is not exhaustive.

- [`POST /v1/companies/{company_id}/invoices/{invoice_id}/issue`](/invoices/issueCompanyInvoice)
- [`POST /v1/companies/{company_id}/invoices/{invoice_id}/void`](/invoices/voidCompanyInvoice)
- [`PATCH /v1/companies/{company_id}/customers/{customer_id}`](/customers/patchCompanyCustomer)
- [`PATCH /v1/companies/{company_id}/products/{product_id}`](/products/patchCompanyProduct)

## Example response

When this error occurs, the API answers `409` Conflict with a JSON body of this shape:

```json
{
  "type": "https://docs.beel.es/errors/CONCURRENT_MODIFICATION",
  "title": "CONCURRENT_MODIFICATION",
  "detail": "The resource was modified by another operation. Please retry.",
  "instance": "/v1/<resource>",
  "errors": [],
  "success": false,
  "error": {
    "code": "CONCURRENT_MODIFICATION",
    "message": "The resource was modified by another operation. Please retry.",
    "details": {}
  },
  "meta": {
    "timestamp": "2026-05-21T10:00:00Z",
    "request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
  }
}
```

The `type` URI is stable and always resolves to this page.

## Message

<Tabs items={["English", "Spanish", "Catalan"]}>
  <Tab value="English">{"The resource was modified by another operation. Please retry."}</Tab>
  <Tab value="Spanish">{"El recurso fue modificado por otra operación. Por favor, reintente."}</Tab>
  <Tab value="Catalan">{"El recurs va ser modificat per una altra operació. Si us plau, reintenteu."}</Tab>
</Tabs>

Send the request with `Accept-Language: <es|en|ca>` to receive the message in your preferred language.

## Other errors in this category

<div className="grid grid-cols-2 gap-3 not-prose">
  <Card title="AUTOMATIC_EMAIL_CONFIG_INVALID" description="For automatic sending, you must provide an email configuration or a client with email" href="/errors/AUTOMATIC_EMAIL_CONFIG_INVALID" />
  <Card title="BAD_REQUEST" description="The provided data is not valid." href="/errors/BAD_REQUEST" />
  <Card title="BUSINESS_RULE_VIOLATION" description="The operation breaks a business rule." href="/errors/BUSINESS_RULE_VIOLATION" />
  <Card title="CITY_EMPTY" description="City cannot be empty" href="/errors/CITY_EMPTY" />
  <Card title="CITY_MAX_LENGTH" description="City cannot exceed ‹value› characters" href="/errors/CITY_MAX_LENGTH" />
</div>

## Keep exploring

<div className="grid grid-cols-2 gap-3 not-prose">
  <Card title="All General errors" description="Every code in this category in one table." href="/errors/category/shared" />
  <Card title="Error reference home" description="Browse every category or jump to the handling guide." href="/errors" />
</div>

---

Full OpenAPI spec: https://docs.beel.es/api/openapi