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

# The API returns 409 conflict

> What a 409 means: no live experiment for a publishable key, a conflicting identity link, the 50-arm limit, a lock_timeout, or a reused idempotency key.

A `409` means the request conflicts with current state. The `error` code and the `message` say which conflict.

## `No live experiment for element`

```json theme={null}
{ "error": "conflict", "message": "No live experiment for element \"pricing_hero\" — publishable keys are serve-only; declare the element first with a secret-key decide call or POST /declare" }
```

A publishable key may only decide for an element a secret key has already declared. Run [`declare`](https://docs.trycurious.ai/guides/declare) from a setup step or your server, then the browser call succeeds. The server SDK reports this as `undeclared_element`.

## `Identity conflicts with an existing user`

```json theme={null}
{ "error": "conflict", "message": "Identity conflicts with an existing user" }
```

An `identify` call contradicts an existing link, typically an `anonymous_id` already linked to a different `user_id`. The usual cause is reusing an anonymous id after logout, so the next account on the device collides with the previous one. Mint a fresh anonymous id on logout and resolve the collision on your side; Curious does not guess. See [Identify users](https://docs.trycurious.ai/guides/identify.md#logout).

## `Experiment already has 50 active arms`

```json theme={null}
{ "error": "conflict", "message": "Experiment already has 50 active arms. Deactivate an active arm before activating another." }
```

An experiment holds at most 50 live arms. Conclude one in the dashboard before declaring another through `arms`.

## `Identity changed during selection; retry the request`

```json theme={null}
{ "error": "lock_timeout", "message": "Identity changed during selection; retry the request" }
```

The user's identity was being linked by an `identify` call while this decision was selecting an arm. This is the one retryable `409`, and the only one with the code `lock_timeout`: retry the same request once. The server SDK reports it as `lock_timeout` with `retryable: true`.

## `idempotency_key was already used with a different request`

```json theme={null}
{ "error": "idempotency_error", "message": "idempotency_key was already used with a different request" }
```

The key was reused for a different logical request, so the replay was refused rather than returning the wrong decision. Generate a new key per logical request and reuse it only for byte-for-byte retries. The server SDK reports this as `mutation_drift`. See [Idempotency](https://docs.trycurious.ai/api-reference/idempotency.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.