The error envelope
Every failure, from every endpoint, has the same shape.details appears in two cases:
- Validation failures carry an array of
{ "path": [...], "message": "..." }, one per problem.pathlocates the field in the body or query. - ER:LC failures carry
{ "availability": "unavailable" }.
Statuses
Each operation in the reference lists the codes it can return and when.
Validation: 400
Bodies and most query strings are validated strictly.- Unknown body properties are rejected. This is how the API refuses a client that tries to name an owner, issuer or actor: those always come from the session.
- Unknown query parameters are rejected on most list endpoints. The CAD list endpoints ignore them instead.
- Text is trimmed before length rules apply.
- A body that is missing or is not JSON returns
INVALID_JSON.
Authentication and permission: 401 and 403
Conflicts: 409
A 409 means the request was understood and allowed, but the record is not in a state that permits it. Nothing was changed.Stale versions and concurrent changes
CAD incidents and units carry aversion. Changes send back the version the client last read.
For either one: read the record again, show the person the current state, and let them decide whether to retry. Argus never retries a conflicting write itself, and a client should not do so blindly. Optimistic concurrency covers this in full.
State conflicts elsewhere
Rate limits: 429
RATE_LIMITED comes with a Retry-After header in whole seconds. Wait that long before the next request. The budgets are listed under Authentication.
ER:LC unavailable: 503
Live server data and remote moderation depend on the ER:LC API.
Argus caches a good snapshot for ten seconds and never serves expired data after a failure. Cooldown responses include
Retry-After.
Moderation is different: read delivery
A kick or ban returns success as soon as the punishment record exists. Whether the game carried it out is in the record’s delivery field: SUCCEEDED, FAILED with an errorCode, or UNKNOWN when the outcome could not be confirmed. An UNKNOWN kick or ban may have happened. Argus never resends a command.
These three endpoints also require an Idempotency-Key header. Repeating a request with the same key and body returns the original record; the same key with a different body returns 409 IDEMPOTENCY_CONFLICT.