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_requestThe request has a query parameter this endpoint does not accept.
invalid_parameter
400 · invalid_requestA parameter has a value this endpoint cannot use. `param` names it.
invalid_cursor
400 · invalid_requestThe cursor is malformed or does not belong to this list. Start again without it.
method_not_allowed
405 · invalid_requestThe path exists but not for this HTTP method. The Allow header lists the methods.
missing_credentials
401 · authentication_errorNo Authorization header was sent.
invalid_api_key
401 · authentication_errorThe key is unknown, revoked, or not an API key.
invalid_request_body
400 · invalid_requestThe 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_requestA required body field or header is missing. `param` names it.
invalid_idempotency_key
400 · invalid_requestThe Idempotency-Key header must be 1 to 255 printable ASCII characters.
payload_too_large
413 · invalid_requestThe body is over 1,000,000 bytes. Split the batch.
too_many_events
413 · invalid_requestA batch holds at most 1,000 events. Split it.
no_valid_events
422 · invalid_requestEvery 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_errorNo 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_errorThe 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_errorThe signed timestamp (epoch milliseconds) is more than 5 minutes from server time.
idempotency_key_reused
409 · conflictThis 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 · conflictA 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_limitedToo 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_errorA browser Origin that is not allow-listed called the MCP server. Non-browser clients send no Origin.
key_type_not_allowed
403 · permission_errorThis key's type cannot call this endpoint.
not_found
404 · not_foundNo such endpoint.
provider_not_found
404 · not_foundNo provider has this slug.
connection_not_found
404 · not_foundNo 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_foundNo sync with this id in the key's project.
connect_link_not_found
404 · not_foundNo connect link with this id in the key's project.
alert_rule_not_found
404 · not_foundNo alert rule with this id in the key's project.
negotiated_pricing_not_found
404 · not_foundThe project has no negotiated pricing for this provider.
provider_not_connectable
422 · invalid_requestThe provider is unknown or Argus cannot poll it with a credential (telemetry only).
credential_invalid
422 · invalid_requestThe provider rejected the credential. `message` carries the provider's reason; the credential is never echoed.
provider_unreachable
502 · upstream_errorArgus could not reach the provider to check the credential. Retry.
label_conflict
409 · conflictAnother connection to this provider already has this label. Update that connection instead, or choose another label.
connection_not_pollable
409 · conflictThe connection has no credential to poll with (telemetry only) or is suspended, so there is nothing to sync.
quota_exceeded
409 · plan_limitThe project reached a limit on this kind of resource. `details` holds `resource`, `limit` and `used`.
session_required
403 · permission_errorThis operation needs a signed-in session in the Argus app; API keys cannot perform it.
session_expired
401 · authentication_errorThe web app's session is missing, expired or signed out. Only the signed-in web app sees it.
csrf_check_failed
403 · permission_errorA 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_limitedThe key exceeded its request budget. Wait `Retry-After` seconds.
internal_error
500 · api_errorSomething failed on our side. Retry; quote `request_id` if it persists.