Skip to content

Error codes ​

Every error Mankomail reports carries a stable code: a short lower-case identifier such as auth.unauthenticated or llm.rate_limited. Programs should test the code, never the message, which is a technical English text that may change. The interface translates each code into a message in your language.

This page explains where codes appear and lists the families of codes in use. It is not an exhaustive list of every code.

Where codes appear ​

  • In API responses. Every error response of the REST API is a JSON object with code, message and, sometimes, details. The HTTP status gives the class of the error; the code gives the precise cause.
  • In the errors of a run. When a step fails, its error details show a Code, next to the server message, the node and the attempt number. See Errors and retries.

How codes are written ​

Every API code has the form domain.code: the domain names the part of the product, the code names the cause, for example webmail.sending_disabled, workflow.not_publishable, approval.not_found, wait.step_not_waiting or api_key.scope_missing. Codes contain only lower-case letters, digits, _ and ., and exactly one dot. The generic codes of the HTTP layer have a domain too: request.bad_request, request.not_found, request.internal_error. Treat every code as an opaque string and compare it as a whole; the domain is there to let you handle a family at once. See Errors for the full error format.

The errors of a run use a second, shorter vocabulary: a step that fails carries a code without a domain, such as node_invalid_param, node_timeout or execution_timeout. These codes appear in the error details of an execution, never in the code of an API response.

Families of codes ​

DomainWhat it coversExamples
authSign-in, sessions, roles, passwordsauth.invalid_credentials, auth.unauthenticated, auth.forbidden, auth.too_many_attempts, auth.https_required, auth.weak_password
governanceMembers, invitations, node policygovernance.invitation_expired, governance.last_admin, governance.unknown_node_type
mailboxConnected mailboxes and their mirrormailbox.not_active, mailbox.resync_window_invalid, mailbox.confirmation_mismatch
imap, smtpConnecting an IMAP mailboximap.auth_failed, imap.tls_failed, smtp.unreachable
oauthConnecting a Google or Microsoft accountoauth.app_not_configured, oauth.access_denied, oauth.missing_refresh_token, oauth.encryption_disabled
credentialStored connectionscredential.not_found, credential.in_use, credential.encryption_disabled, credential.capability_missing
webmailReading and sending mail in the webmailwebmail.sending_disabled, webmail.rate_limited, webmail.message_too_large, webmail.attachment_too_large
workflow, executionSaving, publishing and running workflowsworkflow.draft_conflict, workflow.not_published, workflow.not_publishable, execution.not_retryable, execution.version_unavailable
requestThe HTTP layer itself: unreadable or oversized body, unknown route, unexpected failurerequest.bad_request, request.not_found, request.internal_error
idempotencyThe Idempotency-Key headeridempotency.key_reused, idempotency.in_progress, idempotency.invalid_key
node (run errors)A step that cannot run; shown in the detail of an execution, not in API responsesnode_missing_email, node_invalid_param, node_service_failed, node_timeout
llmAI models and providersllm.provider_not_configured, llm.invalid_api_key, llm.rate_limited, llm.timeout, llm.output_truncated, llm.content_refused
integrationThird-party services (Airtable, Notion…)integration.unauthorized, integration.missing_scopes, integration.rate_limited, integration.unavailable
google, microsoftGoogle and Microsoft 365 actions in a stepgoogle.insufficient_permissions, google.not_found, microsoft.access_denied, microsoft.storage_full
tables, tableTables, from the interface and from nodestables.duplicate_key, tables.limit_reached, tables.invalid_csv, table.row_not_found
contactsAddress book and signaturescontacts.invalid_csv, contacts.duplicate_signature_name
reviewMorning review of draftsreview.already_resolved, review.content_gone
approvalApproval requestsapproval.not_found, approval.already_decided
waitWaits and signalswait.step_not_waiting, wait.deadline_invalid, wait.outcome_not_available
api_keyAPI keys and their scopesapi_key.scope_missing, api_key.session_required, api_key.rate_limited, api_key.scope_forbidden
analyzerMailbox analyzeranalyzer.llm_unavailable, analyzer.tables_required, analyzer.report_busy
templatesWorkflow templatestemplates.invalid_graph, templates.forbidden_node
resourceLists offered while configuring a noderesource.unavailable, resource.context_required
notification, dashboardNotifications and dashboardsnotification.not_found, dashboard.forbidden