Skip to content

Error codes ​

Every error of /api/v1 is {"error": {"code", "message", "details", "request_id"}}, and X-Request-Id is echoed on every response. The licence gate of a self-hosted server answers {"error": {"code", "message"}}.

StatusCodeWhen
400bad_requesta parameter that does not apply, e.g. queue for delayed jobs
401mfa_challenge_invalid
401mfa_code_invalid
401mfa_requiredright password, second factor needed; details.challenge
401sdk_token_requiredA valid Bearer JOOBQUI_SDK_TOKEN is required for /api/v1/sdk/*.
401unauthenticated
402paid_license_requiredAn active paid self-hosted license is required.
402pro_requiredthe call drives a JoobQ Pro feature — the workflow engine or workflow schedules — but this deployment has no valid Pro licence; Core keeps working, only the Pro-backed routes answer this; GET /capabilities reports features.pro: false so the console hides them
402sso_upgrade_requiredSingle sign-on is not included in the current license tier.
403env_token_admin
403forbiddencsrf for the missing header, origin for a cross-origin socket
403forbidden_rolethe role is too low for the route; the console disables those controls and, if one is still refused, toasts "You need the operator role for that"
403invite_required
403mfa_enrolment_requiredthe account must set up a second factor first
403mfa_needs_sessiona token called /mfa
403mfa_required_for_rolethe role must keep its second factor
403sign_up_closed
404not_foundincluding a step that is not in the workflow
405method_not_allowedAllow lists the methods; /stream without a WebSocket handshake: it is a WebSocket route only; a handshake from another origin gets Azu's plain 403, and a wrong version 426 with Sec-WebSocket-Version
409conflicta command that no longer applies: the run already finished, the step is not failed, the run cannot be re-driven; starting an id that belongs to another workflow; the last active admin; a token name that exists
413payload_too_largebodies are capped at limits.max_payload_bytes, 256 KiB
422invalid_requestthe message names the field
429rate_limitedsign-in, sign-up, recovery, two-factor, single sign-on, run-now, channel test; always with Retry-After
500internal_errorfor anything unexpected (logged with the request id; no internals in the response). The single sign-on callback answers a refusal with a redirect to /ui/login?sso_error=…, not with this envelope.
503sdk_token_not_configuredJOOBQUI_SDK_TOKEN is not configured on this self-hosted instance.
503secrets_key_requiredproduction without JOOBQUI_SECRETS_KEY: the second factor cannot be turned on
503sessions_not_endeda password was reset but the account's sessions could not be ended
503unavailabletoo many live connections, Redis or the audit log not answering, single sign-on's provider not answering

The SDK gateway's batched calls answer per item: an item of POST /sdk/tasks/ack or POST /sdk/tasks/heartbeat that is refused carries error: {status, code, message} (not_found, lease_owner_mismatch, invalid_request) and the other items are settled.

JoobQ Core is MIT licensed. JoobQ Pro needs a licence key.