Skip to content

Error keys

Every error the platform raises carries a key (an identifier like content.slug.duplicate) plus a kind, an HTTP status, and a list of details, each with its own key, an optional path into the input (['fields', 2, 'value']) and interpolation params. The key is what a client translates; the admin’s sentences live in @manablox/admin-sdk, and the SDK exposes keys unchanged.

KindStatusMeaning
validation422The input was understood and refused; the details say where.
bad_request400The request cannot be acted on as stated.
unauthorized401No principal.
forbidden403A principal without the permission.
not_found404The named thing does not exist, or is not visible to the caller.
conflict409The write collides with the current state: a stale version, a duplicate.
too_large413The body is larger than the limit, e.g. an upload past the file size limit.
rate_limited429Too many requests; wait for the retry-after header.
unavailable503The instance cannot serve yet, e.g. a public API with no space to serve.
internal500A bug or an outage. Masked on a public instance.

The error body

Every surface sends the same object:

{
"key": "validation.failed",
"kind": "validation",
"status": 422,
"message": "validation.failed",
"details": [
{ "key": "validation.invalid", "path": ["limit"], "params": { "code": "too_big", "maximum": 100 } }
]
}

message repeats the key, except for an unexpected error, which is always { "key": "internal.error", "kind": "internal", "status": 500 } with a fixed English message and no details. On the public instance an internal error also drops its details. Input that fails the schema of a procedure is validation.failed with one validation.invalid detail per problem; its params carry the schema message and, when known, code, origin, expected, minimum and maximum.

Where it travels:

SurfaceCarrier
REST (/v1, /api/v1), uploads, media, transfer, rate limits, unmatched pathsThe response body { "error": { ... } }, at status.
oRPC (/rpc)The oRPC error: code from the kind, message, and the whole object as data.
GraphQL (/graphql)Each entry of errors: message, plus extensions with key, kind, status and details. The HTTP status rules are in GraphQL.

An unmatched path answers route.notFound and a missing media file asset.notFound to a client that accepts JSON (API paths always do); a browser or an image load gets a plain text 404 instead.

GraphQL masking hides only unexpected errors: a ManabloxError such as an unknown type argument keeps its key on a masked instance, while anything else reads Unexpected error. with no key.

The catalogue is ERROR_KEYS of @manablox/core (source); the ManabloxError factories and the validation collector only accept keys listed there. Field types report their own issue keys through their value schemas; those pass through untyped and are not listed here.

Keys

apiHost

  • apiHost.notFound
  • apiHost.validation.failed
  • apiHost.hostname.invalid
  • apiHost.hostname.taken

apiKey

  • apiKey.create.failed
  • apiKey.validation.failed

asset

  • asset.notFound
  • asset.create.failed
  • asset.file.required
  • asset.file.single
  • asset.mimeType.notAllowed
  • asset.tooLarge
  • asset.notAnImage
  • asset.crop.outOfBounds
  • asset.focalPoint.outOfBounds
  • asset.schedule.invalidWindow
  • asset.spaces.required
  • asset.spaces.forbidden

assetVariant

  • assetVariant.create.failed

audit

  • audit.notFound
  • audit.append.failed

auth

  • auth.unauthorized
  • auth.tooManyAttempts
  • auth.forbidden
  • auth.superadminRequired
  • auth.signUp.closed
  • auth.mail.notConfigured
  • auth.mails.tooMany
  • auth.email.unverified
  • auth.email.tokenInvalid
  • auth.twoFactor.enrolmentRequired
  • auth.twoFactor.policyNeedsFeature
  • auth.twoFactor.required
  • auth.sso.required
  • auth.sso.disabled
  • auth.sso.unknown
  • auth.sso.domain
  • auth.sso.banned
  • auth.sso.noAccount
  • auth.sso.seats

codeCredential

  • codeCredential.field.unknown

codeResource

  • codeResource.slug.invalid
  • codeResource.duplicate
  • codeResource.ref.unresolved

