Skip to main content
A 409 means the request conflicts with current state. The error code and the message say which conflict.

No live experiment for element

A publishable key may only decide for an element a secret key has already declared. Run 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

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.

Experiment already has 50 active arms

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

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

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.