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.
| Kind | Status | Meaning |
|---|---|---|
validation | 422 | The input was understood and refused; the details say where. |
bad_request | 400 | The request cannot be acted on as stated. |
unauthorized | 401 | No principal. |
forbidden | 403 | A principal without the permission. |
not_found | 404 | The named thing does not exist, or is not visible to the caller. |
conflict | 409 | The write collides with the current state: a stale version, a duplicate. |
too_large | 413 | The body is larger than the limit, e.g. an upload past the file size limit. |
rate_limited | 429 | Too many requests; wait for the retry-after header. |
unavailable | 503 | The instance cannot serve yet, e.g. a public API with no space to serve. |
internal | 500 | A 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:
| Surface | Carrier |
|---|---|
REST (/v1, /api/v1), uploads, media, transfer, rate limits, unmatched paths | The 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.notFoundapiHost.validation.failedapiHost.hostname.invalidapiHost.hostname.taken
apiKey
apiKey.create.failedapiKey.validation.failed
asset
asset.notFoundasset.create.failedasset.file.requiredasset.file.singleasset.mimeType.notAllowedasset.tooLargeasset.notAnImageasset.crop.outOfBoundsasset.focalPoint.outOfBoundsasset.schedule.invalidWindowasset.spaces.requiredasset.spaces.forbidden
assetVariant
assetVariant.create.failed
audit
audit.notFoundaudit.append.failed
auth
auth.unauthorizedauth.tooManyAttemptsauth.forbiddenauth.superadminRequiredauth.signUp.closedauth.mail.notConfiguredauth.mails.tooManyauth.email.unverifiedauth.email.tokenInvalidauth.twoFactor.enrolmentRequiredauth.twoFactor.policyNeedsFeatureauth.twoFactor.requiredauth.sso.requiredauth.sso.disabledauth.sso.unknownauth.sso.domainauth.sso.bannedauth.sso.noAccountauth.sso.seats
codeCredential
codeCredential.field.unknown
codeResource
codeResource.slug.invalidcodeResource.duplicatecodeResource.ref.unresolved
codeTemplate
codeTemplate.blocks.required
config
config.invalidconfig.scope.unknownconfig.mode.unknownconfig.port.invalidconfig.cache.syncIntervalInvalidconfig.mail.driverUnknownconfig.mail.optionMissingconfig.database.urlMissingconfig.database.urlUnsupportedconfig.auth.secretMissingconfig.admin.notFoundconfig.cors.credentialedWildcardconfig.control.keyMissingconfig.control.webhookUrlInvalidconfig.control.webhookSecretMissingconfig.control.allowedIpInvalidconfig.server.trustedProxyInvalid
content
content.validation.failedcontent.notFoundcontent.notInSpacecontent.create.failedcontent.title.requiredcontent.slug.requiredcontent.slug.duplicatecontent.parent.notFoundcontent.parent.notInSpacecontent.parent.otherLocalecontent.parent.selfcontent.parent.cyclecontent.parent.isDatacontent.data.hasParentcontent.block.type.notFoundcontent.block.type.notABlockcontent.blocks.tooDeepcontent.translation.existscontent.translation.sameLocalecontent.type.isBlockcontent.folder.typeMissingcontent.type.notPublishablecontent.schedule.invalidWindowcontent.schedule.notPublishablecontent.code.immutablecontent.version.conflictcontent.version.notFoundcontent.approval.notRequiredcontent.approval.alreadyPendingcontent.approval.notPendingcontent.approval.notRequestercontent.approval.create.failed
contentType
contentType.validation.failedcontentType.notFoundcontentType.create.failedcontentType.inUsecontentType.code.immutablecontentType.name.invalidcontentType.name.duplicatecontentType.graphqlName.duplicatecontentType.block.flagsNotAllowedcontentType.plugin.unknowncontentType.plugin.invalidcontentType.data.flagsNotAllowedcontentType.field.notFoundcontentType.field.name.invalidcontentType.field.name.duplicatecontentType.field.name.immutablecontentType.field.type.notFoundcontentType.field.blockType.notFoundcontentType.field.blockType.notABlockcontentType.field.subFields.tooDeepcontentType.plan.emptycontentType.plan.name.duplicatecontentType.plan.reference.unknowncontentType.plan.reference.wrongKind
control
control.featurecontrol.limitcontrol.usagecontrol.readOnlycontrol.suspendedcontrol.key.unknowncontrol.scope.notAllowedcontrol.value.invalidcontrol.key.duplicatecontrol.scope.invalidcontrol.ipNotAllowedcontrol.idempotency.mismatchcontrol.owner.exists
credential
credential.validation.failedcredential.notFoundcredential.name.requiredcredential.slug.invalidcredential.slug.takencredential.kind.unknowncredential.field.requiredcredential.oauth.exchangeFailedcredential.code.immutablecredential.create.failed
environment
environment.create.failedenvironment.notFoundenvironment.machineName.invalidenvironment.machineName.takenenvironment.production.undeletableenvironment.promote.notStagingenvironment.promote.confirmRequiredenvironment.promote.failedenvironment.unsupportedenvironment.forbidden
field
field.requiredfield.uniquefield.databag.notFound
fieldType
fieldType.notFoundfieldType.name.invalidfieldType.name.duplicate
graphql
graphql.query.tooDeepgraphql.query.tooComplexgraphql.introspection.disabledgraphql.persisted.requiredgraphql.persisted.notFound
internal
internal.error
invitation
invitation.notFoundinvitation.invalidinvitation.expiredinvitation.grants.requiredinvitation.grant.duplicateinvitation.role.unknowninvitation.space.notFoundinvitation.signInRequiredinvitation.emailMismatch
mail
mail.notConfiguredmail.tokenMissingmail.serviceStatus
media
media.notAnImagemedia.format.unsupportedmedia.preset.notFoundmedia.signature.invalid
menu
menu.create.failedmenu.notFoundmenu.validation.failedmenu.machineName.takenmenu.item.targetRequiredmenu.item.linkNeedsLabelmenu.item.contentNotFoundmenu.item.typeNotAllowed
net
net.blockednet.tooLargenet.tooManyRedirects
notification
notification.notFound
plugin
plugin.extend.contentType.notFoundplugin.id.duplicateplugin.id.reservedplugin.requires.missingplugin.requires.cycleplugin.contribution.unknownplugin.space.requiredplugin.key.invalidplugin.key.duplicateplugin.rpc.unguarded
publicApi
publicApi.space.notFoundpublicApi.space.unresolvedpublicApi.host.unknownpublicApi.schema.notReadOnlypublicApi.scope.managementOnly
push
push.notConfiguredpush.subscriptionInvalidpush.subscription.createFailed
query
query.field.unknownquery.operator.unsupportedquery.sort.unsupportedquery.value.expectedArrayquery.value.expectedNumberquery.limit.invalidquery.offset.invalid
rateLimit
rateLimit.exceeded
redirect
redirect.notFoundredirect.validation.failedredirect.path.invalidredirect.target.requiredredirect.target.selfredirect.target.loopredirect.fromPath.takenredirect.locale.unknown
request
request.invalid
role
role.validation.failedrole.notFoundrole.create.failedrole.inUserole.name.requiredrole.machineName.invalidrole.machineName.reservedrole.machineName.takenrole.permission.unknown
route
route.notFound
secret
secret.keyMissingsecret.undecryptable
service
service.unavailable
snapshot
snapshot.notFoundsnapshot.unsupportedsnapshot.confirmMismatchsnapshot.ownerOnly
space
space.validation.failedspace.notFoundspace.create.failedspace.machineName.takenspace.defaultLocale.notInLocalesspace.plugin.unknownspace.plugin.offspace.plugin.invalidspace.member.lastOwnerspace.member.roleNotFoundspace.assets.mimeType.outsideInstancespace.assets.mimeType.outsideControlspace.assets.maxFileSize.aboveInstancespace.assets.maxFileSize.aboveControlspace.import.existsspace.import.notAnExportspace.import.tooLargespace.import.assetsRefusedspace.import.versionUnsupportedspace.import.typeMissingspace.import.failedspace.import.notResumablespace.import.runningspace.importingspace.starter.typeTaken
spaceGroup
spaceGroup.notFoundspaceGroup.externalId.taken
sso
sso.notFoundsso.validation.failedsso.providerId.invalidsso.providerId.takensso.protocol.requiredsso.url.invalidsso.clientId.requiredsso.clientSecret.requiredsso.discovery.failedsso.certificate.invalidsso.entityId.requiredsso.domains.requiredsso.domain.invalidsso.domain.takensso.landingPath.invalid
storage
storage.driver.notFoundstorage.key.traversalstorage.local.configMissingstorage.s3.configMissing
tag
tag.notFoundtag.name.requiredtag.name.takentag.merge.sameTag
user
user.validation.faileduser.notFounduser.create.faileduser.email.takenuser.self.protecteduser.lastSuperadminuser.password.incorrectuser.password.sameAsCurrentuser.email.same
validation
validation.failedvalidation.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}”.