codeTemplate

  • codeTemplate.blocks.required

config

  • config.invalid
  • config.scope.unknown
  • config.mode.unknown
  • config.port.invalid
  • config.cache.syncIntervalInvalid
  • config.mail.driverUnknown
  • config.mail.optionMissing
  • config.database.urlMissing
  • config.database.urlUnsupported
  • config.auth.secretMissing
  • config.admin.notFound
  • config.cors.credentialedWildcard
  • config.control.keyMissing
  • config.control.webhookUrlInvalid
  • config.control.webhookSecretMissing
  • config.control.allowedIpInvalid
  • config.server.trustedProxyInvalid

content

  • content.validation.failed
  • content.notFound
  • content.notInSpace
  • content.create.failed
  • content.title.required
  • content.slug.required
  • content.slug.duplicate
  • content.parent.notFound
  • content.parent.notInSpace
  • content.parent.otherLocale
  • content.parent.self
  • content.parent.cycle
  • content.parent.isData
  • content.data.hasParent
  • content.block.type.notFound
  • content.block.type.notABlock
  • content.blocks.tooDeep
  • content.translation.exists
  • content.translation.sameLocale
  • content.type.isBlock
  • content.folder.typeMissing
  • content.type.notPublishable
  • content.schedule.invalidWindow
  • content.schedule.notPublishable
  • content.code.immutable
  • content.version.conflict
  • content.version.notFound
  • content.approval.notRequired
  • content.approval.alreadyPending
  • content.approval.notPending
  • content.approval.notRequester
  • content.approval.create.failed

contentType

  • contentType.validation.failed
  • contentType.notFound
  • contentType.create.failed
  • contentType.inUse
  • contentType.code.immutable
  • contentType.name.invalid
  • contentType.name.duplicate
  • contentType.graphqlName.duplicate
  • contentType.block.flagsNotAllowed
  • contentType.plugin.unknown
  • contentType.plugin.invalid
  • contentType.data.flagsNotAllowed
  • contentType.field.notFound
  • contentType.field.name.invalid
  • contentType.field.name.duplicate
  • contentType.field.name.immutable
  • contentType.field.type.notFound
  • contentType.field.blockType.notFound
  • contentType.field.blockType.notABlock
  • contentType.field.subFields.tooDeep
  • contentType.plan.empty
  • contentType.plan.name.duplicate
  • contentType.plan.reference.unknown
  • contentType.plan.reference.wrongKind

control

  • control.feature
  • control.limit
  • control.usage
  • control.readOnly
  • control.suspended
  • control.key.unknown
  • control.scope.notAllowed
  • control.value.invalid
  • control.key.duplicate
  • control.scope.invalid
  • control.ipNotAllowed
  • control.idempotency.mismatch
  • control.owner.exists

credential

  • credential.validation.failed
  • credential.notFound
  • credential.name.required
  • credential.slug.invalid
  • credential.slug.taken
  • credential.kind.unknown
  • credential.field.required
  • credential.oauth.exchangeFailed
  • credential.code.immutable
  • credential.create.failed

environment

  • environment.create.failed
  • environment.notFound
  • environment.machineName.invalid
  • environment.machineName.taken
  • environment.production.undeletable
  • environment.promote.notStaging
  • environment.promote.confirmRequired
  • environment.promote.failed
  • environment.unsupported
  • environment.forbidden

field

  • field.required
  • field.unique
  • field.databag.notFound

fieldType

  • fieldType.notFound
  • fieldType.name.invalid
  • fieldType.name.duplicate

graphql

  • graphql.query.tooDeep
  • graphql.query.tooComplex
  • graphql.introspection.disabled
  • graphql.persisted.required
  • graphql.persisted.notFound

internal

  • internal.error

