Skip to content

API error codes ​

Every API error response carries a machine-readable code alongside the human-readable message:

json
{
  "error": {
    "message": "API key lacks required scope",
    "code": "SCOPE_DENIED"
  }
}

Branch on the HTTP status and the code — never on the message text, which can change without notice. This page catalogues every code the API currently emits. The "HTTP status" column shows the status(es) each code ships with; where a code appears with more than one, the first listed is the most common.

Authentication, keys, and scopes ​

These are the codes every integration must handle. The 401s mean your credential is the problem; the 403s mean the credential is fine but is not allowed to do what it tried.

CodeHTTP statusMeaning
AUTH_REQUIRED401No valid credentials supplied — missing, invalid, expired, or revoked bearer token
UNAUTHENTICATED401No authenticated user in context
UNAUTHORIZED401No organisation context — the credential is not tied to a tenant
AUTH_FAILED401Login failed — wrong username or password
AUTH_INVALID401The supplied registration or auth token is invalid or expired
AUTH_DISABLED401The account is disabled
AUTH_FORBIDDEN403Authenticated, but this credential type may not perform the action
SESSION_EXPIRED401Session expired
ACCOUNT_LOCKED423Account temporarily locked due to too many failed login attempts
MFA_TOKEN_INVALID401Invalid or expired MFA token
INVALID_CODE400/401The supplied one-time/TOTP or invite code is invalid
CHALLENGE_REQUIRED428Additional verification required
SCOPE_DENIED403The API key's scopes do not cover this operation — add the required scope or use a broader key
API_KEY_FORBIDDEN403This endpoint cannot be called with an API key at all (session-only, e.g. key management itself)
FORBIDDEN403Authenticated, but your role or the resource ownership does not allow this
ACCESS_DENIED403Remote-access request was denied by policy or by the end user
PLATFORM_ADMIN_REQUIRED403Platform admin required
RATE_LIMITED429Too many requests — honour Retry-After and back off

In practice: a 401 means re-check the key itself (see API → Authentication); a 403 with SCOPE_DENIED means the key needs an extra scope; API_KEY_FORBIDDEN means the endpoint is deliberately closed to API keys regardless of scopes; 429 with RATE_LIMITED means back off and honour Retry-After.

All other codes ​

Bad request (400) ​

The request itself is wrong — fix the payload before retrying.

