These docs are a work in progress: some pages may still be incomplete or contain inaccuracies.
fastmon Docs

Errors

Error envelope, status codes, and what each common code means.

Every error from the fastmon API uses the same envelope. The HTTP status code tells you the shape; the code inside tells you the cause.

Envelope

Error response
{
  "error": {
    "code": "validation_error",
    "message": "domain is required",
    "request_id": "01HZY…",
    "doc_url": "https://docs.fastmon.eu/errors/validation_error",
    "details": { "field": "domain" }
  }
}
FieldRequiredNotes
codeyesStable machine-readable code. Safe to switch on.
messageyesHuman-readable. May change for the same code as we improve clarity.
request_idusuallySame value as the X-Request-ID response header.
doc_urloptionalLink to a docs page that explains the code in depth.
detailsoptionalCode-specific. Validation errors put the offending field here.

Switch on code in client code; render message to humans. The code is part of our public contract; message may be reworded for clarity at any time.

Status codes

StatusWhat it means
400The body or query was malformed. See code for specifics.
401Authentication failed or wasn't provided. See Authentication.
403Authenticated, but not allowed. Wrong organization, wrong role, or paused resource.
404Resource doesn't exist, or you can't see it. We don't leak existence.
409Conflict: usually a uniqueness violation or a state-machine clash.
422Validation failed. details.field carries the offending field.
429Rate-limited. Wait and retry; Retry-After is set.
StatusWhat it means
500Server error. Include request_id when reporting.
502Bad gateway. Usually a deploy-window blip; retry with backoff.
503Service unavailable. Same as 502: transient.
504Gateway timeout. Retry once with longer client timeout.

code values

The full list, grouped by category.

Auth

CodeMeaning
unauthenticatedNo credentials, or they didn't validate.
invalid_credentialsEmail/password combination didn't match.
two_factor_requiredLogin passed step one; a TOTP code is needed to complete the session.
invalid_two_factor_codeThe TOTP code was wrong or expired.
session_expiredThe session cookie is no longer valid. Log in again.
invalid_tokenShort-lived opaque token (email verification, password reset, OAuth state, 2FA temp) was invalid or expired. Distinct from session_expired on purpose: don't bounce the user to /login on a stale reset link.

Authorization

CodeMeaning
forbiddenAuthenticated, but not allowed for this action.
organization_access_deniedThe token/user can't access this organization.
site_access_deniedThe token/user can't access this site.
admin_requiredThe action requires platform-admin privileges.
owner_requiredThe action requires organization-owner privileges.

Not found

CodeMeaning
organization_not_foundOrganization doesn't exist or isn't visible to you.
site_not_foundSite doesn't exist or isn't visible to you.
release_not_foundRelease marker doesn't exist on this site.
rule_not_foundNotification rule doesn't exist.
member_not_foundOrganization member doesn't exist.
invite_not_foundInvite doesn't exist or has been consumed.
partner_not_foundPartner relationship doesn't exist.
user_not_foundUser doesn't exist or isn't visible to you.
resource_not_foundCatch-all for resources without a more specific code.

Conflict / state

CodeMeaning
email_already_registeredSign-up attempted with an email that already has an account.
site_already_existsDomain is already registered in this organization.
release_already_existsA release with this version already exists on the site.
organization_inactiveThe organization is suspended.
user_inactiveThe user account is disabled.
already_memberTried to invite or add someone who's already in the organization.
billing_partner_existsBilling-partner relationship is already set; remove the existing one first.
circular_partner_forbiddenPartner relationship would create a cycle.
self_transfer_forbiddenCan't transfer ownership to yourself.
conflictCatch-all conflict without a more specific code.

Input

CodeMeaning
validation_errorA field failed validation. details.field names it.
unsupported_operationThe operation isn't supported in this context (e.g. wrong storage mode).
invalid_cursorThe pagination cursor was malformed or has expired.

Rate limit

CodeMeaning
rate_limitedToo many requests. Retry-After is set on the response.

Plan / entitlement

CodeMeaning
plan_insufficientThe action requires a higher plan tier than the organization is on.
ai_disabledAI features are turned off for this organization or globally.
synthetic_disabledSynthetic Monitoring isn't enabled for this organization. An owner can turn it on under Organization Settings.

Resource limits / upstream

CodeMeaning
beacon_buffer_fullThe beacon ingestion buffer is saturated. Retry shortly.
clickhouse_unavailableThe analytics store is temporarily unavailable.
upstream_unavailableA required upstream service didn't respond. Retry with backoff.
oauth_errorAn OAuth provider returned an error or the state didn't validate.

Feature lifecycle

CodeMeaning
feature_removedThe endpoint or feature has been removed and no longer accepts requests.

Generic

CodeMeaning
internal_errorServer bug. Include request_id when reporting.
not_readyService is starting up or briefly draining. Retry shortly.

Retrying

StatusRetry?
429Yes: wait Retry-After seconds.
502 / 503 / 504Yes: exponential backoff. Usually deploy-window blips.
Other 5xxOnce. If it persists, report with request_id.
4xxNo. The request is wrong; fix and resend.

Reporting an error

Always include the request_id when you contact support. It lets us pull the matching server log in seconds. Without it, debugging starts from "describe what time it happened roughly," which is much slower.

The request ID is on:

  • the X-Request-ID response header,
  • error.request_id in the JSON body,
  • the response of every successful request too (for chain correlation).

Common surprises

  • 404 is intentionally ambiguous. "I can't see this resource" and "this resource doesn't exist" both return 404. We don't want to leak existence to unauthorized clients.
  • Validation errors stop at the first failure. A payload with two bad fields reports one. Fix and resend to see the next.

On this page