invitation

  • invitation.notFound
  • invitation.invalid
  • invitation.expired
  • invitation.grants.required
  • invitation.grant.duplicate
  • invitation.role.unknown
  • invitation.space.notFound
  • invitation.signInRequired
  • invitation.emailMismatch

mail

  • mail.notConfigured
  • mail.tokenMissing
  • mail.serviceStatus

media

  • media.notAnImage
  • media.format.unsupported
  • media.preset.notFound
  • media.signature.invalid
  • menu.create.failed
  • menu.notFound
  • menu.validation.failed
  • menu.machineName.taken
  • menu.item.targetRequired
  • menu.item.linkNeedsLabel
  • menu.item.contentNotFound
  • menu.item.typeNotAllowed

net

  • net.blocked
  • net.tooLarge
  • net.tooManyRedirects

notification

  • notification.notFound

plugin

  • plugin.extend.contentType.notFound
  • plugin.id.duplicate
  • plugin.id.reserved
  • plugin.requires.missing
  • plugin.requires.cycle
  • plugin.contribution.unknown
  • plugin.space.required
  • plugin.key.invalid
  • plugin.key.duplicate
  • plugin.rpc.unguarded

publicApi

  • publicApi.space.notFound
  • publicApi.space.unresolved
  • publicApi.host.unknown
  • publicApi.schema.notReadOnly
  • publicApi.scope.managementOnly

push

  • push.notConfigured
  • push.subscriptionInvalid
  • push.subscription.createFailed

query

  • query.field.unknown
  • query.operator.unsupported
  • query.sort.unsupported
  • query.value.expectedArray
  • query.value.expectedNumber
  • query.limit.invalid
  • query.offset.invalid

rateLimit

  • rateLimit.exceeded

redirect

  • redirect.notFound
  • redirect.validation.failed
  • redirect.path.invalid
  • redirect.target.required
  • redirect.target.self
  • redirect.target.loop
  • redirect.fromPath.taken
  • redirect.locale.unknown

request

  • request.invalid

role

  • role.validation.failed
  • role.notFound
  • role.create.failed
  • role.inUse
  • role.name.required
  • role.machineName.invalid
  • role.machineName.reserved
  • role.machineName.taken
  • role.permission.unknown

route

  • route.notFound

secret

  • secret.keyMissing
  • secret.undecryptable

service

  • service.unavailable

snapshot

  • snapshot.notFound
  • snapshot.unsupported
  • snapshot.confirmMismatch
  • snapshot.ownerOnly

space

  • space.validation.failed
  • space.notFound
  • space.create.failed
  • space.machineName.taken
  • space.defaultLocale.notInLocales
  • space.plugin.unknown
  • space.plugin.off
  • space.plugin.invalid
  • space.member.lastOwner
  • space.member.roleNotFound
  • space.assets.mimeType.outsideInstance
  • space.assets.mimeType.outsideControl
  • space.assets.maxFileSize.aboveInstance
  • space.assets.maxFileSize.aboveControl
  • space.import.exists
  • space.import.notAnExport
  • space.import.tooLarge
  • space.import.assetsRefused
  • space.import.versionUnsupported
  • space.import.typeMissing
  • space.import.failed
  • space.import.notResumable
  • space.import.running
  • space.importing
  • space.starter.typeTaken

spaceGroup

  • spaceGroup.notFound
  • spaceGroup.externalId.taken

sso

  • sso.notFound
  • sso.validation.failed
  • sso.providerId.invalid
  • sso.providerId.taken
  • sso.protocol.required
  • sso.url.invalid
  • sso.clientId.required
  • sso.clientSecret.required
  • sso.discovery.failed
  • sso.certificate.invalid
  • sso.entityId.required
  • sso.domains.required
  • sso.domain.invalid
  • sso.domain.taken
  • sso.landingPath.invalid

storage

  • storage.driver.notFound
  • storage.key.traversal
  • storage.local.configMissing
  • storage.s3.configMissing

tag

  • tag.notFound
  • tag.name.required
  • tag.name.taken
  • tag.merge.sameTag