CodeHTTP statusMeaning
ADDRESS_INCOMPLETE400A postal address is missing required fields
AGENT_MISMATCH400Agent does not belong to endpoint's client
AGENT_NOT_FOUND400Agent not found in this org
AI_NOT_CONFIGURED400AI features are not configured for this organisation
ALL_EXCLUDED400Every targeted item was excluded by current rules; nothing to act on
BAD_ID400An identifier in the URL is malformed
BAD_JSON400The request body is not valid JSON
BAD_PERIOD400Invalid period — must be monthly or annual
BAD_REQUEST400The request is malformed — check body, parameters, and types
BAD_TIER400Invalid tier — must be ease_in or crack_on
BETA_CODE_UNKNOWN400Invite code not recognised
BITDEFENDER_NOT_PROVISIONED400Client has not been provisioned in Bitdefender yet
BITDEFENDER_NOT_READY400The Bitdefender company is not ready for this operation yet
BITDEFENDER_NO_INSTALLERS400No installer URLs cached for this client
BITDEFENDER_PLATFORM_UNSUPPORTED400Bitdefender does not support this device platform
BOT_CHECK_FAILED400Verification failed, please refresh and try again
CLIENT_NOT_ENABLED400Threatdown is not enabled for this client
CLIENT_NOT_MATCHED400Client is not matched to a OneView site yet
COMMAND_ERROR400The command payload is invalid
COUNTER_NOT_FORWARD400Next_ticket_number must be greater than the current next number; the counter only moves forward
CRITERIA_INVALID400Smart-group criteria failed validation
DECODE_FAILED400Image decode failed
ENDPOINT_NO_CLIENT400Endpoint has no client to scope link
FILE_ERROR400The uploaded file could not be read or processed
GATEWAY_REJECTED400Mail gateway rejected the domain
INVALID_ACTION400Invalid action
INVALID_ASSIGNMENT400A referenced template or assignment target does not exist in this tenant
INVALID_BODY400The request body failed validation
INVALID_COMPANY_NUMBER400Company_number must be 6 to 10 alphanumeric characters
INVALID_DATE400Effective_from must be YYYY-MM-DD
INVALID_EMAIL400Reply_to is not a valid email address
INVALID_HEX400Accent_color must be #RRGGBB
INVALID_ID400An ID in the path or body is not a valid UUID/identifier
INVALID_INPUT400A request parameter failed validation
INVALID_JSON_BODY400Invalid JSON body
INVALID_KIND400Kind must be one of: cpu, memory, disk
INVALID_LOCALE400The requested locale is not supported
INVALID_MIME_TYPE400Mime_type must be image/*
INVALID_PARAM400A query or body parameter is invalid
INVALID_PASSWORD400Current password is incorrect
INVALID_PERIOD400Supply_period_start and supply_period_end must be set together
INVALID_PID400Invalid process ID
INVALID_PROVIDER400Provider ID mismatch
INVALID_QUERY400A query parameter failed validation
INVALID_RATE400Rate_bps must be between 0 and 10000
INVALID_REFERENCE400A referenced record (client, site, contact, user, category…) does not exist in this org
INVALID_REQUEST400Missing state or code
INVALID_STATE400/409The resource is not in a state that allows this operation
INVALID_TICKET_ID400Invalid ticket_id
INVALID_TIER400Invalid new_tier — must be ease_in or crack_on
INVALID_VERSION400Version must be a positive integer
INVOICE_CURRENCY_UNSUPPORTED400The invoice currency is not supported by the configured accounting provider
INVOICE_NOT_DRAFT400Invoice is no longer a draft; metadata is frozen on issue
INVOICE_NOT_ISSUED400Drafts use the live preview at GET /pdf; regenerate only applies after issue
MFA_NOT_ENABLED400MFA is not enabled
MFA_NOT_SETUP400MFA setup not initiated; call POST /mfa/setup first
MISSING_FIELDS400Company_name, firstname, lastname, email are required
MISSING_FILE400Missing 'file' form field
MISSING_IDENTIFIER400Identifier required
MISSING_JOB_ID400Missing job ID
MISSING_NUMBER400Number query parameter is required
MISSING_TOKEN400Missing token
NO_AGENT400Device has no associated agent for proxy polling
NO_CUSTOMER400No Stripe customer on file for this organisation
NO_SENDER400Ticket has no sender address to block
NO_TOKEN400Token required
OIDC_DISCOVERY_FAILED400OIDC discovery against the SSO provider failed
PLATFORM_UNSUPPORTED400Agent-side install is supported on Windows only
QUERY_ERROR400The query could not be executed as written
READ_FAILED400Failed to read upload
REGISTRY_ERROR400The registry query payload is invalid
SCAN_ERROR400The scan request is invalid
SIGNING_KEY_MISSING400No signing key configured; generate one first via POST /api/v1/settings/signing-key
SMTP_NOT_CONFIGURED400SMTP not configured, save SMTP settings first
SNIPPET_ERROR400The script snippet payload is invalid
TD_NOT_CONFIGURED400Threatdown credentials not configured
TD_NO_ACCOUNT400No account ID for this endpoint
TD_TOKEN_MISSING400OneView site no longer exposes an installer token for this client; re-match the site
TEMPLATE_ERROR400The template payload is invalid
TEMPLATE_PARSE_ERROR400The template failed to parse
UNSUPPORTED_MIME400Unsupported image type (allowed: png, jpeg, gif)
UPLOAD_TOO_LARGE400Upload too large or malformed multipart body
USE_TRANSITION_ENDPOINT400Status changes must use POST /{id}/transition
VALIDATION_ERROR400/422One or more fields failed validation — the message names the field
VAT_CODE_REQUIRED400Default VAT code is required to enable VAT
VAT_LINES_MISSING_CODE400One or more invoice lines are missing a VAT code
VAT_NUMBER_REQUIRED400VAT registration number is required to enable VAT
WEAK_PASSWORD400Password must be at least 12 characters

Unauthorised (401) — token lifecycle ​

Token-specific failures beyond the core list above: agent registration tokens, signup and reset links.

CodeHTTP statusMeaning
DEVICE_MISMATCH401Open link on signup device
INVALID_TOKEN401/400The supplied link token is invalid or expired
TOKEN_EXHAUSTED401Registration token has been used the maximum number of times — generate a new token from the portal
TOKEN_EXPIRED401Registration token has expired — generate a new token from the portal
TOKEN_INVALID401/410Registration token not recognised — check the token value

Payment required (402) ​

Subscription or billing state blocks the action.

CodeHTTP statusMeaning
BILLING_REQUIRED402Billing required
DUNNING_SUSPENDED402Account suspended
TRIAL_EXPIRED402Trial expired

Forbidden (403) ​

Permission, policy, and feature gates beyond the core auth/scope checks above.

CodeHTTP statusMeaning
FEATURE_DISABLED403Feature_disabled
OWNERSHIP_NOT_VERIFIED403Publish the ownership TXT record and verify before provisioning this domain
READONLY_CONTACT403Contact is managed by CIPP and cannot be deleted
READONLY_FIELD403Full_name is managed by CIPP
RUSTDESK_DISABLED403RustDesk remote access is disabled for this agent
SELF_REVIEW_FORBIDDEN403You cannot approve your own timesheet
SIGNUPS_PAUSED403Self-serve signups are temporarily paused. Try again later or contact support.
SSO_DOMAIN_NOT_ALLOWED403Email domain is not permitted for auto-provisioning with this SSO provider
TIER_REQUIRED403Subscription tier required

Not found (404) ​

The target does not exist, is outside your tenant, or the feature is not set up.

CodeHTTP statusMeaning
BITDEFENDER_NOT_CONNECTED404Bitdefender not connected
CHALLENGE_NOT_FOUND404No challenge issued for this domain; call /challenge first
CH_NOT_FOUND404Companies House: company not found
CLIENT_NOT_FOUND404Client not found
INVOICE_NOT_FOUND404Invoice no longer exists
NOT_CONNECTED404/409The integration is not connected
NOT_FOUND404The resource does not exist (or is outside your tenant)
RUSTDESK_NOT_CONFIGURED404RustDesk not configured on this agent
TD_NOT_LINKED404No Threatdown endpoint linked to this agent
TOKEN_NOT_FOUND404This quote link is no longer valid
UPDATES_PAUSED404Agent updates are temporarily paused
VERSION_NOT_FOUND404No installer stub has been published

Conflict (409) ​

The request is valid but the current state of the data refuses it.

CodeHTTP statusMeaning
AGENT_CROSS_TENANT409This device is already registered with another tenant; uninstall from the source tenant before reinstalling, or contact [email protected] for cross-tenant release
AGENT_OFFLINE409Agent is offline — log level change requires a live connection
ALREADY_BLOCKED409This sender is already on the blocklist
ALREADY_CLOSED409Ticket is already closed
ALREADY_CONNECTED409Provider is already connected
ALREADY_MAPPED409That local record is already linked to a different FreeAgent record. Unlink it (or pick another target) before mapping
ALREADY_MERGED409Source ticket has already been merged
BITDEFENDER_DISABLED_FOR_CLIENT409Bitdefender is not enabled for this client
CALENDAR_IN_USE409Calendar still referenced by plans
CATEGORY_IN_USE409Category still referenced by tickets
CATEGORY_NAME_COLLISION409A category with that name already exists at this level
CHAT_ACTIVE409A chat is already in progress on this device
CHAT_NOT_ACTIVE409Chat session is not active
CHAT_TERMINAL409Chat session is already closed
CLIENT_IN_USE409This client is in use and cannot be deleted. Archive it instead to retain the audit trail
CONFLICT409The request conflicts with the current state of the resource
DELETE_CURRENT409Cannot delete the current version; upload a replacement first
DEPTH_EXCEEDED409Category depth exceeds 3-level limit
DOMAIN_ALREADY_CLAIMED409This domain is already registered with another tenant
DOMAIN_CONFLICT409Mail gateway already has a domain registered for this tenant; contact support to reclaim it
DOMAIN_DESYNC409The mail gateway no longer has this domain registered; click Remove and add it again to resync
DUPLICATE409A record with the same unique value already exists
DUPLICATE_NAME409Site name already exists under this client
DUPLICATE_SLUG409Organization slug already exists
DUPLICATE_TIME_ENTRIES_LINE409Activating this contract would duplicate an active time & materials line (same client and service) already billed by another active contract; deactivate the duplicate line first
DUPLICATE_USERNAME409Username already exists
EMAIL_PENDING409Email has pending signup
ENDPOINT_SECURITY_CONFLICT409Disable Threatdown for this client before enabling Bitdefender
GROUP_IN_USE409This group is the target of an automated task; delete or retarget it first
GROUP_OVERSIZE409This smart group is too large to target (over 50,000 members); narrow its criteria first
INVALID_TRANSITION409/400The requested status transition is not allowed from the current status
MFA_ALREADY_ENABLED409MFA is already enabled
NOT_LOST409Device is not in lost mode
NOT_TRIAGE409Ticket is not in the triage queue
NO_PENDING_CHANGE409No pending tier change to cancel
NO_PENDING_SIGNUP409No pending signup to complete
NO_SUBSCRIPTION409No billable subscription
OAUTH_INVALIDATED409The FreeAgent connection was disconnected during this OAuth flow; please start a new connection
OFF_FLEET409Device has left the fleet and cannot be reported lost
PORTAL_LINK_CONFLICT409Email already in use by another contact or organisation
PROVIDER_CONFLICT409The operation conflicts with the connected accounting provider state
RECONNECT_REQUIRED409FreeAgent connection needs reconnecting
ROLE_IN_USE409Cannot delete role with assigned users
SAME_TIER409Already on this tier
SERVICE_IN_USE409This service is in use and cannot be deleted. Archive it instead to retain the audit trail
SIGNING_KEY_EXISTS409Signing key already exists for this organization; delete it first to regenerate
SITE_HAS_AGENTS409Cannot delete site with assigned agents
SLUG_TAKEN409Slug already taken
STALE_FLOW409A newer FreeAgent connection already completed for this organisation; this older flow will not overwrite it
TD_SUBSCRIPTION_EXISTS409Site already has a subscription — use the Update Subscription action instead
TELECOM_USAGE_NOT_SYNCED409Telecom usage has not been synced for the billing period yet
TICKET_HAS_BILLED_TIME409Ticket has invoiced time; void the invoice first
TIMERS_ACTIVE409Ticket has active timers
USERNAME_TAKEN409An account with this email address already exists; sign in instead, or use a different email
VERSION_CONFLICT409Ticket was modified by another update; reload and retry

Gone (410) ​

The resource or link existed but is no longer usable.

CodeHTTP statusMeaning
BETA_CODE_EXPIRED410Invite code has expired
BETA_CODE_REDEEMED410Invite code has already been used
EXPIRED410Survey expired
GONE410The resource existed but has been deleted or has expired
INVOICE_NOT_SENDABLE410This invoice is no longer in a sendable state

Precondition failed (412) ​

A prerequisite (configuration, region, companion component) is missing.

CodeHTTP statusMeaning
AI_KEY_INVALID412AI API key could not be decrypted; admin must re-enter it
AI_KEY_MISSING412AI API key not configured for this organisation
COMPANIES_HOUSE_NOT_AVAILABLE_FOR_REGION412Companies House lookup is only available for GB-registered tenants
REQ_AUTH_NO_TRAY412Require Auth is enabled but the tray is not installed on this endpoint; enable the tray at the matching scope first
VAT_NOT_AVAILABLE_FOR_REGION412VAT configuration is only available for UK-registered tenants

Payload too large (413) ​

The upload or request body exceeds a size limit.

CodeHTTP statusMeaning
ATTACHMENT_TOO_LARGE413Attachment too large or malformed multipart
FILE_TOO_LARGE413Size_bytes exceeds limit
PAYLOAD_TOO_LARGE413Bug report payload is too large (5 MB image cap)
QUOTA_EXCEEDED413Storage quota exceeded

Unsupported media type (415) ​

The file type is not allowed.

CodeHTTP statusMeaning
MIME_NOT_ALLOWED415Mime_type not allowed

Unprocessable (422) ​

Understood, but the operation cannot be applied to this entity.

CodeHTTP statusMeaning
AGENT_ERROR422The agent reported an error executing the request
BUILTIN_TEMPLATE422Cannot delete built-in compliance template
CONFIRM_MISMATCH422Confirm_enterprise_id does not match
CONFIRM_REQUIRED422This command is destructive and requires confirm=true
FORECAST_UNAVAILABLE422Forecast unavailable
INVOICE_HAS_PAYMENTS422The invoice has recorded payments and cannot be modified this way
NO_FILE422Document has no file
OBJECT_NOT_FOUND422Object not found in storage
PRORATION_ERROR422Subscription proration could not be calculated
QBO_LINE_MAPPING_REQUIRED422Some quote lines have no catalogue mapping. The customer invoice raised on accept would fail to push to QuickBooks. Attach a service or product to each line marked below, then send
SYSTEM_READONLY422System groups are read-only; clone to customise
VALIDATION422The request failed validation

Too many requests (429) ​

Throttled — wait and retry. Honour Retry-After when present.

CodeHTTP statusMeaning
CH_RATE_LIMIT429Companies House rate limit hit, try again shortly
REFRESH_RATE_LIMITED429Please wait before requesting another email; if you need it sooner, contact your supplier directly
RESEND_MAX429Maximum number of resends reached
RESEND_THROTTLED429Resend requested too soon — wait before retrying
SEND_COOLDOWN429Quote was sent moments ago — please wait 30 seconds before resending
SESSION_LIMIT429Concurrent remote session limit reached

Server and upstream errors (5xx) ​

Our side or a downstream service failed. These are retriable; report persistent ones.

CodeHTTP statusMeaning
AGENT_REJECTED502The agent rejected the command
AGENT_TIMEOUT504The agent did not respond in time — it may be offline or busy
AGENT_UNREACHABLE503Cannot reach agent to request approval
AI_UPSTREAM_ERROR502AI upstream error
AUDIT_WRITE_FAILED500Failed to record audit log
BITDEFENDER_PROVISION_FAILED502Bitdefender provisioning failed
BITDEFENDER_RECON_FAILED502Bitdefender reconcile failed
BOT_CHECK_UNAVAILABLE503Verification is temporarily unavailable, please try again
BUGREPORT_DISABLED503Bug reporting is not configured
BUGREPORT_FORWARD_FAILED502Failed to file bug report
CH_UPSTREAM_ERROR502Companies House request failed
CIPP_ERROR502The CIPP (Microsoft 365) integration returned an error
COMPANIES_HOUSE_KEY_INVALID503Companies House rejected the API key
COMPANIES_HOUSE_NOT_CONFIGURED503Companies House lookup is not configured on this server
CONFIG_ERROR500Server-side configuration is missing or invalid
CRYPTO_ERROR500A server-side cryptographic operation failed
DB_ERROR500A database operation failed — retry, and report if it persists
DECODE_ERROR502Failed to decode metric payload
DECRYPT_FAILED500Failed to decrypt keys
DISPATCH_FAILED502The downstream provider rejected the dispatch
ENCODE_FAILED500Image encode failed
GATEWAY_DISABLED503Email gateway not configured
GATEWAY_ERROR502The mail gateway returned an error
GENERATION_ERROR500Server-side document or content generation failed
GENERATION_FAILED500Invoice generation failed
INSTALL_FAILED502Remote agent install failed
INTERNAL500Unexpected server-side failure
INTERNAL_ERROR500/503Unexpected server-side failure — retry, and report if it persists
MAIL_UNAVAILABLE503Mail not configured for this deployment
MSP360_LOGIN_FAILED502Msp360 login failed (check credentials and base_url)
MSP360_SYNC_FAILED502MSP360 backup sync failed
NATS_PUBLISH_FAILED502Failed to publish command
NATS_RELOAD_FAILED503Could not reload NATS; password rotation aborted
NATS_UNAVAILABLE503/500The internal message bus is unavailable — agent commands cannot be delivered right now
NOT_CONFIGURED503/404/412/400The feature or integration is not configured for this server or organisation
NOT_IMPLEMENTED501Apple MDM is not available yet
OIDC_ERROR500/400The SSO (OIDC) flow failed
PARSE_FAILED500Failed to parse keys
PRICE_NOT_CONFIGURED503Pricing not configured for this plan/period
PROVIDER_ERROR502The downstream provider returned an error
PROVIDER_UNAVAILABLE503Billing provider unavailable
RENDER_ERROR500Markdown rendering failed
RENDER_FAILED500Could not render invoice; please contact your supplier
SEND_FAILED502Email send failed; please try again shortly
SIGNING_INVALID_KEY500Signing master key must be 64 hex characters (32 bytes)
SIGNING_NOT_CONFIGURED500Signing master key not configured (set RMM_SIGNING_MASTER_KEY)
SMTP_TEST_FAILED502SMTP test failed
STORAGE_ERROR500B2 upload failed
STORAGE_UNAVAILABLE503Storage not configured
STORAGE_UNCONFIGURED503Attachment storage not configured
STRIPE_ERROR502Stripe returned an error
SYNC_ERROR500Synchronisation with the provider failed
SYNC_UNAVAILABLE503FreeAgent sync not wired in this build
TD_API_ERROR502The ThreatDown OneView API returned an error
TD_AUTH_ERROR502Authentication with ThreatDown OneView failed
TD_CREATE_ERROR502Creating the ThreatDown OneView site failed
TD_SCAN_ERROR502Triggering the ThreatDown scan failed
TENANT_LOOKUP_FAILED503Could not resolve tenant region
TEST_FAILED502The integration test call failed
TRIGGER_ERROR500Manually triggering the job failed
UPSTREAM_ERROR502An upstream service call failed
  • API — authentication, scopes, rate limits, conventions
  • API changelog — what changed and when

Lovingly Created in the UK
OpsMerge is a product of Brindleford Technologies Ltd, company number 16871436, registered in England and Wales.