---
{
  "id": "platform.form.fields-and-validation",
  "topic": "form",
  "title": "Form fields and answer validation",
  "locale": "en",
  "version": "2026-07-24",
  "summary": "Form runtime supports eight field types, validates choice option IDs and type-specific rules, and keeps archived fields for history.",
  "content": "Form runtime supports exactly eight field types: `short_text`, `long_text`, `number`, `email`, `date`, `single_choice`, `multi_choice`, and `dropdown`. The `fieldType` Action input is intentionally a free string, so this runtime list—not a guessed schema enum—is authoritative. Choice fields (`single_choice`, `multi_choice`, and `dropdown`) require a non-empty options array shaped like `[{\"optionId\":\"option-a\",\"label\":\"Option A\"}]`; submitted answers store `optionId`, not the displayed label.\n\nType-specific validation uses `max_length` (also accepted as `maxLength`) for text, with defaults of 1,000 characters for `short_text` and 10,000 for `long_text`; `min` and `max` for numbers; an exact `YYYY-MM-DD` date; and a deliberately loose email check requiring `@` and at most 320 bytes. Titles and field labels are trimmed, required, and limited to 255. The deployment default is 100 active fields per Form: too many initial `create_form` fields produce `invalid_arguments`, while `add_field` at the limit produces `resource_conflict`. Deployment limits may be configured, so typed runtime errors remain authoritative.\n\n`archive_field` is a soft archive: the field disappears from active fields but remains available to revision and response history. There is no hard-delete field Action. If `sortKey` is omitted, the system supplies ordering; do not invent a format. For current input shapes or optional keys, consult the Action registry through `arinova.action.get_schema` instead of copying a full schema from this card.\n",
  "aliases": [
    "field type",
    "form validation",
    "choice options",
    "optionId",
    "required question",
    "text length",
    "dropdown choices"
  ],
  "tags": [
    "form",
    "fields",
    "validation",
    "choices"
  ],
  "relatedActions": [
    "arinova.form.create_form",
    "arinova.form.get_form",
    "arinova.form.add_field",
    "arinova.form.update_field",
    "arinova.form.archive_field"
  ],
  "relatedActionPrefixes": [],
  "url": "https://docs.arinova.ai/en/kb/form/fields-and-validation/"
}
---

Form runtime supports exactly eight field types: `short_text`, `long_text`, `number`, `email`, `date`, `single_choice`, `multi_choice`, and `dropdown`. The `fieldType` Action input is intentionally a free string, so this runtime list—not a guessed schema enum—is authoritative. Choice fields (`single_choice`, `multi_choice`, and `dropdown`) require a non-empty options array shaped like `[{"optionId":"option-a","label":"Option A"}]`; submitted answers store `optionId`, not the displayed label.

Type-specific validation uses `max_length` (also accepted as `maxLength`) for text, with defaults of 1,000 characters for `short_text` and 10,000 for `long_text`; `min` and `max` for numbers; an exact `YYYY-MM-DD` date; and a deliberately loose email check requiring `@` and at most 320 bytes. Titles and field labels are trimmed, required, and limited to 255. The deployment default is 100 active fields per Form: too many initial `create_form` fields produce `invalid_arguments`, while `add_field` at the limit produces `resource_conflict`. Deployment limits may be configured, so typed runtime errors remain authoritative.

`archive_field` is a soft archive: the field disappears from active fields but remains available to revision and response history. There is no hard-delete field Action. If `sortKey` is omitted, the system supplies ordering; do not invent a format. For current input shapes or optional keys, consult the Action registry through `arinova.action.get_schema` instead of copying a full schema from this card.