user

  • user.validation.failed
  • user.notFound
  • user.create.failed
  • user.email.taken
  • user.self.protected
  • user.lastSuperadmin
  • user.password.incorrect
  • user.password.sameAsCurrent
  • user.email.same

validation

  • validation.failed
  • validation.invalid

Plugin keys

Plugins declare keys of their own under plugins.<id>, with an English sentence each. The plugins of the default instance:

plugins.license

  • plugins.license.key.malformed: That is not a license key. Keys look like MBX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX.
  • plugins.license.key.duplicate: This key is added already.
  • plugins.license.key.notFound: That key is no longer on this instance.
  • plugins.license.key.fromEnvironment: This key comes from MANABLOX_LICENSE_KEYS; remove it from the environment instead.
  • plugins.license.key.notActivated: This key is not activated on this instance.
  • plugins.license.key.invalid: The license server does not know this key.
  • plugins.license.key.revoked: This license key was revoked.
  • plugins.license.key.noSeats: Every production seat of key {keyId} is taken. Deactivate one of its instances or add a seat.
  • plugins.license.key.trialUsed: The trial of this product was used already.
  • plugins.license.key.bound: This key is bound to another instance and cannot be moved.
  • plugins.license.cliSession.notFound: That license session no longer exists; start again.
  • plugins.license.subscription.inactive: The subscription of this key is not active.
  • plugins.license.activation.conflict: This license is active on another instance. Activate it again here to move it.
  • plugins.license.activation.kindMismatch: A development license serves private hosts only, and this instance has public ones ({hostnames}). Activate it as production.
  • plugins.license.activation.notFound: The license server no longer knows this activation.
  • plugins.license.rateLimited: The license server asks to wait {retryAfter} seconds.
  • plugins.license.request.invalid: The license server refused the request.
  • plugins.license.network: The license server cannot be reached: {reason}
  • plugins.license.server.failed: The license server answered unexpectedly (HTTP {status}).

