Skip to main content

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

{
  "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.
  • IDEMPOTENCY_CONFLICT — also 409, but about idempotency bookkeeping rather than resource state.
  • NOT_FOUND — for state changes on a resource that does not exist.