> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tryaeris.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# State transition rejected (CONFLICT)

> The target is already in the state the request wants to move it to.

## What it means

The caller asked Aeris to change the state of a resource (publish, pause, cancel) but the resource is already in that terminal state. Publishing a published campaign, pausing an already-paused ad group, cancelling a cancelled subscription — all surface as `CONFLICT`.

Not retryable. From the client's perspective, the desired state is already true — in many cases you can treat this as a success.

## How to fix

* Read the resource's current state first, or treat `CONFLICT` on a state-change tool as a benign no-op.
* If your workflow is deterministic ("apply this plan"), collapse `CONFLICT` responses into the success branch instead of surfacing them to the user.

## Response envelope

```json theme={"dark"}
{
  "ok": false,
  "error_envelope": {
    "code": "CONFLICT",
    "message": "The target is already in the requested state.",
    "docs_url": "https://tryaeris.ai/docs/mcp/errors/conflict",
    "retryable": false,
    "retry_after_ms": null,
    "details": {}
  }
}
```

`details` is empty by default; a handler may add resource-specific context.

## Related

* [`IDEMPOTENCY_CONFLICT`](/mcp/errors/idempotency-conflict) — also 409, but about idempotency bookkeeping rather than resource state.
* [`NOT_FOUND`](/mcp/errors/not-found) — for state changes on a resource that does not exist.