plugins.workflows

  • plugins.workflows.code.immutable: This workflow is declared in code. Edit it there, or clone it here.
  • plugins.workflows.notFound: That workflow no longer exists.
  • plugins.workflows.validation.failed: The workflow could not be saved - see the parts marked.
  • plugins.workflows.name.required: A name is required.
  • plugins.workflows.trigger.eventsRequired: Pick at least one event to start on.
  • plugins.workflows.trigger.eventUnknown: The server does not know that event.
  • plugins.workflows.trigger.cronInvalid: That schedule cannot be read - five fields: minute, hour, day, month, weekday.
  • plugins.workflows.trigger.timezoneInvalid: That timezone is not known.
  • plugins.workflows.trigger.typeNotFound: One of the content types no longer exists.
  • plugins.workflows.abort.tooMany: A workflow can have at most {max} abort triggers.
  • plugins.workflows.trigger.parameterInvalid: Name the value with letters, digits and underscores, starting with a letter.
  • plugins.workflows.trigger.parameterDuplicate: Another value already goes by that name.
  • plugins.workflows.abort.eventsRequired: Pick at least one event that aborts the run.
  • plugins.workflows.abort.eventUnknown: That event cannot abort a run.
  • plugins.workflows.abort.keyRequired: Matching by key needs a run key and an abort key.
  • plugins.workflows.abort.documentNeedsContent: Matching the same document needs at least one content event.
  • plugins.workflows.abort.typeNotFound: One of the content types no longer exists.
  • plugins.workflows.design.unavailable: Designing a workflow from a description is not available here.
  • plugins.workflows.import.invalid: That file is not a workflow export.
  • plugins.workflows.import.versionUnsupported: That workflow file is from a newer version.
  • plugins.workflows.nodes.required: A workflow needs at least one node.
  • plugins.workflows.node.idDuplicate: Two nodes share an id - remove one and add it again.
  • plugins.workflows.node.keyRequired: Give the node a name templates can use.
  • plugins.workflows.node.keyInvalid: Use lower-case letters, digits and underscores, starting with a letter.
  • plugins.workflows.node.keyDuplicate: Another node already goes by that name.
  • plugins.workflows.node.unreachable: Nothing leads here - join it up, or remove it.
  • plugins.workflows.node.kindUnknown: The server does not know that kind of node.
  • plugins.workflows.edge.nodeUnknown: That connection points at a node that is gone.
  • plugins.workflows.edge.portUnknown: That connection leaves by a port this node does not have.
  • plugins.workflows.edge.selfLoop: A node cannot lead back to itself.
  • plugins.workflows.edge.duplicate: The same two nodes are already joined that way.
  • plugins.workflows.rule.operatorUnknown: The server does not know that comparison.
  • plugins.workflows.graph.cycle: These nodes lead back into each other, so the run would never end.
  • plugins.workflows.graph.startRequired: Join at least one node to the trigger.
  • plugins.workflows.action.unknown: No action of that kind is installed here.
  • plugins.workflows.action.duplicate: Two actions claim the same name.
  • plugins.workflows.action.unavailable: This instance cannot run that action.
  • plugins.workflows.action.credentialRequired: Pick a credential for this action.
  • plugins.workflows.action.credentialKind: That credential is not the kind this action needs.
  • plugins.workflows.reference.unknownNode: No node goes by that name.
  • plugins.workflows.reference.notUpstream: That node does not run before this one, so it has nothing to give it yet.
  • plugins.workflows.reference.outsideLoop: Only a node inside a loop has a current item; this one is not after a “For each item” line.
  • plugins.workflows.loop.enteredFromOutside: A line from outside the loop leads into its branch; the branch may only start from “For each item”.
  • plugins.workflows.loop.waitInside: A wait cannot be part of a loop.
  • plugins.workflows.call.targetRequired: Pick the workflow to run.
  • plugins.workflows.call.targetNotFound: That workflow no longer exists in this space.
  • plugins.workflows.call.targetNotCallable: That workflow does not start “When another workflow runs it”, so it cannot be run from here.
  • plugins.workflows.call.inputRequired: The workflow it runs needs this value.
  • plugins.workflows.call.inputUnknown: The workflow it runs takes no value by that name.
  • plugins.workflows.node.crawl.urlInvalid: Enter a full http(s) address to start from.
  • plugins.workflows.node.content.typeRequired: Pick the type of document to write.
  • plugins.workflows.node.content.idRequired: Say which document to update.
  • plugins.workflows.node.transform.templateInvalid: That is not valid JSON.
  • plugins.workflows.node.mail.fromRequired: The credential has no from address, so give one here.
  • plugins.workflows.run.timeout: The run took too long and was stopped.
  • plugins.workflows.run.aborted: The run was aborted.
  • plugins.workflows.run.notActive: That run has already ended.
  • plugins.workflows.run.workflowGone: The workflow was deleted before the run could start.
  • plugins.workflows.run.outputUnreadable: The output could not be read: {reason}
  • plugins.workflows.run.actionMissing: No action named “{action}” is installed on this instance.
  • plugins.workflows.run.delayInLoop: A wait cannot run inside a loop.
  • plugins.workflows.run.waitInLoop: This action wanted to wait, which it cannot do inside a loop.
  • plugins.workflows.run.loopNotList: “{template}” is not a list.
  • plugins.workflows.run.loopNoList: The previous node handed over no list to go through.
  • plugins.workflows.run.loopItemFailed: Item {item} failed: {reason}
  • plugins.workflows.run.loopCountInvalid: “{count}” is not a number of times to repeat.
  • plugins.workflows.run.stopped: {message}
  • plugins.workflows.run.callUnsupported: This instance cannot run other workflows from a run.
  • plugins.workflows.run.callPausedInLoop: “{name}” paused, which a loop cannot wait for; it carries on by itself.
  • plugins.workflows.run.calledRunGone: The run it started no longer exists.
  • plugins.workflows.run.calledRunFailed: “{name}” did not finish: {reason}
  • plugins.workflows.run.callTargetUnpublished: “{name}” is not published yet.
  • plugins.workflows.run.callTargetDisabled: “{name}” is switched off.
  • plugins.workflows.run.callCycle: “{name}” is already running further up this chain of calls.
  • plugins.workflows.run.callTooDeep: Workflows may only call each other {max} deep.
  • plugins.workflows.run.callInputMissing: “{name}” needs a value for “{parameter}”.
  • plugins.workflows.run.recipientMissing: No recipient address came out of the fields given.
  • plugins.workflows.run.requestFailed: {method} {url} failed: {reason}
  • plugins.workflows.run.httpStatus: {method} {url} answered with HTTP {status}.
  • plugins.workflows.run.serviceStatus: {service} answered with HTTP {status}: {reason}
  • plugins.workflows.run.tokenMissing: {provider} handed back no access token.
  • plugins.workflows.run.pushFailed: Every push failed: {reason}
  • plugins.workflows.run.crawlEmpty: Nothing could be read from {url}. {reason}
  • plugins.workflows.run.pageStatus: {url} answered with HTTP {status}.
  • plugins.workflows.run.notAPage: {url} is {type}, not a page.
  • plugins.workflows.run.notADocument: “{from}” is not a document an earlier node wrote.
  • plugins.workflows.node.email.recipientRequired: Add an address or pick a role to send to.
  • plugins.workflows.node.email.recipientInvalid: That is not an email address.
  • plugins.workflows.node.email.subjectRequired: A subject is required.
  • plugins.workflows.node.http.urlInvalid: Enter a full http(s) address.
  • plugins.workflows.node.http.headerNameInvalid: That is not a valid header name.
  • plugins.workflows.node.push.recipientRequired: Pick who should be notified.
  • plugins.workflows.node.push.titleRequired: A title is required.
  • plugins.workflows.node.condition.rulesRequired: Add at least one rule.
  • plugins.workflows.node.condition.fieldRequired: Say which value the rule looks at.
  • plugins.workflows.node.delay.minutesInvalid: Wait between one minute and thirty days.
  • plugins.workflows.node.loop.maxItemsInvalid: Take between 1 and 500 items.
  • plugins.workflows.node.loop.countRequired: Say how many times to repeat.
  • plugins.workflows.node.switch.fieldRequired: Say which value the cases compare.
  • plugins.workflows.node.switch.casesRequired: Add at least one case.
  • plugins.workflows.node.switch.tooManyCases: A switch takes at most {max} cases.
  • plugins.workflows.node.switch.caseIdInvalid: A case needs a port name of lowercase letters, digits and _.
  • plugins.workflows.node.switch.caseIdDuplicate: Two cases share the port name “{id}”.
  • plugins.workflows.run.notFound: That run no longer exists.
  • plugins.workflows.run.createFailed: The run could not be started.
  • plugins.workflows.run.documentRequired: Pick a document to test this workflow against.
  • plugins.workflows.run.unpublished: “{name}” is not published yet.
  • plugins.workflows.run.notManual: “{name}” is not started by hand; its live version has another trigger.
  • plugins.workflows.run.disabled: “{name}” is switched off.
  • plugins.workflows.run.inputMissing: Fill in “{parameter}”; the workflow needs it.
  • plugins.workflows.version.notFound: That version of the workflow does not exist.
  • plugins.workflows.create.failed: The workflow could not be saved.
  • plugins.workflows.trigger.kindUnknown: No installed plugin starts workflows this way (“{kind}”).
  • plugins.workflows.abort.kindUnknown: No installed plugin stops runs this way (“{kind}”).
  • plugins.workflows.code.steps.required: The workflow “{slug}” has no steps.
  • plugins.workflows.code.step.keyInvalid: The step key “{key}” of “{slug}” must be lowercase letters, digits and _, starting with a letter.
  • plugins.workflows.code.step.keyDuplicate: Two steps of “{slug}” share the key “{key}”.
  • plugins.workflows.code.step.targetUnknown: The step “{key}” of “{slug}” leads to “{target}”, which is not a step.
  • plugins.workflows.code.step.portRequired: The step “{key}” of “{slug}” must name the port it follows from.

