Developers

API error codes

Use the stable code for exact handling and the class for a safe fallback when a newer code is unknown. Messages are for people and can change.

Every page below documents the HTTP status, class, typed meta keys, meaning, and a concrete client response. The runtime catalog is also published by GET /v1/meta.

CodeClassStatusMeaning
invalid_argumentinvalid_request400umbrella; see details[].
invalid_jsoninvalid_request400body is not a JSON object.
unknown_fieldinvalid_request400a body field the route does not define.
unknown_parameterinvalid_request400a query parameter the route does not define.
missing_fieldinvalid_request400a required field was absent.
invalid_idinvalid_request400wrong id type or malformed id.
invalid_cursorinvalid_request400tampered, malformed, or filters changed mid-page.
invalid_filterinvalid_request400unknown value for an enum filter.
invalid_sortinvalid_request400field is not sortable on this collection.
content_conflictinvalid_request400both data and url on content.
content_auth_not_allowedinvalid_request400content.auth sent with anything but url.
invalid_base64invalid_request400content.data did not decode.
invalid_optioninvalid_request400unknown print-option key.
invalid_option_valueinvalid_request400option value outside its grammar.
invalid_event_typeinvalid_request400unknown or malformed event-type selector.
invalid_webhook_urlinvalid_request400not an absolute http(s) URL.
confirm_requiredinvalid_request400filter or all without confirm_count.
idempotency_not_supportedinvalid_request400Idempotency-Key on a route that does not honor it.
token_invalidinvalid_request400expired or already-used email link.
password_policyinvalid_request400The password does not satisfy the published password rules.
content_too_largeinvalid_request413content over the cap.
unsupported_media_typeinvalid_request415not application/json.
method_not_allowedinvalid_request405known path, wrong method.
upgrade_requiredinvalid_request426frozen; plain GET on the agent WebSocket path.
invalid_credentialsauthentication401absent, malformed, unknown, expired or revoked credential; also the uniform sign-in answer and the dead-session answer.
role_forbiddenpermission403the console role is insufficient.
session_requiredpermission403an API key on a session-only route.
marker_requiredpermission403pre-session /v1/auth/* without a PrintHook marker.
cross_site_refusedpermission403the Sec-Fetch-Site gate.
account_suspendedpermission403the acting account is not active.
account_not_permittedpermission403acting-account selector unknown or not yours (one answer for both), or the header is not allowed on this route.
computer_key_not_permittedpermission403a computer key outside its four surfaces.
permission_requiredpermission403the acting account lacks an account-level permission; the one instance is Admin on PATCH /v1/agent-releases/{id}.
trial_expiredpermission403new print admission at or after the native trial deadline without a valid paid entitlement; existing jobs, retries, login and account access remain available.
quota_exceededpermission403POST /v1/jobs would exceed the month's print allowance for quantity multiplied by copies; the whole request is refused without overage.
child_accounts_not_permittedpermission403POST /v1/accounts while the account may not create child accounts.
password_incorrectpermission403wrong current password (never a 401; the console signs out on a 401).
mfa_requiredpermission403valid password needs an authenticator or recovery code.
mfa_invalidpermission403incorrect, expired or reused factor.
mfa_already_enabledconflict409setup cannot replace an active factor.
mfa_not_enabledconflict409factor change without an active factor.
team_change_not_permittedpermission403protected owner/self or a role above the manager's authority.
registration_disabledpermission403sign-up switched off.
email_not_verifiedpermission403defined, not raised (see below).
not_foundnot_found404no such resource on this account.
idempotency_key_reusedconflict409same key, different request fingerprint.
idempotency_in_progressconflict409same key, the original request is still running; retry_after_sec: 1.
confirm_count_mismatchconflict409the selection moved between the caller's read and the write.
printer_onlineconflict409retire refused while the printer is online.
station_name_in_useconflict409the station name is already used on this account (case-insensitive).
station_busyconflict409delete refused while jobs addressed to the station are pending.
role_unboundconflict409a job addressed to a station role that has no live binding (unbound, or stale after the device moved).
role_not_bindableconflict409the device cannot hold that role (a scale is not a printer, and so on).
device_not_on_station_computerconflict409the device lives on another computer than the station.
station_pairing_invalidpermission403a wrong, expired, used or other-tenant pairing code or barcode at enrollment.
computer_disconnectedconflict409retire refused because the printer's computer is disconnected.
not_cancelableconflict409the job already left queued (also a bulk unchanged code).
email_in_useconflict409the address already belongs to an account or user.
creator_ref_in_useconflict409the creator reference is already used on this parent.
key_label_in_useconflict409the label is not unique among the account's live keys.
webhook_limit_reachedconflict409the per-account webhook cap.
delivery_in_progressconflict409an active delivery/retry prevents manual replay.
rate_limitedrate_limit429the per-account bucket; retry_after_sec set.
too_many_attemptsrate_limit429a sign-in throttle bucket; retry_after_sec set.
internal_errorserver500An unexpected server failure occurred; the public message intentionally does not expose its cause.