Error codes
Every code Formerie can send you, what it means, and what to do. Use your browser’s find to jump to a code, such as FORM_CLOSED. Not sure what’s wrong yet? Start with Troubleshooting, which begins from what you see.
How to use this page
Match on the code, not the message. A code is stable, so your code can safely depend on it. A message can
change or be translated, so show it to people and don’t test against it.
{
"ok": false,
"error": {
"code": "FORM_CLOSED",
"message": "This form is no longer accepting submissions.",
"requestId": "c1f4e0a2-7b1d-4a55-9d10-3f6a8e2b7c44"
}
}Contacting us. Most error responses include error.requestId, and the X-Request-Id response header can carry the
same value. When a request fails on our side, with a status of 500 or higher, the app shows it as Reference. Quote it
when you write to us, since it lets us find that exact request.
Reading an entry. Each one gives the code, the HTTP status when there is one, what it means, when it happens, and
what to do. An entry with no status isn’t an HTTP error. It’s a value inside a response, such as a diagnostic or an
item in issues, and each section says where to find it.
Submitting a form
What your page or server gets back when it loads, checks, or submits a public form. The server stops at the first check that fails. A submission was rejected has the order.
FORM_NOT_FOUND(HTTP 404): There’s no published form here that you can reach. When: the workspace or form handle is wrong, the form was never published, Public access is on Unpublished, a custom hostname isn’t connected, or in the app the form isn’t in this workspace. Do: Publish on the Publish tab, and copy the address from there.FORM_DISABLED(HTTP 403): The form is switched off. When: the form or its workspace isn’t enabled. Do: Check the form and workspace in the app. If nothing there explains it, write to us.FORM_NOT_OPEN(HTTP 403): The form isn’t taking responses yet. When: before its Response window opens. Do: Change the window on the Publish tab, or wait.FORM_CLOSED(HTTP 403): The form isn’t taking responses anymore. When: Public access is on Closed, or the Response window has ended. Do: Change them on the Publish tab.FORM_MAINTENANCE(HTTP 503): The form is temporarily unavailable. When: Public access is on Maintenance. Do: Set it back to Public.FORBIDDEN_ORIGIN(HTTP 403): The request came from a site that isn’t allowed. When: theOriginheader isn’t in the form’s allowed origins, or an app request didn’t come from the app. Do: See A CORS or Origin error.VALIDATION_FAILED(HTTP 422): One or more answers or settings failed a check. When: a submission has bad answers, or a saved form has a bad setting. Do: Readerror.issuesanderror.fields. Each item has apath, acode, and amessage, listed below.SPAM_REJECTED(HTTP 403): A spam check caught the submission. When: the hidden field is filled in, it was sent too fast, or it holds too many links. Do: See Rejected as spam.TURNSTILE_FAILED(HTTP 403): Human verification failed, with any provider. When: the token is missing, used, or expired, or the keys or domain don’t match. Do: See Verification failed.RATE_LIMITED(HTTP 429): Too many requests in a short time. When: a form’s Submission limits or a short-term limit on public routes was reached, or a verification or invitation email was resent too soon. Do: Wait, usingRetry-Afterwhen it’s sent, and keep the visitor’s answers on screen.FORM_QUOTA_REACHED(HTTP 409): The form hit its limit of accepted submissions. When: it reached Maximum accepted submissions. Do: Raise or clear the limit under Submission limits, in Settings.DUPLICATE_SUBMISSION(HTTP 409): This submission was already accepted. When: ametadata.idempotencyKeyis sent again. Do: Treat it as a success. Use a new key for each new submission.QUEUE_FAILED(HTTP 503): The email or retry couldn’t be queued. When: a submission or a delivery retry couldn’t be handed off for sending. Do: Try again shortly.
Answers
These arrive in error.issues and error.fields of a VALIDATION_FAILED, one per problem. Show each message next to its
field. Your own validators return the code you gave them. Form definition reference has every option.
FIELD_REQUIRED: A required answer is empty. When: the field is visible andrequired. Do: Ask for an answer. In your own UI, send the exact field name.FIELD_TYPE_INVALID: The answer has the wrong type. When: a number can’t be read as a number, or a value isn’t what the field holds. Do: Send the type the field expects.FIELD_OBJECT_INVALID: A group’s answer isn’t an object. When: agroupfield gets another value. Do: Send groups as nested objects.FIELD_STRING_TOO_SHORT,FIELD_STRING_TOO_LONG: The text’s length is out of range. When: it’s underminor overmax. Do: Change the answer, or the limit.FIELD_STRING_LENGTH_INVALID: The text isn’t the exact length. When: it doesn’t matchexactLength. Do: Change the answer, or the setting.FIELD_STRING_PREFIX_INVALID,FIELD_STRING_SUFFIX_INVALID: The text starts or ends the wrong way. When: it failsstartsWithorendsWith. Do: Change the answer, or the setting.FIELD_STRING_CONTAINS_REQUIRED,FIELD_STRING_CONTAINS_FORBIDDEN: The text is missing required words, or holds refused ones. When: it failscontainsornotContains. Do: Change the answer, or the setting.FIELD_PATTERN_INVALID: The text doesn’t match the format. When: it failspattern. Do: Change the answer, or the pattern.FIELD_VALUE_NOT_ALLOWED: The answer isn’t one of the choices. When: it’s not inallowedValues. Do: Send one of the listed values.FIELD_EMAIL_INVALID: Not an email address. When: anemailanswer fails the format check. Do: Ask for a valid address.FIELD_PHONE_INVALID: Not a phone number. When: it failsphoneFormat, such as+15145550123. Do: Ask for the full number.FIELD_UUID_INVALID: Not a UUID of the right version. When: it failsuuidVersion. Do: Send a valid UUID.FIELD_COUNTRY_CODE_INVALID: Not a country code. When: it failscountryCode. Do: Send a two-letter code.FIELD_POSTAL_CODE_INVALID: Not a postal code for that country. When: it failspostalCodeCountry. Do: Ask for a valid code.FIELD_REGION_CODE_INVALID: Not a region code for that country. When: it failsregionCodeCountry. Do: Ask for a valid code.FIELD_URL_INVALID: Not a web address. When: aurlanswer can’t be read. Do: Ask for a full address.FIELD_URL_PROTOCOL_NOT_ALLOWED: The address uses a refused protocol. When: it’s not inallowedProtocols. Do: Use an allowed one, such ashttps.FIELD_DATE_INVALID: Not a real date. When: adateanswer can’t be read. Do: Ask for a real date.FIELD_DATE_TOO_EARLY,FIELD_DATE_TOO_LATE: The date is out of range. When: it’s beforedateMinor afterdateMax. Do: Change the date, or the range.FIELD_TIME_INVALID: Not a time in the right format. When: it failstimeFormat. Do: SendHH:mmorHH:mm:ss, as the field asks.FIELD_DATETIME_INVALID: Not a date and time in the right format. When: it failsdateTimeFormat. Do: Send ISO 8601 with a time zone.FIELD_NUMBER_TOO_SMALL,FIELD_NUMBER_TOO_LARGE: The number is out of range. When: it’s underminor overmax. Do: Change the answer, or the range.FIELD_INTEGER_REQUIRED: The number must be whole. When:integeris on. Do: Ask for a whole number.FIELD_DECIMAL_PLACES_INVALID: Too many decimals. When: it’s overmaxDecimalPlaces. Do: Round the answer, or raise the setting.FIELD_ACCEPTED_REQUIRED: A consent box wasn’t accepted. When:acceptedis on and the box isn’t checked. Do: Ask the person to accept.FIELD_SELECTION_TOO_FEW,FIELD_SELECTION_TOO_MANY: The wrong number of options is selected. When: it’s underminSelectionsor overmaxSelections. Do: Change the selection, or the limits.FIELD_ARRAY_TOO_SHORT,FIELD_ARRAY_TOO_LONG: A list has the wrong number of items. When: it’s underminItemsor overmaxItems. Do: Change the list, or the limits.FIELD_ARRAY_DUPLICATES: A list repeats an item. When:uniqueItemsis on. Do: Remove the repeats.
Saving a form
When a change to a form is refused. The first code is the response’s own. The others arrive in error.issues of a VALIDATION_FAILED, each with a path to the setting. Fix those paths and save again.
CONFIG_VERSION_CONFLICT(HTTP 409): The form or workspace changed since you loaded it. When: someone else saved first, or an older tab saves. Do: Reload, then make your change again.
Any setting
FORM_CONFIG_UNKNOWN_KEY: That key isn’t a setting there. When: a key is misspelled or in the wrong place. Do: Use the key insuggestionwhen there is one, or remove it.FORM_CONFIG_OBJECT_REQUIRED,FORM_CONFIG_ARRAY_REQUIRED,FORM_CONFIG_STRING_REQUIRED,FORM_CONFIG_STRING_ARRAY_REQUIRED,FORM_CONFIG_STRING_MAP_REQUIRED,FORM_CONFIG_BOOLEAN_REQUIRED,FORM_CONFIG_NUMBER_REQUIRED,FORM_CONFIG_INTEGER_REQUIRED: A setting has the wrong type. When: the value atpathisn’t what the name says, such as an object or a whole number. Do: Send that type.FORM_CONFIG_ARRAY_TOO_SHORT,FORM_CONFIG_ARRAY_TOO_LONG: A list has too few or too many entries. When: it’s outside the bounds inmessage. Do: Add or remove entries.FORM_CONFIG_STRING_TOO_LONG: A text setting is too long. When: it’s over the length inmessage. Do: Shorten it.FORM_CONFIG_NUMBER_TOO_SMALL: A number is below its minimum. When: it’s under the value inmessage. Do: Raise it.FORM_CONFIG_RANGE_INVALID: A minimum is above its maximum. When: a pair such asminandmaxis reversed. Do: Swap or fix them.FORM_CONFIG_ENUM_INVALID: The value isn’t one of the options. When: it’s not in the list inmessage. Do: Use a listed value.FORM_CONFIG_ID_DUPLICATE: Two entries share anid. When: a list repeats one. Do: Give each entry its own.FORM_CONFIG_CODE_INVALID: A customcodeis badly formed. When: it has anything but capitals, digits, and_. Do: Use a code likeCUSTOM_POSTAL_CODE.FORM_CONFIG_FIELD_PATH_INVALID: A field path is badly formed. When: it doesn’t use dots and brackets. Do: Write it likecontact.email.FORM_CONFIG_URL_INVALID,FORM_CONFIG_URL_PROTOCOL_INVALID: A web address setting is invalid. When: it can’t be read, or doesn’t use an allowed protocol. Do: Use a fullhttpsaddress.FORM_CONFIG_EMAIL_INVALID: An email setting is invalid. When: it isn’t an address. Do: Fix the address.FORM_CONFIG_DATE_INVALID,FORM_CONFIG_DATETIME_INVALID: A date setting is invalid. When: a date isn’t a realYYYY-MM-DD, or a date and time has no time zone. Do: Fix the format.FORM_CONFIG_COLOR_INVALID: A color is invalid. When: it isn’t a#RRGGBBvalue. Do: Use that format.FORM_CONFIG_CSS_LENGTH_INVALID: A size is invalid. When: it isn’t a safe length. Do: Use a value like44rem,720px,90%, or72ch.FORM_CONFIG_LANGUAGE_INVALID: The language is invalid. When: it isn’t a language tag. Do: Use one likeen-CAorfr-CA.FORM_CONFIG_MESSAGES_INVALID: A message list is invalid. When: it isn’t an object of text values. Do: Send text for each one.
Fields
FORM_CONFIG_FIELDS_REQUIRED: The form has no fields. When: the list is empty. Do: Add a field.FORM_CONFIG_FIELD_INVALID: A field isn’t an object. When: an entry underfieldsis another value. Do: Send an object with atype.FORM_CONFIG_FIELD_TYPE_INVALID: The field type doesn’t exist. When:typeisn’t one of the twelve. Do: See Form definition reference.FORM_CONFIG_TOO_MANY_FIELDS,FORM_CONFIG_NESTING_TOO_DEEP: The form is too big. When: it has too many fields or nested levels. Do: Simplify it. The limit is inmessage.FORM_CONFIG_FIELD_OPTION_INVALID: That option doesn’t work here. When: it doesn’t apply to this field type or has a bad value. Do: Readmessage, then remove or fix it.FORM_CONFIG_FIELD_OPTION_CONFLICT: Two options can’t be used together. When: such asexactLengthwithmin. Do: Keep one.FORM_CONFIG_DEFAULT_VALUE_INVALID,FORM_CONFIG_DEFAULT_VALUE_NOT_ALLOWED:defaultValuedoesn’t fit. When: it has the wrong type, or isn’t inallowedValues. Do: Change it.FORM_CONFIG_COUNTRY_CODE_INVALID,FORM_CONFIG_COUNTRY_UNSUPPORTED: A country setting is invalid. When:countryCodeisn’tiso2, or a postal or region check isn’tCAorUS. Do: Use those values.FORM_CONFIG_PHONE_FORMAT_INVALID,FORM_CONFIG_UUID_VERSION_INVALID,FORM_CONFIG_TIME_FORMAT_INVALID,FORM_CONFIG_DATETIME_FORMAT_INVALID: A format setting is invalid. When: it isn’te164,any,v4,v7,HH:mm,HH:mm:ss, oriso8601, as that setting allows. Do: Use one of those.FORM_CONFIG_URL_PROTOCOL_UNSAFE: A protocol isn’t safe. When:allowedProtocolsholds one that’s refused as unsafe. Do: Remove it.FORM_CONFIG_REGEX_PATTERN_INVALID,FORM_CONFIG_REGEX_PATTERN_TOO_LONG,FORM_CONFIG_REGEX_FLAGS_INVALID: A regular expression is refused. When: it doesn’t compile, is too long, or has flags other thani,m, andu. Do: Fix it.FORM_CONFIG_PROCESSOR_REQUIRED,FORM_CONFIG_PIPELINE_STEP_INVALID,FORM_CONFIG_TOO_MANY_PROCESSORS: A field’s pipeline is invalid. When: it’s empty, has too many steps, or a step isn’t a sanitizer, validator, or transformer. Do: Fix the steps.FORM_CONFIG_SANITIZER_TYPE_INVALID,FORM_CONFIG_TRANSFORMER_TYPE_INVALID,FORM_CONFIG_CASE_TRANSFORM_INVALID,FORM_CONFIG_TOO_MANY_MAP_ENTRIES: A sanitizer or transformer is refused. When: the type doesn’t exist, the case isn’tupperorlower, or a map is too long. Do: See Form definition reference.
Validators and conditions
FORM_CONFIG_VALIDATOR_INVALID: The validatortypedoesn’t exist. When: it’s misspelled or unsupported. Do: Use a listed type.FORM_CONFIG_VALIDATOR_REQUIRED: A rule has nothing to check. When: an action has novalidatororvalidatorRef. Do: Add one.FORM_CONFIG_VALIDATOR_REF_UNKNOWN: AvalidatorRefpoints to nothing. When: no preset has that name. Do: Fix the name.FORM_CONFIG_VALIDATOR_TOO_DEEP,FORM_CONFIG_TOO_MANY_VALIDATORS,FORM_CONFIG_TOO_MANY_RULES: Rules are too big. When: they’re nested too deeply, or there are too many. Do: Simplify them. The limit is inmessage.FORM_CONFIG_RULE_ID_DUPLICATE: Two validation rules share an ID. When: anidrepeats. Do: Change one.FORM_CONFIG_FIELD_REF_UNKNOWN: A path names a field that doesn’t exist. When: a field was renamed or removed. Do: Fix the path.FORM_CONFIG_FIELD_REF_NOT_SCALAR,FORM_CONFIG_FIELD_REF_TYPE_INVALID: A path names the wrong kind of field. When: it points to a group, or to a type this setting can’t use. Do: Point to a suitable field.FORM_CONFIG_CONDITION_OPERATOR_INVALID: The conditionoperatordoesn’t exist. When: it’s misspelled or unsupported. Do: See Conditions.FORM_CONFIG_CONDITION_REQUIRED: A condition group is empty. When: it has no conditions. Do: Add one, or remove the group.FORM_CONFIG_CONDITION_TOO_DEEP,FORM_CONFIG_TOO_MANY_CONDITIONS,FORM_CONFIG_TOO_MANY_NAMED_CONDITIONS,FORM_CONFIG_NAMED_CONDITION_TOO_LONG: Conditions are too big. When: they’re nested too deeply, too many, or too long. Do: Simplify them. The limit is inmessage.FORM_CONFIG_VISIBILITY_RULE_ID_DUPLICATE,FORM_CONFIG_VISIBILITY_RULE_PATH_DUPLICATE: Visibility rules overlap. When: two share an ID, or target the same field. Do: Keep one per field.FORM_CONFIG_VISIBILITY_STATE_INVALID: The visibility state is invalid. When: it isn’tvisibleorhidden. Do: Use one of those.
Steps and content
FORM_CONFIG_TOO_MANY_STEPS,FORM_CONFIG_STEP_SUMMARY_TOO_LONG: Steps are too big. When: there are too many, or a summary is too long. Do: Shorten them. The limit is inmessage.FORM_CONFIG_STEP_VALIDATE_ON_INVALID:validateOnis invalid. When: it isn’tchange,blur, orstepSubmit. Do: Use one of those.FORM_CONFIG_CONTENT_BLOCK_TYPE_INVALID: The content block type doesn’t exist. When: it isn’ttextorseparator. Do: Use one of those.FORM_CONFIG_CONTENT_BLOCK_POSITION_CONFLICT: A block has two positions. When: it’s set both before and after a field. Do: Keep one.FORM_CONFIG_TOO_MANY_CONTENT_BLOCKS,FORM_CONFIG_CONTENT_BLOCK_TOO_LONG: Content blocks are too big. When: there are too many, or one is too long. Do: Shorten them. The limit is inmessage.
Limits, origins, and address
FORM_CONFIG_RATE_LIMIT_TOO_HIGH: A rate limit is above its upper bound. When: arateLimitswindow ormaxis too high. Do: Lower it. See Spam and limits.FORM_CONFIG_LIMIT_SCOPE_INVALID,FORM_CONFIG_QUOTA_PERIOD_INVALID: A limit setting is invalid. When: the rate limit or quota scope, or the quota period, doesn’t exist. Do: Use a listed value.FORM_CONFIG_ORIGIN_INVALID: An allowed origin is invalid. When: it has a path, is empty, or isn’thttporhttps. Do: Use only the address, likehttps://example.com.FORM_CONFIG_ORIGIN_WILDCARD: An allowed origin uses a wildcard. When: it holds*. Do: List each address.FORM_CONFIG_PRIMARY_PUBLIC_TARGET_KIND_INVALID,FORM_CONFIG_PRIMARY_PUBLIC_TARGET_BINDING_INVALID,FORM_CONFIG_PRIMARY_PUBLIC_TARGET_HOSTNAME_INVALID: The public address setting is invalid. When: a kind, binding, or hostname isn’t a valid value. Do: Choose the address again on the Publish tab.FORM_CONFIG_PRIMARY_PUBLIC_TARGET_HOSTNAME_NOT_FOUND: That hostname isn’t in this workspace. When: it was removed, or belongs elsewhere. Do: Choose one under Domains.FORM_CONFIG_PRIMARY_PUBLIC_TARGET_HOSTNAME_NOT_READY: That hostname isn’t ready. When: it isn’t verified and enabled. Do: Finish its setup under Domains.FORM_CONFIG_PRIMARY_PUBLIC_TARGET_BINDING_MISMATCH: The hostname is connected differently. When: its connection to a workspace or a form doesn’t match. Do: Check its connection under Domains.
Human verification
FORM_CONFIG_VERIFICATION_PROVIDER_INVALID,FORM_CONFIG_VERIFICATION_MODE_INVALID: The verification choice is invalid. When: the provider doesn’t exist, the mode isn’tmanagedorcustom, or managed mode isn’t used with Turnstile. Do: Choose again under Human verification.FORM_CONFIG_SITE_KEY_REQUIRED,FORM_CONFIG_SITE_KEY_INVALID: The site key is missing or invalid. When: verification is on with your own keys. Do: Paste the site key from your provider.FORM_CONFIG_VERIFICATION_SECRET_REQUIRED: The secret key is missing. When: custom verification is on. Do: Paste the secret key from your provider.FORM_CONFIG_VERIFICATION_SECRET_PLAINTEXT: A secret isn’t encrypted. When: a definition holds it as plain text. Do: Enter it under Human verification, which encrypts it.FORM_CONFIG_VERIFICATION_SECRET_ENCRYPTION_UNAVAILABLE: The secret key couldn’t be encrypted. When: something is wrong on our side. Do: Write to us.FORM_CONFIG_SCORE_INVALID: Minimum score is invalid. When: it isn’t between 0 and 1. Do: Pick a value in that range.
Delivery settings
The app writes these settings for you from the Delivery tab and Destinations, and the form update doesn’t accept them. So you’d only see them if a stored form holds a bad value.
FORM_CONFIG_PROVIDER_INVALID,FORM_CONFIG_PROVIDER_DUPLICATE,FORM_CONFIG_PROVIDER_ACCESS_INVALID,FORM_CONFIG_SECRET_REF_INVALID,FORM_CONFIG_PROVIDER_RECIPIENTS_UNSUPPORTED: The form’s email provider settings are invalid. When: a provider isn’t supported or is repeated, its access settings are wrong, or it can’t send to these recipients. Do: Review Destinations, then save the Delivery tab again.FORM_CONFIG_FALLBACK_TRIGGER_INVALID,FORM_CONFIG_FIELD_POLICY_EMPTY,FORM_CONFIG_TOO_MANY_FALLBACK_PROVIDERS: The fallback provider settings are invalid. When: a trigger isn’t supported, a field policy is empty, or there are too many. Do: Save the Delivery tab again, or write to us.FORM_CONFIG_SMTP_HOST_REQUIRED,FORM_CONFIG_SMTP_HOST_INVALID,FORM_CONFIG_SMTP_PORT_REQUIRED,FORM_CONFIG_SMTP_PORT_INVALID,FORM_CONFIG_SMTP_SECURITY_REQUIRED,FORM_CONFIG_SMTP_SECURITY_INVALID,FORM_CONFIG_SMTP_USERNAME_REQUIRED,FORM_CONFIG_SMTP_PASSWORD_SECRET_REQUIRED: An SMTP setting is missing or invalid. When: the host isn’t a hostname, the port isn’t 465, 587, or 2525, the security doesn’t suit the port, or a credential is missing. Do: Reconnect the provider under Destinations.FORM_CONFIG_MAILGUN_DOMAIN_REQUIRED,FORM_CONFIG_MAILGUN_DOMAIN_INVALID,FORM_CONFIG_MAILGUN_REGION_INVALID: A Mailgun setting is missing or invalid. When: the sending domain isn’t a hostname, or the region isn’tusoreu. Do: Reconnect the provider under Destinations.FORM_CONFIG_DELIVERY_RULE_EMPTY,FORM_CONFIG_DELIVERY_RULE_ID_DUPLICATE,FORM_CONFIG_DELIVERY_RULE_RECIPIENTS_EMPTY,FORM_CONFIG_DELIVERY_RULE_TEMPLATES_EMPTY,FORM_CONFIG_TOO_MANY_DELIVERY_RULES: A delivery rule is invalid. When: it changes nothing, repeats an ID, has an empty list, or there are too many. Do: Review the rules on the Delivery tab.FORM_CONFIG_TEMPLATE_INVALID,FORM_CONFIG_EMAIL_TEMPLATE_HTML_UNSAFE: The form’s email template is refused. When: it can’t be read, or its HTML isn’t safe to send. Do: See Notification Templates.
Publishing
What can stop a form going live, and what the Publish tab warns you about. Blockers and warnings arrive with a code, a message, and often a fix, under Delivery readiness.
Refused
FORM_DELIVERY_NOT_READY(HTTP 409): The form has blockers. When: you publish while the items below remain. Do: Clear what Delivery readiness lists.FORM_NOT_PUBLISHED(HTTP 409): There’s no published version yet. When: you set Public access before the first publish. Do: Publish first.
Blockers
FORM_CONFIG_CHOICES_REQUIRED: A question has no choices, so nobody can answer it. When: a choice field has noallowedValues. Do: List the choices.FORM_CONFIG_CHOICE_BLANK,FORM_CONFIG_CHOICE_DUPLICATE: A choice is blank, or listed twice. When:allowedValuesholds one. Do: Fix the list.FORM_CONFIG_STEP_FIELD_DUPLICATE: A field is in more than one step. When: two steps list it. Do: Keep it in one.FORM_DELIVERY_SENDER_NOT_READY: The chosen sender can’t send. When: it isn’t verified or active. Do: Confirm it under Senders, or choose another.FORM_DELIVERY_RECIPIENTS_NOT_READY: No recipient can receive email. When: none of the form’s recipients is usable. Do: Have one confirm by email, or add another under Delivery.FORM_CONFIG_VERIFICATION_SECRET_MISSING: Human verification has no secret key. When: custom verification is on with no stored key, or managed keys aren’t available. Do: Enter the key under Human verification. For managed keys, write to us.FORM_CONFIG_VERIFICATION_SITE_KEY_MISSING,FORM_CONFIG_VERIFICATION_SECRET_KEY_UNAVAILABLE,FORM_CONFIG_PROVIDER_BINDING_MISSING,FORM_CONFIG_PROVIDER_SECRET_MISSING: Something this form needs isn’t available on our side. When: a managed key, an encryption key, or a provider’s access can’t be found. Do: Reconnect the provider under Destinations, if you use one. Otherwise write to us.
Warnings and advice
None of these stops you from publishing.
FORM_DELIVERY_STORE_ONLY: Responses will be kept but not emailed. When: the form has no recipients. Do: Add one under Delivery if you want email.FORM_DELIVERY_RECIPIENTS_PARTIALLY_BLOCKED: Some recipients can’t receive email. When: at least one is usable and others aren’t. Do: Have them confirm, or re-enable them.FORM_DELIVERY_TEST_NOT_SENT: You haven’t sent a test yet. When: delivery is set up with no test. Do: Choose Send delivery test.FORM_DELIVERY_TEST_STALE: Delivery settings changed after the last test. When: you changed them since. Do: Send another test.FORM_DELIVERY_TEST_FAILED: The last test didn’t succeed. When: the latest test failed. Do: Fix the cause, then test again.FORM_DEFINITION_UNKNOWN_KEYS: The form holds settings that do nothing. When: usually it’s from before these keys were refused. Do: Save that section again without them.FORM_PUBLISH_ORIGINS_MISSING: No website address is listed. When: you choose API-only with no allowed origins, so browsers would refuse your site’s requests. Do: Add it under Your website addresses.
Setup checklist
The workspace’s setup steps can return these as their code.
SETUP_NO_FORM,SETUP_FORM_HAS_NO_FIELDS: There’s no form to work with yet. When: the workspace has no form, or it has no fields. Do: Create the form, and add a field.SETUP_NOT_PUBLISHED,SETUP_UNPUBLISHED_CHANGES: The form isn’t live, or its latest changes aren’t. When: it was never published, or the draft has moved on. Do: Publish on the Publish tab.SETUP_NO_RESPONSES: No response has come in yet. When: the form is new. Do: Send yourself a test response.
Delivery
Each row under Deliveries has a diagnostic code, and may also have the raw error code from the attempt. See My email didn’t arrive.
Diagnostics
DELIVERY_QUEUED,DELIVERY_WAITING_FOR_ATTEMPT: Delivery is waiting for an attempt. When: it hasn’t run yet. Do: Nothing yet.DELIVERY_ATTEMPT_RECORDED: An attempt is on record, with its status from the provider. When: the row has no more specific diagnostic. Do: Nothing unless the status says it failed.DELIVERY_ACCEPTED,DELIVERY_COMPLETED: The provider accepted the email. When: the attempt succeeded. Do: If it hasn’t arrived, see Delivered, but not in the inbox.DELIVERY_PROVIDER_UNREACHABLE_RETRYING,DELIVERY_PROVIDER_TEMPORARY_ERROR: A temporary problem with the provider. When: an attempt failed and another will run. Do: Nothing yet. Formerie will try again.DELIVERY_STALLED: Delivery stopped retrying after a temporary error. When: its attempts didn’t finish. Do: Open the response and retry.DELIVERY_RECIPIENTS_UNAVAILABLE: No active, verified recipient. When: none can receive this response. Do: Have the recipient confirm by email, or add another under Delivery.DELIVERY_SENDER_UNAVAILABLE: The chosen sender isn’t active or verified. When: at sending time. Do: Confirm it under Senders, or set Send from back to the Formerie default.DELIVERY_CREDENTIALS_MISSING: The provider is missing its credentials. When: its key or password isn’t available. Do: Reconnect it under Destinations.DELIVERY_PROVIDER_NOT_FOUND: The configured provider couldn’t be used. When: it was removed or isn’t available. Do: Review Destinations and the Delivery tab.DELIVERY_PROVIDER_UNREACHABLE: The provider couldn’t be reached. When: the final attempt had a network failure. Do: Check the provider’s status, then retry.DELIVERY_PROVIDER_ERROR: The provider didn’t accept the email. When: it refused the final attempt. Do: Check its status and your settings with it, then retry.DELIVERY_FAILED: Delivery failed before the provider accepted it. When: no more specific diagnostic applies. Do: Review the sender, recipients, and provider, then retry.
Raw error codes
The same failures, as the attempt recorded them. Fix them the way the diagnostic says.
EMAIL_RECIPIENTS_UNAVAILABLE,EMAIL_SENDER_UNAVAILABLE,EMAIL_PROVIDER_NOT_FOUND: Shown with the matchingDELIVERY_diagnostic above. When: recipients, the sender, or the provider weren’t usable at sending time. Do: See that diagnostic.RESEND_API_KEY_MISSING,SENDGRID_API_KEY_MISSING,MAILGUN_API_KEY_MISSING,POSTMARK_TOKEN_MISSING,BREVO_API_KEY_MISSING,MAILTRAP_API_KEY_MISSING,MANDRILL_API_KEY_MISSING,SENDER_API_KEY_MISSING,SMTP2GO_API_KEY_MISSING: That provider’s key is missing. When: the attempt couldn’t find it. Do: Reconnect the provider under Destinations.RESEND_NETWORK_ERROR,SENDGRID_NETWORK_ERROR,MAILGUN_NETWORK_ERROR,POSTMARK_NETWORK_ERROR,BREVO_NETWORK_ERROR,MAILTRAP_NETWORK_ERROR,MANDRILL_NETWORK_ERROR,SENDER_NETWORK_ERROR,SMTP2GO_NETWORK_ERROR,SMTP_NETWORK_ERROR: That provider couldn’t be reached. When: the request failed on the network. Do: Check the provider’s status. Formerie retries temporary failures.RESEND_SEND_FAILED,SENDGRID_SEND_FAILED,MAILGUN_SEND_FAILED,POSTMARK_SEND_FAILED,BREVO_SEND_FAILED,MAILTRAP_SEND_FAILED,MANDRILL_SEND_FAILED,SENDER_SEND_FAILED,SMTP2GO_SEND_FAILED,SMTP_SEND_FAILED,CLOUDFLARE_EMAIL_SEND_FAILED: The email service refused the email. When: it answered with an error. Do: Check the service’s status and your settings with it, then retry. For the Formerie default address, write to us if it repeats.CLOUDFLARE_EMAIL_BINDING_NOT_CONFIGURED: The Formerie default email service isn’t available. When: something is wrong on our side. Do: Write to us.E_RATE_LIMIT_EXCEEDED,E_DELIVERY_FAILED,E_INTERNAL_SERVER_ERROR: The Formerie default email service had a temporary problem. When: it reports one of these, or another code starting withE_. Do: Nothing yet for these three, since Formerie tries again. Write to us if it repeats.MAILGUN_DOMAIN_MISSING,MAILGUN_REGION_INVALID: A Mailgun setting is missing or invalid at sending time. When: the sending domain or region can’t be used. Do: Reconnect the provider under Destinations.SENDER_UNSUPPORTED_MESSAGE: Sender.net can’t send this email. When: the message has more than this provider supports, such as several recipients. Do: Use one primary recipient, or another provider.SMTP_HOST_MISSING,SMTP_PORT_INVALID,SMTP_SECURITY_INVALID,SMTP_USERNAME_MISSING,SMTP_PASSWORD_MISSING: An SMTP setting is missing or invalid. When: the attempt can’t connect without it. Do: Reconnect the provider under Destinations.SMTP_GREETING_FAILED,SMTP_EHLO_FAILED,SMTP_STARTTLS_UNAVAILABLE,SMTP_STARTTLS_FAILED,SMTP_AUTH_FAILED: The SMTP server refused the connection or the login. When: at that step of the exchange. Do: Check the host, port, security, and credentials with your provider.SMTP_MAIL_FROM_FAILED,SMTP_RCPT_TO_FAILED,SMTP_DATA_FAILED: The SMTP server refused the sender, a recipient, or the message. When: at that step of the exchange. Do: Check that your provider allows this sender and recipient.
Retrying
DELIVERY_NOT_RETRYABLE(HTTP 409): This delivery can’t be retried now. When: only a failed or stuck delivery can be, so one that’s already delivered can’t. Do: Nothing, unless it failed for another reason.DELIVERY_ATTEMPT_IN_PROGRESS(HTTP 409): An attempt is running. When: you retry during one. Do: Wait for its result.
Test emails
FORM_DELIVERY_TEST_NOT_READY(HTTP 409): The form can’t send a test yet. When: a sender or recipient isn’t ready, or there are no recipients. Do: Follow Delivery readiness.FORM_DELIVERY_TEST_NO_RECIPIENTS(HTTP 409): The sample answers match no recipient. When: recipient conditions exclude them all. Do: Change the sample answers under Preview, or review the conditions.FORM_DELIVERY_TEST_RATE_LIMITED(HTTP 429): Tests are sent too fast. When: you send more than one a minute. Do: Wait a minute.FORM_DELIVERY_TEST_PAYLOAD_TOO_LARGE(HTTP 413): The sample answers are too big. When: they’re over 64 KB. Do: Shorten them.FORM_DELIVERY_TEST_SEND_FAILED(HTTP 502): The provider couldn’t confirm the test. When: it refused the email or didn’t answer. Do: Check the sender and provider, and whether the recipient got it, then try again.FORM_DELIVERY_TEST_RESULT_NOT_RECORDED(HTTP 500): The test’s result couldn’t be saved. When: something failed on our side. Do: Check the recipient’s inbox, then try again.
Signing in
Your account, your sign-in methods, and your session.
UNAUTHORIZED(HTTP 401): You aren’t signed in, or the credentials didn’t work. When: a session expired, a password, link, or passkey is wrong or expired. Do: Sign in again, or request a new link.AUTH_RATE_LIMITED(HTTP 429): Too many attempts or account changes. When: in a short time. Do: Wait for the time inmessage.AUTH_RECENT_AUTH_REQUIRED(HTTP 403): This change needs a fresh sign-in. When: you change something sensitive long after signing in. Do: Sign in again, then repeat it.AUTH_SIGNUP_PASSWORD_REQUIRED(HTTP 409): This signup set a password. When: you confirm the email link without it. Do: Enter the password chosen at signup, or continue without one.AUTH_SIGNUP_PASSWORD_INCORRECT(HTTP 401): That isn’t the password chosen at signup. When: you confirm the email link with another one. Do: Enter the right one, or continue without a password.AUTH_EMAIL_IN_USE(HTTP 409): Another account uses this email. When: you change your address to it. Do: Use another address, or sign in to that account.AUTH_IDENTITY_NOT_FOUND(HTTP 404): That sign-in method isn’t connected. When: you remove a password, passkey, or provider you don’t have. Do: Reload Sign-In & Security.AUTH_LAST_ACCESS_METHOD(HTTP 409): This is your only way to sign in. When: you remove your last password, passkey, or provider. Do: Add another one first.AUTH_ACCOUNT_DELETE_BLOCKED(HTTP 409): Your account still owns things that need a decision. When: you delete an account with workspaces or forms to settle. Do: Resolve the ones listed. See Delete your data.AUTH_MFA_INVALID(HTTP 401): The authenticator or recovery code is wrong. When: at sign-in or a security change. Do: Enter a current code.AUTH_MFA_NOT_ENABLED(HTTP 409): Authenticator verification isn’t on. When: you use a code without it. Do: Turn it on first.AUTH_MFA_SETUP_REQUIRED(HTTP 404): The authenticator setup wasn’t found. When: you confirm a setup that was never started or has expired. Do: Start again.AUTH_MFA_CURRENT_FACTOR_REQUIRED(HTTP 403): Replacing your authenticator needs proof. When: you set up a new one. Do: Enter a code from the current app, or a recovery code.AUTH_MFA_SECRET_UNAVAILABLE(HTTP 500): Authenticator verification is temporarily unavailable. When: something is wrong on our side. Do: Try again later, and write to us with the Reference if it repeats.
Sign-in with a provider
After Google, Apple, or GitHub, you come back to the app with one of these lowercase values as error in the address. They aren’t
HTTP errors. The app shows a message for them.
oauth_failed: The provider reported a failure. When: you cancelled, or it sent back an error. Do: Try again.bad_callback: The provider’s reply was incomplete. When: it’s missing what Formerie needs. Do: Try again from the sign-in page.invalid_state: The sign-in attempt expired. When: it took too long, or finished in another browser. Do: Start again from the sign-in page.provider_rejected: The provider refused the exchange. When: after you approved it. Do: Try again, or use another method.provider_not_configured: This provider isn’t available. When: it’s not set up. Do: Use another method.account_disabled: This account is disabled. When: at sign-in. Do: Write to us.user_not_found: The account wasn’t found. When: while connecting a provider to it. Do: Sign in again.provider_email_required: The provider gave no verified email. When: the account there has none. Do: Verify the email with the provider, or use another method.provider_email_in_use: Another account uses that provider’s email. When: you connect a provider. Do: Use another provider account, or sign in to that account.provider_in_use: That provider account is connected to another account. When: you connect it. Do: Disconnect it there first.provider_slot_in_use: You already have an account from this provider connected. When: you connect a different one. Do: Disconnect the existing one first.
Managing your workspace
Workspaces, people, domains, recipients, senders, providers, and templates in the app.
Workspaces, forms, and responses
WORKSPACE_NOT_FOUND(HTTP 404): The workspace doesn’t exist, or you can’t see it. When: a wrong ID, or lost access. Do: Check the address, or ask an owner.WORKSPACE_HANDLE_CONFLICT(HTTP 409): That public handle is taken. When: you create or rename a workspace. Do: Choose another.WORKSPACE_ID_CONFLICT(HTTP 409): A workspace with this ID already exists. When: you create one with an ID already in use. Do: Try again with another handle.WORKSPACE_HAS_FORMS,WORKSPACE_HAS_MEMBERS(HTTP 409): The workspace can’t be permanently deleted yet. When: it still has forms, or other members. Do: Remove them first.WORKSPACE_NOT_DELETED(HTTP 409): It isn’t in the trash. When: you permanently delete it directly. Do: Move it to the trash first.FORM_HANDLE_CONFLICT(HTTP 409): That handle is taken in this workspace. When: you create or rename a form. Do: Choose another.FORM_HAS_SUBMISSIONS(HTTP 409): The form can’t be permanently deleted yet. When: it still has submissions. Do: Delete them first. See Delete your data.FORM_NOT_DELETED(HTTP 409): It isn’t in the trash. When: you permanently delete it directly. Do: Move it to the trash first.SUBMISSION_NOT_FOUND(HTTP 404): The response doesn’t exist, or you can’t see it. When: it was deleted, or the ID is wrong. Do: Open it from Submissions.
Members and invitations
MEMBERSHIP_NOT_FOUND(HTTP 404): That member wasn’t found. When: they were removed. Do: Reload the list.WORKSPACE_MEMBER_CONFLICT,FORM_MEMBER_CONFLICT(HTTP 409): This email already has access. When: you add or invite them. Do: Change their existing access instead.FORM_MEMBER_NOT_FOUND(HTTP 404): That form member wasn’t found. When: they were removed. Do: Reload the list.WORKSPACE_LAST_OWNER(HTTP 409): A workspace must keep an active owner. When: you remove or demote the last one. Do: Make someone else owner first.WORKSPACE_SELF_OWNER(HTTP 409): You can’t change your own owner access. When: you try it on yourself. Do: Ask another active owner.WORKSPACE_INVITATION_CONFLICT,FORM_INVITATION_CONFLICT(HTTP 409): This email already has a pending invitation. When: you invite them again. Do: Resend the existing one.WORKSPACE_INVITATION_NOT_FOUND,FORM_INVITATION_NOT_FOUND(HTTP 404): That invitation wasn’t found. When: it was removed or already used. Do: Reload, or send a new one.WORKSPACE_INVITATION_INVALID(HTTP 400): The invitation link is invalid or expired. When: you open an old link. Do: Ask for a new invitation.WORKSPACE_INVITATION_MEMBERSHIP_DISABLED,FORM_INVITATION_MEMBERSHIP_DISABLED(HTTP 403): Your access to this workspace was disabled. When: you accept an invitation. Do: Ask a workspace admin to restore it.INVITATION_EMAIL_MISMATCH(HTTP 403): The invitation was sent to another address. When: you’re signed in with a different email. Do: Sign in with that address.
Domains
DOMAIN_NOT_FOUND,DOMAIN_OWNERSHIP_NOT_FOUND(HTTP 404): The domain wasn’t found. When: it was removed, or isn’t in this workspace. Do: Reload Domains.DOMAIN_NOT_VERIFIED(HTTP 409): The domain isn’t verified yet. When: you enable it first. Do: Finish the DNS steps, and choose Verify DNS.DOMAIN_HOSTNAME_RESERVED(HTTP 400): Formerie reserves this hostname. When: you add it. Do: Use another.DOMAIN_HOSTNAME_CONFLICT(HTTP 409): The hostname is already connected to a workspace. When: you add it again. Do: Remove it there first.DOMAIN_OWNED_BY_OTHER_WORKSPACE(HTTP 409): Another workspace verified the domain above this hostname. When: you add it. Do: Add it from that workspace.DOMAIN_OWNERSHIP_CONFLICT(HTTP 409): This domain is already verified in the workspace. When: you add it again. Do: Use the existing one.DOMAIN_OWNERSHIP_SCOPE_MISMATCH(HTTP 409): The hostname isn’t under the chosen domain. When: they don’t match. Do: Choose the matching verified domain.DOMAIN_ROUTE_CONFLICT(HTTP 409): Another form uses this hostname and path. When: you connect a form. Do: Choose another path.DOMAIN_HAS_ROUTES,DOMAIN_OWNERSHIP_HAS_ROUTES(HTTP 409): The domain still has form routes. When: you permanently delete it. Do: Remove the routes first.DOMAIN_NOT_DELETED,DOMAIN_OWNERSHIP_NOT_DELETED(HTTP 409): It isn’t in the trash. When: you permanently delete it directly. Do: Move it to the trash first.HOSTNAME_BINDING_CONFLICT(HTTP 409): Another subdomain uses that connection. When: you connect a form or workspace. Do: Choose another.HOSTNAME_BINDING_FORM_NOT_FOUND(HTTP 404): That form isn’t in this workspace. When: you connect a hostname to it. Do: Choose a form in this workspace.CLOUDFLARE_CUSTOM_HOSTNAME_FAILED(HTTP 502): The custom hostname couldn’t be set up. When: our hosting provider refused or failed. Do: Try again, and write to us with the Reference if it repeats.
Recipients
RECIPIENT_NOT_FOUND(HTTP 404): The recipient wasn’t found. When: it was removed. Do: Reload Recipients.RECIPIENT_CONFLICT(HTTP 409): This recipient already exists in the workspace. When: you add it again. Do: Use the existing one.RECIPIENT_NOT_VERIFIED(HTTP 409): Verify before activating. When: you activate one that hasn’t confirmed. Do: Have them confirm by email.RECIPIENT_NOT_VERIFIABLE(HTTP 409): This recipient can’t get a verification email. When: its status doesn’t allow it. Do: Check its status under Recipients.RECIPIENT_HAS_FORMS(HTTP 409): Forms still use this recipient. When: you permanently delete it. Do: Remove it from those forms first.RECIPIENT_NOT_DELETED(HTTP 409): It isn’t in the trash. When: you permanently delete it directly. Do: Move it to the trash first.
Senders
SENDER_NOT_FOUND(HTTP 404): The sender wasn’t found. When: it was removed. Do: Reload Senders.SENDER_CONFLICT(HTTP 409): This sender already exists in the workspace. When: you add it again. Do: Use the existing one.SENDER_NOT_VERIFIED(HTTP 409): Verify before activating. When: you activate one that hasn’t confirmed. Do: Confirm it by email.SENDER_NOT_VERIFIABLE(HTTP 409): This sender can’t get a verification email. When: its status doesn’t allow it. Do: Check its status under Senders.SENDER_HAS_FORMS(HTTP 409): Forms still use this sender. When: you permanently delete it. Do: Choose another sender on those forms first.SENDER_NOT_DELETED(HTTP 409): It isn’t in the trash. When: you permanently delete it directly. Do: Move it to the trash first.
Email providers
PROVIDER_CONNECTION_NOT_FOUND(HTTP 404): That provider connection wasn’t found. When: it was removed. Do: Reload Destinations.PROVIDER_CONNECTION_REQUIRED(HTTP 400): A sender needs a provider here. When: you save a sender without choosing one. Do: Choose an email provider.PROVIDER_CONNECTION_CONFLICT(HTTP 409): This provider connection already exists. When: you add it again. Do: Use the existing one.PROVIDER_CONNECTION_NOT_DELETED(HTTP 409): It isn’t in the trash. When: you permanently delete it directly. Do: Move it to the trash first.PROVIDER_CREDENTIAL_KEY_UNAVAILABLE(HTTP 500): Credentials couldn’t be encrypted. When: you save a provider or authenticator, and something is wrong on our side. Do: Try again later, and write to us with the Reference.
Email templates
TEMPLATE_INVALID lists what’s wrong in error.issues, each with one of the codes after it. See Notification Templates.
TEMPLATE_NOT_FOUND(HTTP 404): The template wasn’t found. When: it was removed. Do: Reload the list.TEMPLATE_INVALID(HTTP 422): The template can’t be saved. When: it has syntax or HTML problems. Do: Readerror.issues.TEMPLATE_TAG_UNCLOSED,TEMPLATE_TAG_EMPTY: A{{ }}tag is broken. When: it’s never closed, or has nothing in it. Do: Close it, or fill it in.TEMPLATE_EXPRESSION_INVALID: A tag’s expression can’t be read. When: a path or its syntax is wrong. Do: Fix the tag.TEMPLATE_FILTER_INVALID: A tag uses a filter that doesn’t exist. When: it’s misspelled or unsupported. Do: Use a listed filter.TEMPLATE_STRING_UNTERMINATED: A quoted value in a tag never ends. When: a closing quote is missing. Do: Add it.TEMPLATE_HTML_UNSAFE: The HTML holds something that isn’t safe to send. When: it has content the sanitizer refuses. Do: Remove whatmessagenames.FORM_CONFIG_RECEIPT_PUBLIC_INPUT_VARIABLE: A confirmation receipt can’t repeat what was submitted. When: the template uses a submitted answer or a submission summary. Do: Remove that variable. See Notification Templates.
Plans and limits
See Plans and limits for what each plan includes, and what isn’t enforced.
PLAN_LIMIT_ACTIVE_FORMS_REACHED,PLAN_LIMIT_RECIPIENTS_REACHED,PLAN_LIMIT_MEMBERS_REACHED,PLAN_LIMIT_PROVIDER_CONNECTIONS_REACHED,PLAN_LIMIT_RUNTIME_HOSTNAMES_REACHED(HTTP 409): The workspace is at its plan’s limit. When: you add or activate one more.error.detailshas the numbers, and nothing already saved changes. Do: Remove one you don’t use, or move to a higher plan.PLAN_SUBSCRIPTION_INACTIVE(HTTP 409): The workspace’s plan isn’t active. When: it has ended or isn’t running. Do: Check the plan under Settings, or write to us.PLAN_ENTITLEMENT_UNAVAILABLE(HTTP 503): The plan information couldn’t be read. When: a temporary problem on our side. Do: Try again shortly.ACCOUNT_STORAGE_HOLD(HTTP 403): The account’s forms paused new submissions. When: the account stores far more than normal use. Everything already received is safe. Do: Write to us.EMAIL_CEILING_REACHED: The response is kept, and not emailed. When: the account reached its monthly ceiling for email sent through Formerie. It shows on the delivery attempt. Do: Retry from the 1st of next month, or write to us.
AI and MCP (Coming soon)
The AI features built into Formerie and MCP access aren’t available today. These codes are here so the list is complete, and they may change before release. Using your own coding agent is separate: see Use your AI.
Using AI
AI_NOT_CONFIGURED(HTTP 503): AI features aren’t available right now. When: AI isn’t set up for this request. Do: Keep working without it.AI_PAUSED(HTTP 503): AI is taking a short break. When: AI use is paused for now. Everything you built still works. Do: Try again later.AI_LIMIT_REACHED(HTTP 429): This month’s AI has been used. When: the allowance runs out. Do: Wait for the 1st.AI_PROVIDER_UNAVAILABLE(HTTP 503): The AI service isn’t available. When: it can’t be reached. Do: Try again in a moment.AI_TIMEOUT(HTTP 504): The AI service took too long. When: it didn’t answer in time. Do: Try again.AI_OUTPUT_INVALID(HTTP 422): The AI result couldn’t be used. When: it wasn’t a valid answer. Do: Reword your request.AI_REQUEST_REFUSED(HTTP 422): The AI service declined. When: it refused this request. Do: Reword your request.AI_GENERATION_NOT_FOUND(HTTP 404): That AI result wasn’t found. When: it expired or was already used. Do: Generate it again.
AI suggestions
These are warnings on a draft or a rule, for you to review. They don’t stop anything.
AI_RECIPIENTS_NOT_SET: The draft has no recipients. When: the form was drafted without any. Do: Add one under Delivery.AI_SENSITIVE_FIELD_REMOVED: A sensitive field was left out. When: the AI proposed one, and Formerie didn’t add it. Do: Check the form’s fields.AI_RULE_REMOVED: A proposed rule was left out. When: it depended on a field that was left out. Do: Add it yourself if you need it.AI_RULE_REPLACES_EXISTING: This rule would replace one. When: the field already has a visibility rule. Do: Review before applying.AI_NO_SAMPLES,AI_SAMPLE_MISMATCH: The rule’s examples don’t confirm it. When: there are none, or one gives a different result than expected. Do: Test the rule before applying it.
Smart routing
AI_ROUTING_INVALID(HTTP 400): The routing settings aren’t valid. When: you save them. Do: Check the routes.AI_ROUTING_NOT_CONFIGURED(HTTP 409): This form has no routing. When: you act on a response. Do: Set it up first.AI_ROUTING_CONFLICT(HTTP 409): The routing changed since you loaded it. When: someone saved first. Do: Reload and try again.AI_ROUTING_DELIVERY_NOT_CONFIGURED(HTTP 409): Routing needs a recipient. When: you turn it on with none. Do: Add a form recipient.AI_ROUTING_NOT_ACTIONABLE(HTTP 409): This response can’t be changed now. When: it’s no longer waiting for a decision. Do: Reload it.AI_ROUTING_RECIPIENT_UNAVAILABLE(HTTP 422): A route uses an unverified recipient. When: you save it. Do: Verify the recipient, or choose another.AI_ROUTE_NOT_FOUND(HTTP 422): That route isn’t in this form’s routing. When: you choose one that was removed. Do: Reload the routes.NO_TEXT,ROUTE_NO_MATCH,ROUTE_NOT_LISTED,ROUTE_LOW_CONFIDENCE,ROUTE_UNAVAILABLE,SPAM_LOW_CONFIDENCE,AI_INTERRUPTED: Why a response went to the fallback route, as itsreasonCode. When: there was nothing to read, no clear match, the route wasn’t usable, or the check was cut short. Do: Review the response, and adjust the routes if it repeats.
MCP and API keys
AI_CREDENTIAL_INVALID(HTTP 401): The connection is no longer valid. When: it was revoked or expired. Do: Connect again.AI_SCOPE_DENIED(HTTP 403): The connection lacks a permission. When: a tool needs whatrequiredScopenames. Do: Grant it, then connect again.AI_ROUTE_NOT_ALLOWED(HTTP 403): AI connections can’t do this. When: an operation is kept for the app. Do: Do it in the app.AI_CREDENTIAL_APP_ONLY(HTTP 400): Credentials can’t be set through an AI tool. When: a tool call holds a secret. Do: Enter it in the app.AI_WORKSPACE_REQUIRED(HTTP 400): The connection covers several workspaces. When: a call doesn’t name one. Do: PassworkspaceUid.AI_RATE_LIMITED(HTTP 429): Too many requests from this connection. When: in a short time. Do: Wait, then try again.AI_CONFIRMATION_INVALID(HTTP 409): The confirmation can’t be used. When: it expired, was already used, or was for other arguments. Do: Start again, and ask the person.AI_CONFIRMATION_UNAVAILABLE(HTTP 403): This action needs a person’s approval, and this client can’t ask. When: a high-impact tool runs in that client. Do: Do it in the app, or use a client that can ask.AUDIT_UNAVAILABLE(HTTP 503): The action didn’t run because it couldn’t be recorded. When: a temporary problem on our side. Do: Try again shortly.AI_CONSENT_NOT_FOUND(HTTP 404): The authorization request wasn’t found. When: it expired or was already used. Do: Start again from the app.AI_GRANT_NOT_FOUND(HTTP 404): That AI connection wasn’t found. When: it was removed. Do: Reload the list.AI_API_KEY_NOT_FOUND(HTTP 404): That API key wasn’t found. When: it was removed. Do: Reload the list.AI_API_KEY_LIMIT_REACHED(HTTP 409): You have too many API keys. When: you create one more. Do: Revoke one first.
SDK
@formerie/client adds its own codes for what never reached Formerie. It can also return some server codes without a request: a
failed verification step gives TURNSTILE_FAILED, a non-JSON 429 gives RATE_LIMITED, and a form bound without a target, or submitted
twice at once, gives BAD_REQUEST.
NETWORK_ERROR: The request never completed. When: the network failed, or the browser blocked it, often over CORS. Do: See A CORS or Origin error, and let the visitor retry.INVALID_RESPONSE: The reply wasn’t a Formerie response. When: something between you and Formerie answered instead, or the address is wrong. Do: Check the endpoint, then look at the response in the network panel.
Loading the script
From cdn.formerie.com.
ASSET_NOT_FOUND(HTTP 404): That file doesn’t exist. When: the path or version is wrong. Do: Copy the address from your Embed code, or the SDK guide.METHOD_NOT_ALLOWED(HTTP 405): The CDN only reads. When: a request isn’tGET,HEAD, orOPTIONS. Do: UseGET.
Any request
These can come from any route.
BAD_REQUEST(HTTP 400, 404, 409, 413): The request couldn’t be processed. When: a value is invalid (400), the route doesn’t exist (404), a passkey is already connected (409), or a body is too large (413).messagesays which. Do: Fix the request. A submission must send{ "fields": { ... } }under 100,000 bytes.INVALID_JSON(HTTP 400): The body isn’t valid JSON. When: it can’t be parsed. Do: Fix what your code sends.FORBIDDEN(HTTP 403): You don’t have access. When: your role doesn’t allow this. Do: Ask a workspace owner or admin. See Team and access.INTERNAL_ERROR(HTTP 500): Something went wrong on our side. When: an unexpected failure. Do: Try again shortly, and write to us with the Reference if it repeats.