plugins.webhooks

  • plugins.webhooks.notFound: That webhook no longer exists.
  • plugins.webhooks.validation.failed: The webhook could not be saved - see the parts marked.
  • plugins.webhooks.create.failed: The webhook was not stored.
  • plugins.webhooks.name.required: A name is required.
  • plugins.webhooks.slug.invalid: The name has to contain at least one letter or digit.
  • plugins.webhooks.slug.taken: Another webhook of this space already has that address.
  • plugins.webhooks.url.required: An outgoing webhook needs a URL to call.
  • plugins.webhooks.url.invalid: That is not an http or https URL.
  • plugins.webhooks.event.unknown: The server does not know that event.
  • plugins.webhooks.method.unknown: The server does not know that method.
  • plugins.webhooks.header.nameInvalid: That is not a valid header name.
  • plugins.webhooks.auth.credentialRequired: This way of authenticating needs a credential.
  • plugins.webhooks.auth.credentialKind: That credential is the wrong kind for this way of authenticating.
  • plugins.webhooks.auth.modeUnsupported: That way of authenticating cannot be used in this direction.
  • plugins.webhooks.auth.signatureHeaderInvalid: That is not a valid header name.
  • plugins.webhooks.direction.mismatch: A webhook cannot change direction - create a new one.
  • plugins.webhooks.delivery.notFound: That call is no longer in the log.
  • plugins.webhooks.delivery.requestFailed: {method} {url} failed: {reason}
  • plugins.webhooks.delivery.httpStatus: {method} {url} answered with HTTP {status}.
  • plugins.webhooks.delivery.notRetryable: Only an outgoing call can be sent again.
  • plugins.webhooks.unauthorized: The call did not prove who it was.
  • plugins.webhooks.disabled: The endpoint is switched off.
  • plugins.webhooks.methodNotAllowed: The endpoint does not accept that method.
  • plugins.webhooks.payload.invalid: The body could not be read.
  • plugins.webhooks.payload.tooLarge: The body is larger than an incoming call may be.
  • plugins.webhooks.code.immutable: This endpoint is declared in code and cannot be edited here.
  • plugins.webhooks.trigger.required: Pick the incoming webhook this workflow starts from.
  • plugins.webhooks.trigger.notFound: That incoming webhook no longer exists in this space.
  • plugins.webhooks.abort.required: Pick the incoming webhook that aborts the run.
  • plugins.webhooks.abort.notFound: That incoming webhook no longer exists in this space.
  • plugins.webhooks.code.url.required: The outgoing webhook “{slug}” needs a URL.
  • plugins.webhooks.code.auth.modeUnsupported: The {direction} webhook “{slug}” cannot authenticate with “{mode}”.
  • plugins.webhooks.code.auth.credentialRequired: The webhook “{slug}” authenticates with “{mode}” and needs a {kind} credential.

