Errors

Every failure is {"error": {type, code, message, param, doc_url, request_id}} with a real HTTP status. Branch on code; message is for people. The same list is served at GET /v1/errors. Over MCP the object is the tool result with isError: true.

unknown_parameter

400 · invalid_request

The request has a query parameter this endpoint does not accept.

invalid_parameter

400 · invalid_request

A parameter has a value this endpoint cannot use. `param` names it.

invalid_cursor

400 · invalid_request

The cursor is malformed or does not belong to this list. Start again without it.

method_not_allowed

405 · invalid_request

The path exists but not for this HTTP method. The Allow header lists the methods.

missing_credentials

401 · authentication_error

No Authorization header was sent.

invalid_api_key

401 · authentication_error

The key is unknown, revoked, or not an API key.

invalid_request_body

400 · invalid_request

The body is not a JSON object (or, on `/v1/events`, not an event or an `events` array), or it is empty where fields are required.

missing_parameter

400 · invalid_request

A required body field or header is missing. `param` names it.

invalid_idempotency_key

400 · invalid_request

The Idempotency-Key header must be 1 to 255 printable ASCII characters.

payload_too_large

413 · invalid_request

The body is over 1,000,000 bytes. Split the batch.

too_many_events

413 · invalid_request

A batch holds at most 1,000 events. Split it.

no_valid_events

422 · invalid_request

Every event in the batch was rejected, so nothing was queued. Send the same body to `POST /v1/events/validate` for each event's reason.

missing_source_credentials

401 · authentication_error

No source credential was sent. Use `Authorization: Bearer <source secret>` with `Argus-Source: <source id>`, or the HMAC headers `X-Argus-Source`, `X-Argus-Timestamp` and `X-Argus-Signature`.

invalid_source_credentials

401 · authentication_error

The source is unknown or revoked, or the bearer secret or HMAC signature is wrong (sign the timestamp, a dot and the raw body, hex HMAC-SHA256). The cases are not distinguished.

timestamp_stale

401 · authentication_error

The signed timestamp (epoch milliseconds) is more than 5 minutes from server time.

idempotency_key_reused

409 · conflict

This Idempotency-Key was already used with a different request body or source. Use a new key for a new request.

idempotency_key_in_progress

409 · conflict

A request with this Idempotency-Key is still running. Retry with the same key after a moment; it replays the response once the first request finishes.

too_many_auth_failures

429 · rate_limited

Too many failed authentication attempts from this address. Wait `Retry-After` seconds. Valid credentials keep working from an address over budget, except that a credential the server has not seen recently gets only a small number of lookups per window, tracked per server instance; a client sharing an address with an attacker can be briefly locked out.

origin_not_allowed

403 · permission_error

A browser Origin that is not allow-listed called the MCP server. Non-browser clients send no Origin.

key_type_not_allowed

403 · permission_error

This key's type cannot call this endpoint.

not_found

404 · not_found

No such endpoint.

provider_not_found

404 · not_found

No provider has this slug.

connection_not_found

404 · not_found

No connection with this id in the key's project. When a request body names the connection (`param` says where) the status is 422.

sync_not_found

404 · not_found

No sync with this id in the key's project.

alert_rule_not_found

404 · not_found

No alert rule with this id in the key's project.

negotiated_pricing_not_found

404 · not_found

The project has no negotiated pricing for this provider.

provider_not_connectable

422 · invalid_request

The provider is unknown or Argus cannot poll it with a credential (telemetry only).

credential_invalid

422 · invalid_request

The provider rejected the credential. `message` carries the provider's reason; the credential is never echoed.

provider_unreachable

502 · upstream_error

Argus could not reach the provider to check the credential. Retry.

label_conflict

409 · conflict

Another connection to this provider already has this label. Update that connection instead, or choose another label.

connection_not_pollable

409 · conflict

The connection has no credential to poll with (telemetry only) or is suspended, so there is nothing to sync.

quota_exceeded

409 · plan_limit

The project reached a limit on this kind of resource. `details` holds `resource`, `limit` and `used`.

session_required

403 · permission_error

This operation needs a signed-in session in the Argus app; API keys cannot perform it.

session_expired

401 · authentication_error

The web app's session is missing, expired or signed out. Only the signed-in web app sees it.

csrf_check_failed

403 · permission_error

A web-app write did not come from the app itself: it lacks `x-argus-csrf`, or its `Origin` or `Sec-Fetch-Site` is not the app's. API keys never see it.

rate_limit_exceeded

429 · rate_limited

The key exceeded its request budget. Wait `Retry-After` seconds.

internal_error

500 · api_error

Something failed on our side. Retry; quote `request_id` if it persists.