plugins.ai

  • plugins.ai.provider.notFound: That provider is not set up in this space.
  • plugins.ai.provider.notConfigured: No AI provider in this space can do that yet - add one under Settings, AI.
  • plugins.ai.provider.disabled: That provider is switched off for this space.
  • plugins.ai.provider.kind.unknown: This version does not know that provider.
  • plugins.ai.provider.kind.taken: That provider is already set up in this space.
  • plugins.ai.provider.apiKey.required: That provider has no API key stored yet.
  • plugins.ai.provider.capability.unsupported: That provider cannot generate that kind of thing.
  • plugins.ai.provider.model.notOffered: That provider does not offer that model for this job.
  • plugins.ai.provider.model.notFound: This key cannot see the model chosen here - pick another one on the card.
  • plugins.ai.provider.unreachable: The provider could not be reached.
  • plugins.ai.request.failed: The provider refused the request.
  • plugins.ai.response.empty: The provider returned nothing.
  • plugins.ai.response.filtered: The provider withheld the answer under its content policy. Rephrase the prompt.
  • plugins.ai.response.truncated: The answer hit the output limit and was cut off. Ask for less or raise the limit.
  • plugins.ai.response.unusable: The provider answered with something that could not be used.
  • plugins.ai.prompt.required: Say what to generate.
  • plugins.ai.generation.notFound: That generation no longer exists.
  • plugins.ai.generation.failed: The generation failed.
  • plugins.ai.generation.notReady: The provider is still working - it took longer than allowed.
  • plugins.ai.generation.noAsset: The generation produced no file.
  • plugins.ai.document.type.notFound: That content type no longer exists.
  • plugins.ai.document.type.noTextFields: This content type has no text fields to write.
  • plugins.ai.provider.custom.slugInvalid: Use lower-case letters, digits and hyphens, starting with a letter or digit.
  • plugins.ai.provider.custom.baseUrlInvalid: The base URL has to be an http or https address.
  • plugins.ai.provider.custom.hostNotAllowed: That server is on the private network. An administrator has to add it to the instance’s allowed AI hosts (the plugin’s allowedHosts option, usually set with AI_ALLOWED_HOSTS) and restart the instance.
  • plugins.ai.settings.lengths.invalid: Every length needs its own name and a number of words.
  • plugins.ai.design.empty: The model did not design anything usable. Describe it again, more precisely.
  • plugins.ai.workflow.promptRequired: Say what the model should write.
  • plugins.ai.workflow.promptEmpty: The prompt came out empty once its placeholders were filled.
  • plugins.ai.workflow.pictureFailed: The picture could not be drawn: {reason}
  • plugins.ai.workflow.pictureTimeout: The picture was not ready after {seconds} seconds.
  • plugins.ai.workflow.typeGone: The type of document to write no longer exists.
  • plugins.ai.workflow.notJson: The model did not answer with JSON: {excerpt}
  • plugins.ai.license.host: AI runs on a development instance or license here, which serves only local and private hosts. A public host needs a production license.

plugins.website

  • plugins.website.settings.validation.failed: The site settings could not be saved - see the parts marked.
  • plugins.website.design.notFound: That design no longer exists.
  • plugins.website.design.validation.failed: The design could not be saved - some values are not accepted.
  • plugins.website.design.invalid: This value is not accepted.
  • plugins.website.design.versionConflict: Someone else saved this design while you were editing - reload it to see their changes.
  • plugins.website.design.version.notFound: That version of the design no longer exists.
  • plugins.website.design.key.invalid: There is nothing of that name to design in this space.
  • plugins.website.design.notPublished: That design has not been published yet.
  • plugins.website.design.share.invalidExpiry: A preview link lasts between a minute and 30 days.
  • plugins.website.theme.notFound: That theme is not in the gallery of this space.
  • plugins.website.theme.preset.notFound: There is no site design of that name.
  • plugins.website.theme.bundle.invalid: That file is not a Manablox theme, or it is damaged: {issues}
  • plugins.website.theme.code.invalid: A theme defined in code is not valid: {issues}
  • plugins.website.domain.notFound: That domain no longer exists.
  • plugins.website.domain.validation.failed: The domain could not be saved - see the fields marked.
  • plugins.website.domain.hostname.invalid: Enter a host name like www.example.com, without http:// or a path.
  • plugins.website.domain.hostname.taken: Another space already uses that domain.
  • plugins.website.domain.locale.unknown: This space does not have the locale “{locale}”.