---
title: "Get one form"
method: GET
path: "/forms/{form_id}"
---

# Get one form

`GET /forms/{form_id}`

## Request

- Base URL: `https://app.formasty.com/api/v1`
- URL: `https://app.formasty.com/api/v1/forms/{form_id}`
- Auth: one of:
  - OAuth 2 (authorization code, authorization URL `https://app.formasty.com/oauth/authorize/api/v1`, token URL `https://app.formasty.com/oauth/token`)
  - HTTP bearer

Returns form metadata, current draft schema, and published schema.

## Path parameters

- `form_id` string, required

## Response `200`

Form payload.

- FormResponse
  - `data` FormSummary, required
    - `id` string, required
    - `workspace_id` string, required
    - `title` string, required
    - `status` 'draft' | 'published', required
    - `draft_revision` integer, required
    - `published_draft_revision` integer, nullable, required: Draft revision currently represented by the published snapshot, or null for an unpublished or legacy snapshot.
    - `draft_updated_at` integer, required
    - `public_url` string, nullable, required
    - `public_id` string
    - `slug` string, nullable
    - `plan` string
    - `workspace_role` string
    - `permissions` object
    - `plan_access` object
    - `is_shared` boolean
    - `shared_member_count` integer
    - `responses_count` integer
    - `views_count` integer, nullable
    - `starts_count` integer, nullable
    - `completions_count` integer, nullable
    - `schema_version` integer
    - `published_version` integer
    - `published_at` string, nullable
    - `created_at` integer
    - `updated_at` integer
  - `draft_schema` DraftSchema, required: Full draft schema contract. Use the exact structure returned by formasty_get_form().form.draftSchema when replacing the whole draft. New forms should keep a statement-only welcome screen before respondent fields.
    - `version` 1, required: Current builder schema version.
    - `steps` object[], required: Ordered draft steps. MCP supports a leading welcome screen as the first statement-only step. Later question steps may contain one or multiple fields when grouping improves the respondent experience.
      - `id` string: Stable step id. Supply one only when you need a caller-controlled id; otherwise Formasty can generate it.
      - `title` string
      - `backButtonLabel` string
      - `nextButtonLabel` string
      - `welcomeOverline` string
      - `showWelcomeStepInfo` boolean
      - `showWelcomeQuestionCount` boolean
      - `showWelcomeTimeEstimate` boolean
      - `welcomeIcon` 'none' | 'sparkles' | 'rocket' | 'gem' | 'heart_handshake' | 'briefcase_business' | 'building_2' | 'store' | 'landmark' | 'globe_2' | 'shield_check' | 'graduation_cap'
      - `welcomeIconCustomUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
      - `coverImageUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
      - `coverImageAttribution` object: Linked attribution metadata for third-party images. Currently used for Unsplash photos.
        - `provider` 'unsplash', required
        - `photographerName` string, required
        - `photographerUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
        - `sourceName` 'Unsplash'
        - `sourceUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
        - `photoUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
      - `coverImageBrightness` integer
      - `coverImageLayout` 'stack' | 'split' | 'wallpaper'
      - `coverImageSplitSide` 'left' | 'right'
      - `fields` object[], required: Ordered field list for this step. Multiple respondent input fields are allowed when they belong together on the same screen, such as compact contact details or tightly related grouped follow-ups.
        - `id` string: Stable field id. Required when adding a field only if you need a caller-supplied id; ignored by update_field patches.
        - `type` 'text' | 'email' | 'number' | 'signature' | 'scheduler' | 'rating' | 'nps' | 'opinion_scale' | 'matrix' | 'file_upload' | 'video_audio' | 'address' | 'date' | 'textarea' | 'statement' | 'select' | 'radio' | 'picture_choice' | 'ranking' | 'checkbox', required: Builder field type. Reuse the exact type strings returned by formasty_get_form().
        - `label` string, required: Primary field label shown to respondents.
        - `required` boolean, required: Whether the respondent must answer this field.
        - `hidden` boolean: Whether the field is hidden from respondents and mainly used for workflow/data capture.
        - `helpText` string: Helper copy shown below the label.
        - `description` string: Alias for helpText accepted by MCP field mutations. Prefer helpText for canonical draft schemas.
        - `requiredMessage` string
        - `defaultValue` string
        - `urlParameter` string: URL parameter name used for prefill when the field type supports it.
        - `placeholder` string
        - `textSubtype` 'phone' | 'website'
        - `textareaSize` 'small' | 'medium' | 'large' | 'extralarge'
        - `statementEmbedUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
        - `statementAlign` 'left' | 'center'
        - `minNumber` number
        - `maxNumber` number
        - `minCharacters` integer
        - `maxCharacters` integer
        - `addressVisibility` object: Address subfield visibility controls.
          - `line2` boolean
          - `city` boolean
          - `state` boolean
          - `postalCode` boolean
          - `country` boolean
        - `addressConfig` object: Per-subfield address labels, placeholders, and required flags.
          - `line1` object
            - `label` string, required
            - `placeholder` string, required
            - `required` boolean, required
          - `line2` object
            - `label` string, required
            - `placeholder` string, required
            - `required` boolean, required
          - `city` object
            - `label` string, required
            - `placeholder` string, required
            - `required` boolean, required
          - `state` object
            - `label` string, required
            - `placeholder` string, required
            - `required` boolean, required
          - `postalCode` object
            - `label` string, required
            - `placeholder` string, required
            - `required` boolean, required
          - `country` object
            - `label` string, required
            - `placeholder` string, required
            - `required` boolean, required
        - `maxStars` integer
        - `allowHalfStars` boolean
        - `minScaleValue` 0 | 1
        - `maxScale` integer
        - `leftLabel` string
        - `rightLabel` string
        - `singleRowOnMobile` boolean
        - `rows` object[]
          - `id` string, required: Stable option id. Reuse existing ids when editing an existing field; supply a new id when adding a new option.
          - `label` string, required: Human-readable option label shown in the form.
          - `value` string, required: Submitted option value. Keep it stable once the form is live unless you intend to change downstream data.
          - `imageUrl` string: Optional image URL for picture choice options. Leave unset for text-only choices.
          - `calcValue` number: Optional numeric value contributed to calculated variables when this option is selected (select, radio, picture_choice, checkbox only; not ranking/matrix). Finite, |value| <= 1e9; decimals allowed.
        - `columns` object[]
          - `id` string, required: Stable option id. Reuse existing ids when editing an existing field; supply a new id when adding a new option.
          - `label` string, required: Human-readable option label shown in the form.
          - `value` string, required: Submitted option value. Keep it stable once the form is live unless you intend to change downstream data.
          - `imageUrl` string: Optional image URL for picture choice options. Leave unset for text-only choices.
          - `calcValue` number: Optional numeric value contributed to calculated variables when this option is selected (select, radio, picture_choice, checkbox only; not ranking/matrix). Finite, |value| <= 1e9; decimals allowed.
        - `allowMultipleSelection` boolean
        - `maxFileSizeMb` number
        - `allowMultiple` boolean
        - `allowedFileTypes` string[]: Allowed upload file type ids. Reuse values already supported by the Forms API/upload configuration.
        - `schedulerProvider` 'tidycal' | 'calendly' | 'savvycal' | 'calcom'
        - `schedulerUrl` string: Public booking URL for scheduler fields. If omitted or empty, MCP returns a scheduler_url_missing notice that the agent must tell the user about.
        - `calendarOpenerLabel` string
        - `randomizeOptions` boolean
        - `horizontalOptions` boolean
        - `optionColumns` 1 | 2 | 3
        - `checkboxMode` 'multi' | 'single' | 'yes_no'
        - `includeOtherOption` boolean
        - `selectionLimitMode` 'none' | 'exact' | 'range'
        - `selectionLimitExact` integer
        - `selectionLimitMin` integer
        - `selectionLimitMax` integer
        - `options` object[]: Choice options. Required for select, radio, checkbox, picture_choice, and ranking fields.
          - `id` string, required: Stable option id. Reuse existing ids when editing an existing field; supply a new id when adding a new option.
          - `label` string, required: Human-readable option label shown in the form.
          - `value` string, required: Submitted option value. Keep it stable once the form is live unless you intend to change downstream data.
          - `imageUrl` string: Optional image URL for picture choice options. Leave unset for text-only choices.
          - `calcValue` number: Optional numeric value contributed to calculated variables when this option is selected (select, radio, picture_choice, checkbox only; not ranking/matrix). Finite, |value| <= 1e9; decimals allowed.
    - `settings` object, required: Top-level form settings contract used in full draft schemas.
      - `name` string: Form title shown across builder, dashboard, and public runtime.
      - `description` string
      - `slug` string
      - `searchEngineIndexing` boolean: Legacy explicit discovery permission. Use discoveryMode for workspace inheritance. Live current-owner consent, publication and open access remain required. Imports/copies stay off. Responses and result-share URLs remain noindex.
      - `discoveryMode` 'inherit' | 'on' | 'off': inherit follows the current owner's all/selected/none workspace default; on explicitly enables this form even with default none; off always disables it. Legacy schemas without this property use searchEngineIndexing as an explicit override. New ordinary forms inherit; imports/copies stay off. Google indexing/ranking is not guaranteed.
      - `successMessage` string
      - `redirectUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
      - `submitButtonLabel` string
      - `labels` object: Runtime copy labels shown across the live form and embeds.
        - `nextQuestionKeyboardInstruction` string
        - `submitKeyboardInstruction` string
        - `otherOptionLabel` string
        - `otherOptionHint` string
        - `uploadInstruction` string
        - `uploadMaxFileSizeMessage` string
        - `uploadInProgressMessage` string
        - `uploadFinishingMessage` string
        - `offlineErrorMessage` string
        - `onlineRestoredMessage` string
        - `serverErrorMessage` string
        - `uploadErrorMessage` string
        - `uploadFileSizeErrorMessage` string
        - `uploadFileTypeErrorMessage` string
        - `schedulerRequiredErrorMessage` string
        - `duplicateSubmissionTitle` string
        - `duplicateSubmissionDescription` string
      - `builder` object: Builder-only editing preferences.
        - `createStepPerField` boolean
        - `requiresProPublish` boolean: Server-managed publish gate. Preserve a returned true value; do not set this property on new drafts.
      - `hidden` object: Hidden fields and Workflow variables. Prefer formasty_configure_workflow_variables for narrow variable-only MCP edits.
        - `hiddenFields` object[]
          - `key` string, required: Hidden field key. Use only letters, numbers, and underscores.
          - `defaultValue` string, required: Default hidden field value.
        - `variables` object[]: Workflow-tab variable definitions available to variable conditions and variable actions.
          - `id` string: Stable workflow variable id. Omit when creating a new variable, or provide an existing id to update that variable.
          - `name` string, required: Workflow variable token name. Use only letters, numbers, and underscores.
          - `type` 'number' | 'text', required: Variable value type used by workflow conditions and actions.
          - `initialValue` union: Optional initial value. Number variables require a numeric value; text variables accept a string.
            - string
            - number
          - `formula` string: Optional formula (number variables only) turning this into a calculated variable. Refs: {{var:<id>}} and {{field:<id>}}. Functions: IF, MIN, MAX, ROUND, FLOOR, CEIL, ABS. Operators + - * / and comparisons. Max 500 chars. Must reference existing fields/variables; no self/circular references. Calculated variables cannot be targets of workflow variable actions.
          - `format` object: Optional display format for a number/calculated variable shown on the form.
            - `kind` 'number' | 'currency' | 'percent', required: Display format kind.
            - `currency` string: ISO currency code, required when kind is currency (USD, EUR, GBP, INR, CAD, AUD, JPY, AED, SGD).
            - `decimals` 0 | 1 | 2: Optional decimal places.
          - `showOnForm` boolean: When true, show a live result pill for this calculated variable on the public form.
      - `submissions` object: Submission behavior, duplicate prevention, and thank-you screen configuration.
        - `autosaveProgress` boolean: Stores respondent progress in their browser so reopening the same public form can continue from the last session.
        - `anonymousResponses` boolean: When true, Formasty avoids collecting respondent identity metadata that is not part of the submitted answers.
        - `preventDuplicates` boolean
        - `dedupe` object: Submission dedupe controls.
          - `cookie` object
            - `enabled` boolean, required
          - `uniqueField` object: Unique-field duplicate prevention settings.
            - `enabled` boolean
            - `fieldId` string: Field id used for duplicate prevention.
            - `normalize` 'lower_trim' | 'trim' | 'none'
        - `thankYou` object: Primary submission thank-you configuration.
          - `mode` 'message' | 'redirect', required
          - `redirectUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `title` string
          - `description` string
          - `message` string
          - `showSocialShareIcons` boolean
          - `socialShareLinks` object: Optional social share links rendered on thank-you screens.
            - `facebook` string: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `x` string: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `linkedin` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `showButton` boolean
          - `buttonLabel` string
          - `buttonUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `buttonOpenInNewTab` boolean
          - `mediaUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `mediaType` 'image' | 'video'
          - `mediaAlt` string
          - `mediaAttribution` object: Linked attribution metadata for third-party images. Currently used for Unsplash photos.
            - `provider` 'unsplash', required
            - `photographerName` string, required
            - `photographerUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `sourceName` 'Unsplash'
            - `sourceUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `photoUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `logoUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `logoAttribution` object: Linked attribution metadata for third-party images. Currently used for Unsplash photos.
            - `provider` 'unsplash', required
            - `photographerName` string, required
            - `photographerUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `sourceName` 'Unsplash'
            - `sourceUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `photoUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `titleSize` 'sm' | 'md' | 'lg'
          - `textAlign` 'left' | 'center'
          - `backgroundColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
          - `backgroundImageUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `backgroundImageAttribution` object: Linked attribution metadata for third-party images. Currently used for Unsplash photos.
            - `provider` 'unsplash', required
            - `photographerName` string, required
            - `photographerUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `sourceName` 'Unsplash'
            - `sourceUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `photoUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `backgroundImageBrightness` integer
          - `headingColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
          - `descriptionColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
          - `buttonBackgroundColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
          - `buttonTextColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
          - `buttonRadius` 'none' | 'sm' | 'lg': Thank-you button radius. Allowed values are only "none", "sm", and "lg"; "md" is not supported.
          - `resultPage` object: Optional scorecard/result-page block for useful outcome summaries, highlights, and CTAs on thank-you screens.
            - `highlights` string[]: Optional concise result-page bullets. Empty strings are ignored.
            - `cta` object: Optional result-page CTA. Use a real URL only; do not invent booking links.
              - …
        - `thankYouScreens` object[]
          - `id` string, required: Stable thank-you screen id.
          - `title` string
          - `description` string
          - `message` string
          - `showSocialShareIcons` boolean
          - `socialShareLinks` object: Optional social share links rendered on thank-you screens.
            - `facebook` string: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `x` string: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `linkedin` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `showButton` boolean
          - `buttonLabel` string
          - `buttonUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `buttonOpenInNewTab` boolean
          - `mediaUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `mediaType` 'image' | 'video'
          - `mediaAlt` string
          - `mediaAttribution` object: Linked attribution metadata for third-party images. Currently used for Unsplash photos.
            - `provider` 'unsplash', required
            - `photographerName` string, required
            - `photographerUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `sourceName` 'Unsplash'
            - `sourceUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `photoUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `logoUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `logoAttribution` object: Linked attribution metadata for third-party images. Currently used for Unsplash photos.
            - `provider` 'unsplash', required
            - `photographerName` string, required
            - `photographerUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `sourceName` 'Unsplash'
            - `sourceUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `photoUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `titleSize` 'sm' | 'md' | 'lg'
          - `textAlign` 'left' | 'center'
          - `backgroundColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
          - `backgroundImageUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `backgroundImageAttribution` object: Linked attribution metadata for third-party images. Currently used for Unsplash photos.
            - `provider` 'unsplash', required
            - `photographerName` string, required
            - `photographerUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `sourceName` 'Unsplash'
            - `sourceUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `photoUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `backgroundImageBrightness` integer
          - `headingColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
          - `descriptionColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
          - `buttonBackgroundColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
          - `buttonTextColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
          - `buttonRadius` 'none' | 'sm' | 'lg': Thank-you button radius. Allowed values are only "none", "sm", and "lg"; "md" is not supported.
          - `resultPage` object: Optional scorecard/result-page block for useful outcome summaries, highlights, and CTAs on thank-you screens.
            - `highlights` string[]: Optional concise result-page bullets. Empty strings are ignored.
            - `cta` object: Optional result-page CTA. Use a real URL only; do not invent booking links.
              - …
      - `privacy` object: Privacy settings use the same contract returned by formasty_get_form(). Preserve unknown keys unless you intentionally change them.
    - `theme` object, required: Partial theme patch. Use the same keys returned by formasty_get_form().form.draftSchema.theme.
      - `fontFamily` 'system' | 'custom' | 'sohne' | 'satoshi' | 'plus_jakarta_sans' | 'inter' | 'manrope' | 'dm_sans' | 'poppins' | 'nunito' | 'playfair_display' | 'roboto_slab' | 'space_grotesk' | 'ibm_plex_mono'
      - `customFont` object: Uploaded custom font metadata. Reuse the exact values returned by the font upload flow.
        - `family` string, required
        - `fileName` string, required
        - `assetId` string, required
        - `format` 'woff2' | 'woff' | 'ttf' | 'otf', required
        - `url` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
        - `storageKey` string
      - `baseFontSize` 'sm' | 'md' | 'lg'
      - `labelWeight` 'normal' | 'medium' | 'semibold'
      - `backgroundColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
      - `fontSizeScale` 'compact' | 'default' | 'spacious'
      - `headingWeight` 600 | 700
      - `background` object: MCP-created and MCP-edited forms use solid form backgrounds only. Use backgroundColor for the page background; keep outcome-specific colors on thank-you screens.
        - `type` 'solid', required
        - `value` string, required: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
      - `surfaceColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
      - `textColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
      - `accentColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
      - `linkColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
      - `borderColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
      - `buttonTextColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
      - `primaryColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
      - `secondaryColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
      - `borderIntensity` 'subtle' | 'medium'
      - `radius` 'none' | 'sm' | 'md' | 'lg'
      - `density` 'compact' | 'comfortable' | 'airy'
      - `inputSpacing` 'compact' | 'comfortable' | 'airy'
      - `width` 'narrow' | 'medium' | 'wide'
      - `progress` 'none' | 'fraction' | 'dots'
      - `progressStyle` 'none' | 'step_count' | 'bar'
      - `previewMode` 'single-step' | 'stacked'
      - `buttonStyle` 'filled' | 'outline'
      - `alignment` 'left' | 'center' | 'right'
      - `brandPalette` string[]: Optional brand palette swatches shown in the builder design system.
      - `hoverLift` boolean
      - `showBrandBadge` boolean
      - `branding` object: Branding controls nested under theme.branding.
        - `showPoweredBy` boolean: Whether to show Formasty branding badges where the current plan allows it.
        - `logoUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
        - `logoScale` number
    - `workflow` object, required: Full workflow schema. Reuse ids from the current draft when editing existing rules, conditions, groups, variables, or outcomes.
      - `version` 1, required
      - `enabled` boolean, required
      - `rules` object[], required
        - `id` string: Stable workflow rule id. Reuse existing ids when replacing or editing current rules.
        - `title` string: Optional human-readable rule label shown in the workflow UI.
        - `source` object, required
          - `stepId` string, required: Source step id for the rule.
          - `fieldId` string: Optional source field id when branching from a specific field.
        - `match` 'all' | 'any'
        - `combinator` 'and' | 'or'
        - `conditions` object[], required: Workflow conditions. Use an empty array for an unconditional 'always go to' route, especially for statement-only steps.
          - `id` string, required: Stable condition id. Reuse existing ids when editing an existing rule.
          - `sourceType` 'field' | 'hidden_field' | 'variable': What the condition reads from.
          - `sourceId` string: Hidden field key or variable id depending on sourceType. For field conditions, prefer fieldId; sourceId is accepted as a compatibility alias.
          - `fieldId` string: Field id when the condition reads from a form field.
          - `target` object: Optional workflow target selector for structured field values.
            - `subfieldKey` string: Optional subfield key for structured values such as address parts.
            - `rowKey` string: Optional matrix row key when a workflow condition targets a matrix row value.
          - `operator` 'equals' | 'not_equals' | 'contains' | 'not_contains' | 'starts_with' | 'ends_with' | 'includes' | 'not_includes' | 'gt' | 'gte' | 'lt' | 'lte' | 'between' | 'is_answered' | 'is_not_answered', required: Comparison operator. Use only operators that are already valid for the chosen source/target.
          - `value` union: Condition value. For between, use [min,max] or {min,max}. For includes/not_includes on multi-choice values, use a string array.
            - string
            - number
            - boolean
            - union[]
              - …
            - object
              - …
            - string[]
        - `logic` object: Optional advanced workflow logic tree. Preserve ids when editing existing logic.
          - `mode` 'simple' | 'custom': Rule logic mode.
          - `nodes` union[]
            - union
              - …
          - `combinators` string[]
          - `groups` object[]
            - `id` string, required
            - `combinator` 'and' | 'or', required
            - `conditionIds` string[], required
        - `then` union, required: Workflow destination. Use existing step ids or thank-you screen ids from formasty_get_form.
          - object
            - `type` 'step', required
            - `stepId` string, required: Destination draft step id.
          - object
            - `type` 'thank_you', required
            - `screenId` string, required: Thank-you screen id from settings.submissions.thankYouScreens.
          - object
            - `type` 'end', required
        - `thenAction` object: Workflow variable mutation attached to a rule or step action.
          - `id` string, required: Stable action id. Reuse existing ids when patching current workflow rules.
          - `variableId` string, required: Workflow variable id to modify.
          - `operation` 'set' | 'add' | 'subtract' | 'multiply' | 'divide' | 'clear' | 'append' | 'prepend', required: Workflow variable operation.
          - `source` object: Workflow variable action source. Reuse ids and targets from the current draft snapshot.
            - `sourceType` 'literal' | 'field' | 'hidden_field' | 'variable': Where the workflow variable action should read its value from.
            - `sourceId` string: Hidden field key or variable id depending on sourceType. For field sources, prefer fieldId; sourceId is accepted as a compatibility alias.
            - `fieldId` string: Field id when reading from a form field.
            - `target` object: Optional workflow target selector for structured field values.
              - …
            - `value` union: Literal fallback value used when sourceType is literal.
              - …
        - `else` union: Workflow destination. Use existing step ids or thank-you screen ids from formasty_get_form.
          - object
            - `type` 'step', required
            - `stepId` string, required: Destination draft step id.
          - object
            - `type` 'thank_you', required
            - `screenId` string, required: Thank-you screen id from settings.submissions.thankYouScreens.
          - object
            - `type` 'end', required
        - `priority` integer: Lower numbers run first when multiple rules apply.
        - `stopProcessing` boolean: Stop evaluating later rules after this one matches.
      - `fallback` object: Per-step fallback routing keyed by step id.
      - `stepActions` object: Per-step workflow variable actions keyed by step id.
      - `layout` object: Workflow canvas layout metadata. Preserve existing values when you are not intentionally changing the layout.
        - `nodes` object
        - `viewport` object
          - `x` number, required
          - `y` number, required
          - `zoom` number, required
        - `panX` number
        - `panY` number
        - `zoom` number
        - `autoArranged` boolean
    - `quiz` union: Optional quiz configuration. Use type=match for recommendation/personality quizzes or type=score for score ranges.
      - object: Optional recommendation/personality quiz configuration.
        - `type` 'match', required
        - `mode` 'match' | 'personality'
        - `enabled` boolean, required
        - `endings` object[], required
          - `screenId` string, required
        - `mappings` object[], required
          - `id` string, required
          - `fieldId` string, required
          - `optionId` string
          - `optionValue` string
          - `value` union
            - string
            - number
            - boolean
          - `target` object: Optional workflow target selector for structured field values.
            - `subfieldKey` string: Optional subfield key for structured values such as address parts.
            - `rowKey` string: Optional matrix row key when a workflow condition targets a matrix row value.
          - `screenId` string, required
          - `weight` number
      - object: Optional score quiz configuration. Use ending minScore/maxScore ranges to resolve the result.
        - `type` 'score', required
        - `enabled` boolean, required
        - `endings` object[], required
          - `screenId` string, required
          - `minScore` number
          - `maxScore` number
        - `mappings` object[], required
          - `id` string, required
          - `fieldId` string, required
          - `optionId` string
          - `optionValue` string
          - `value` union
            - string
            - number
            - boolean
          - `target` object: Optional workflow target selector for structured field values.
            - `subfieldKey` string: Optional subfield key for structured values such as address parts.
            - `rowKey` string: Optional matrix row key when a workflow condition targets a matrix row value.
          - `score` number, required
        - `qualification` object: Optional Business-tier lead qualification tiers. Each tier classifies the computed score into a labeled lead tier when its minScore threshold is met. Requires Business or an active trial.
          - `enabled` boolean, required
          - `tiers` object[], required
            - `id` string, required
            - `label` string, required
            - `color` string: Optional hex color in #RRGGBB format, matching the builder validation.
            - `minScore` number, required
    - `poll` object: Optional poll configuration. Poll publishing is subject to the current workspace plan.
      - `enabled` boolean, required
      - `resultsVisibility` 'after_vote' | 'hidden', required: Whether aggregate poll results are shown after voting or kept hidden.
  - `settings` object, required: Complete operational settings for the current draft. Send this snapshot with draft_schema when changing both.
  - `published_schema` DraftSchema, required: Full draft schema contract. Use the exact structure returned by formasty_get_form().form.draftSchema when replacing the whole draft. New forms should keep a statement-only welcome screen before respondent fields.
    - `version` 1, required: Current builder schema version.
    - `steps` object[], required: Ordered draft steps. MCP supports a leading welcome screen as the first statement-only step. Later question steps may contain one or multiple fields when grouping improves the respondent experience.
      - `id` string: Stable step id. Supply one only when you need a caller-controlled id; otherwise Formasty can generate it.
      - `title` string
      - `backButtonLabel` string
      - `nextButtonLabel` string
      - `welcomeOverline` string
      - `showWelcomeStepInfo` boolean
      - `showWelcomeQuestionCount` boolean
      - `showWelcomeTimeEstimate` boolean
      - `welcomeIcon` 'none' | 'sparkles' | 'rocket' | 'gem' | 'heart_handshake' | 'briefcase_business' | 'building_2' | 'store' | 'landmark' | 'globe_2' | 'shield_check' | 'graduation_cap'
      - `welcomeIconCustomUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
      - `coverImageUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
      - `coverImageAttribution` object: Linked attribution metadata for third-party images. Currently used for Unsplash photos.
        - `provider` 'unsplash', required
        - `photographerName` string, required
        - `photographerUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
        - `sourceName` 'Unsplash'
        - `sourceUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
        - `photoUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
      - `coverImageBrightness` integer
      - `coverImageLayout` 'stack' | 'split' | 'wallpaper'
      - `coverImageSplitSide` 'left' | 'right'
      - `fields` object[], required: Ordered field list for this step. Multiple respondent input fields are allowed when they belong together on the same screen, such as compact contact details or tightly related grouped follow-ups.
        - `id` string: Stable field id. Required when adding a field only if you need a caller-supplied id; ignored by update_field patches.
        - `type` 'text' | 'email' | 'number' | 'signature' | 'scheduler' | 'rating' | 'nps' | 'opinion_scale' | 'matrix' | 'file_upload' | 'video_audio' | 'address' | 'date' | 'textarea' | 'statement' | 'select' | 'radio' | 'picture_choice' | 'ranking' | 'checkbox', required: Builder field type. Reuse the exact type strings returned by formasty_get_form().
        - `label` string, required: Primary field label shown to respondents.
        - `required` boolean, required: Whether the respondent must answer this field.
        - `hidden` boolean: Whether the field is hidden from respondents and mainly used for workflow/data capture.
        - `helpText` string: Helper copy shown below the label.
        - `description` string: Alias for helpText accepted by MCP field mutations. Prefer helpText for canonical draft schemas.
        - `requiredMessage` string
        - `defaultValue` string
        - `urlParameter` string: URL parameter name used for prefill when the field type supports it.
        - `placeholder` string
        - `textSubtype` 'phone' | 'website'
        - `textareaSize` 'small' | 'medium' | 'large' | 'extralarge'
        - `statementEmbedUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
        - `statementAlign` 'left' | 'center'
        - `minNumber` number
        - `maxNumber` number
        - `minCharacters` integer
        - `maxCharacters` integer
        - `addressVisibility` object: Address subfield visibility controls.
          - `line2` boolean
          - `city` boolean
          - `state` boolean
          - `postalCode` boolean
          - `country` boolean
        - `addressConfig` object: Per-subfield address labels, placeholders, and required flags.
          - `line1` object
            - `label` string, required
            - `placeholder` string, required
            - `required` boolean, required
          - `line2` object
            - `label` string, required
            - `placeholder` string, required
            - `required` boolean, required
          - `city` object
            - `label` string, required
            - `placeholder` string, required
            - `required` boolean, required
          - `state` object
            - `label` string, required
            - `placeholder` string, required
            - `required` boolean, required
          - `postalCode` object
            - `label` string, required
            - `placeholder` string, required
            - `required` boolean, required
          - `country` object
            - `label` string, required
            - `placeholder` string, required
            - `required` boolean, required
        - `maxStars` integer
        - `allowHalfStars` boolean
        - `minScaleValue` 0 | 1
        - `maxScale` integer
        - `leftLabel` string
        - `rightLabel` string
        - `singleRowOnMobile` boolean
        - `rows` object[]
          - `id` string, required: Stable option id. Reuse existing ids when editing an existing field; supply a new id when adding a new option.
          - `label` string, required: Human-readable option label shown in the form.
          - `value` string, required: Submitted option value. Keep it stable once the form is live unless you intend to change downstream data.
          - `imageUrl` string: Optional image URL for picture choice options. Leave unset for text-only choices.
          - `calcValue` number: Optional numeric value contributed to calculated variables when this option is selected (select, radio, picture_choice, checkbox only; not ranking/matrix). Finite, |value| <= 1e9; decimals allowed.
        - `columns` object[]
          - `id` string, required: Stable option id. Reuse existing ids when editing an existing field; supply a new id when adding a new option.
          - `label` string, required: Human-readable option label shown in the form.
          - `value` string, required: Submitted option value. Keep it stable once the form is live unless you intend to change downstream data.
          - `imageUrl` string: Optional image URL for picture choice options. Leave unset for text-only choices.
          - `calcValue` number: Optional numeric value contributed to calculated variables when this option is selected (select, radio, picture_choice, checkbox only; not ranking/matrix). Finite, |value| <= 1e9; decimals allowed.
        - `allowMultipleSelection` boolean
        - `maxFileSizeMb` number
        - `allowMultiple` boolean
        - `allowedFileTypes` string[]: Allowed upload file type ids. Reuse values already supported by the Forms API/upload configuration.
        - `schedulerProvider` 'tidycal' | 'calendly' | 'savvycal' | 'calcom'
        - `schedulerUrl` string: Public booking URL for scheduler fields. If omitted or empty, MCP returns a scheduler_url_missing notice that the agent must tell the user about.
        - `calendarOpenerLabel` string
        - `randomizeOptions` boolean
        - `horizontalOptions` boolean
        - `optionColumns` 1 | 2 | 3
        - `checkboxMode` 'multi' | 'single' | 'yes_no'
        - `includeOtherOption` boolean
        - `selectionLimitMode` 'none' | 'exact' | 'range'
        - `selectionLimitExact` integer
        - `selectionLimitMin` integer
        - `selectionLimitMax` integer
        - `options` object[]: Choice options. Required for select, radio, checkbox, picture_choice, and ranking fields.
          - `id` string, required: Stable option id. Reuse existing ids when editing an existing field; supply a new id when adding a new option.
          - `label` string, required: Human-readable option label shown in the form.
          - `value` string, required: Submitted option value. Keep it stable once the form is live unless you intend to change downstream data.
          - `imageUrl` string: Optional image URL for picture choice options. Leave unset for text-only choices.
          - `calcValue` number: Optional numeric value contributed to calculated variables when this option is selected (select, radio, picture_choice, checkbox only; not ranking/matrix). Finite, |value| <= 1e9; decimals allowed.
    - `settings` object, required: Top-level form settings contract used in full draft schemas.
      - `name` string: Form title shown across builder, dashboard, and public runtime.
      - `description` string
      - `slug` string
      - `searchEngineIndexing` boolean: Legacy explicit discovery permission. Use discoveryMode for workspace inheritance. Live current-owner consent, publication and open access remain required. Imports/copies stay off. Responses and result-share URLs remain noindex.
      - `discoveryMode` 'inherit' | 'on' | 'off': inherit follows the current owner's all/selected/none workspace default; on explicitly enables this form even with default none; off always disables it. Legacy schemas without this property use searchEngineIndexing as an explicit override. New ordinary forms inherit; imports/copies stay off. Google indexing/ranking is not guaranteed.
      - `successMessage` string
      - `redirectUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
      - `submitButtonLabel` string
      - `labels` object: Runtime copy labels shown across the live form and embeds.
        - `nextQuestionKeyboardInstruction` string
        - `submitKeyboardInstruction` string
        - `otherOptionLabel` string
        - `otherOptionHint` string
        - `uploadInstruction` string
        - `uploadMaxFileSizeMessage` string
        - `uploadInProgressMessage` string
        - `uploadFinishingMessage` string
        - `offlineErrorMessage` string
        - `onlineRestoredMessage` string
        - `serverErrorMessage` string
        - `uploadErrorMessage` string
        - `uploadFileSizeErrorMessage` string
        - `uploadFileTypeErrorMessage` string
        - `schedulerRequiredErrorMessage` string
        - `duplicateSubmissionTitle` string
        - `duplicateSubmissionDescription` string
      - `builder` object: Builder-only editing preferences.
        - `createStepPerField` boolean
        - `requiresProPublish` boolean: Server-managed publish gate. Preserve a returned true value; do not set this property on new drafts.
      - `hidden` object: Hidden fields and Workflow variables. Prefer formasty_configure_workflow_variables for narrow variable-only MCP edits.
        - `hiddenFields` object[]
          - `key` string, required: Hidden field key. Use only letters, numbers, and underscores.
          - `defaultValue` string, required: Default hidden field value.
        - `variables` object[]: Workflow-tab variable definitions available to variable conditions and variable actions.
          - `id` string: Stable workflow variable id. Omit when creating a new variable, or provide an existing id to update that variable.
          - `name` string, required: Workflow variable token name. Use only letters, numbers, and underscores.
          - `type` 'number' | 'text', required: Variable value type used by workflow conditions and actions.
          - `initialValue` union: Optional initial value. Number variables require a numeric value; text variables accept a string.
            - string
            - number
          - `formula` string: Optional formula (number variables only) turning this into a calculated variable. Refs: {{var:<id>}} and {{field:<id>}}. Functions: IF, MIN, MAX, ROUND, FLOOR, CEIL, ABS. Operators + - * / and comparisons. Max 500 chars. Must reference existing fields/variables; no self/circular references. Calculated variables cannot be targets of workflow variable actions.
          - `format` object: Optional display format for a number/calculated variable shown on the form.
            - `kind` 'number' | 'currency' | 'percent', required: Display format kind.
            - `currency` string: ISO currency code, required when kind is currency (USD, EUR, GBP, INR, CAD, AUD, JPY, AED, SGD).
            - `decimals` 0 | 1 | 2: Optional decimal places.
          - `showOnForm` boolean: When true, show a live result pill for this calculated variable on the public form.
      - `submissions` object: Submission behavior, duplicate prevention, and thank-you screen configuration.
        - `autosaveProgress` boolean: Stores respondent progress in their browser so reopening the same public form can continue from the last session.
        - `anonymousResponses` boolean: When true, Formasty avoids collecting respondent identity metadata that is not part of the submitted answers.
        - `preventDuplicates` boolean
        - `dedupe` object: Submission dedupe controls.
          - `cookie` object
            - `enabled` boolean, required
          - `uniqueField` object: Unique-field duplicate prevention settings.
            - `enabled` boolean
            - `fieldId` string: Field id used for duplicate prevention.
            - `normalize` 'lower_trim' | 'trim' | 'none'
        - `thankYou` object: Primary submission thank-you configuration.
          - `mode` 'message' | 'redirect', required
          - `redirectUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `title` string
          - `description` string
          - `message` string
          - `showSocialShareIcons` boolean
          - `socialShareLinks` object: Optional social share links rendered on thank-you screens.
            - `facebook` string: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `x` string: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `linkedin` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `showButton` boolean
          - `buttonLabel` string
          - `buttonUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `buttonOpenInNewTab` boolean
          - `mediaUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `mediaType` 'image' | 'video'
          - `mediaAlt` string
          - `mediaAttribution` object: Linked attribution metadata for third-party images. Currently used for Unsplash photos.
            - `provider` 'unsplash', required
            - `photographerName` string, required
            - `photographerUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `sourceName` 'Unsplash'
            - `sourceUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `photoUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `logoUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `logoAttribution` object: Linked attribution metadata for third-party images. Currently used for Unsplash photos.
            - `provider` 'unsplash', required
            - `photographerName` string, required
            - `photographerUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `sourceName` 'Unsplash'
            - `sourceUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `photoUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `titleSize` 'sm' | 'md' | 'lg'
          - `textAlign` 'left' | 'center'
          - `backgroundColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
          - `backgroundImageUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `backgroundImageAttribution` object: Linked attribution metadata for third-party images. Currently used for Unsplash photos.
            - `provider` 'unsplash', required
            - `photographerName` string, required
            - `photographerUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `sourceName` 'Unsplash'
            - `sourceUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `photoUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `backgroundImageBrightness` integer
          - `headingColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
          - `descriptionColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
          - `buttonBackgroundColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
          - `buttonTextColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
          - `buttonRadius` 'none' | 'sm' | 'lg': Thank-you button radius. Allowed values are only "none", "sm", and "lg"; "md" is not supported.
          - `resultPage` object: Optional scorecard/result-page block for useful outcome summaries, highlights, and CTAs on thank-you screens.
            - `highlights` string[]: Optional concise result-page bullets. Empty strings are ignored.
            - `cta` object: Optional result-page CTA. Use a real URL only; do not invent booking links.
              - …
        - `thankYouScreens` object[]
          - `id` string, required: Stable thank-you screen id.
          - `title` string
          - `description` string
          - `message` string
          - `showSocialShareIcons` boolean
          - `socialShareLinks` object: Optional social share links rendered on thank-you screens.
            - `facebook` string: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `x` string: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `linkedin` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `showButton` boolean
          - `buttonLabel` string
          - `buttonUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `buttonOpenInNewTab` boolean
          - `mediaUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `mediaType` 'image' | 'video'
          - `mediaAlt` string
          - `mediaAttribution` object: Linked attribution metadata for third-party images. Currently used for Unsplash photos.
            - `provider` 'unsplash', required
            - `photographerName` string, required
            - `photographerUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `sourceName` 'Unsplash'
            - `sourceUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `photoUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `logoUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `logoAttribution` object: Linked attribution metadata for third-party images. Currently used for Unsplash photos.
            - `provider` 'unsplash', required
            - `photographerName` string, required
            - `photographerUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `sourceName` 'Unsplash'
            - `sourceUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `photoUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `titleSize` 'sm' | 'md' | 'lg'
          - `textAlign` 'left' | 'center'
          - `backgroundColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
          - `backgroundImageUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `backgroundImageAttribution` object: Linked attribution metadata for third-party images. Currently used for Unsplash photos.
            - `provider` 'unsplash', required
            - `photographerName` string, required
            - `photographerUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `sourceName` 'Unsplash'
            - `sourceUrl` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
            - `photoUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
          - `backgroundImageBrightness` integer
          - `headingColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
          - `descriptionColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
          - `buttonBackgroundColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
          - `buttonTextColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
          - `buttonRadius` 'none' | 'sm' | 'lg': Thank-you button radius. Allowed values are only "none", "sm", and "lg"; "md" is not supported.
          - `resultPage` object: Optional scorecard/result-page block for useful outcome summaries, highlights, and CTAs on thank-you screens.
            - `highlights` string[]: Optional concise result-page bullets. Empty strings are ignored.
            - `cta` object: Optional result-page CTA. Use a real URL only; do not invent booking links.
              - …
      - `privacy` object: Privacy settings use the same contract returned by formasty_get_form(). Preserve unknown keys unless you intentionally change them.
    - `theme` object, required: Partial theme patch. Use the same keys returned by formasty_get_form().form.draftSchema.theme.
      - `fontFamily` 'system' | 'custom' | 'sohne' | 'satoshi' | 'plus_jakarta_sans' | 'inter' | 'manrope' | 'dm_sans' | 'poppins' | 'nunito' | 'playfair_display' | 'roboto_slab' | 'space_grotesk' | 'ibm_plex_mono'
      - `customFont` object: Uploaded custom font metadata. Reuse the exact values returned by the font upload flow.
        - `family` string, required
        - `fileName` string, required
        - `assetId` string, required
        - `format` 'woff2' | 'woff' | 'ttf' | 'otf', required
        - `url` string, required: Absolute URL string. Prefer https URLs for public assets and integrations.
        - `storageKey` string
      - `baseFontSize` 'sm' | 'md' | 'lg'
      - `labelWeight` 'normal' | 'medium' | 'semibold'
      - `backgroundColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
      - `fontSizeScale` 'compact' | 'default' | 'spacious'
      - `headingWeight` 600 | 700
      - `background` object: MCP-created and MCP-edited forms use solid form backgrounds only. Use backgroundColor for the page background; keep outcome-specific colors on thank-you screens.
        - `type` 'solid', required
        - `value` string, required: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
      - `surfaceColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
      - `textColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
      - `accentColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
      - `linkColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
      - `borderColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
      - `buttonTextColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
      - `primaryColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
      - `secondaryColor` string: Color token such as #RRGGBB, rgb(...), or rgba(...). Use the same values returned by formasty_get_form.
      - `borderIntensity` 'subtle' | 'medium'
      - `radius` 'none' | 'sm' | 'md' | 'lg'
      - `density` 'compact' | 'comfortable' | 'airy'
      - `inputSpacing` 'compact' | 'comfortable' | 'airy'
      - `width` 'narrow' | 'medium' | 'wide'
      - `progress` 'none' | 'fraction' | 'dots'
      - `progressStyle` 'none' | 'step_count' | 'bar'
      - `previewMode` 'single-step' | 'stacked'
      - `buttonStyle` 'filled' | 'outline'
      - `alignment` 'left' | 'center' | 'right'
      - `brandPalette` string[]: Optional brand palette swatches shown in the builder design system.
      - `hoverLift` boolean
      - `showBrandBadge` boolean
      - `branding` object: Branding controls nested under theme.branding.
        - `showPoweredBy` boolean: Whether to show Formasty branding badges where the current plan allows it.
        - `logoUrl` string: Absolute URL string. Prefer https URLs for public assets and integrations.
        - `logoScale` number
    - `workflow` object, required: Full workflow schema. Reuse ids from the current draft when editing existing rules, conditions, groups, variables, or outcomes.
      - `version` 1, required
      - `enabled` boolean, required
      - `rules` object[], required
        - `id` string: Stable workflow rule id. Reuse existing ids when replacing or editing current rules.
        - `title` string: Optional human-readable rule label shown in the workflow UI.
        - `source` object, required
          - `stepId` string, required: Source step id for the rule.
          - `fieldId` string: Optional source field id when branching from a specific field.
        - `match` 'all' | 'any'
        - `combinator` 'and' | 'or'
        - `conditions` object[], required: Workflow conditions. Use an empty array for an unconditional 'always go to' route, especially for statement-only steps.
          - `id` string, required: Stable condition id. Reuse existing ids when editing an existing rule.
          - `sourceType` 'field' | 'hidden_field' | 'variable': What the condition reads from.
          - `sourceId` string: Hidden field key or variable id depending on sourceType. For field conditions, prefer fieldId; sourceId is accepted as a compatibility alias.
          - `fieldId` string: Field id when the condition reads from a form field.
          - `target` object: Optional workflow target selector for structured field values.
            - `subfieldKey` string: Optional subfield key for structured values such as address parts.
            - `rowKey` string: Optional matrix row key when a workflow condition targets a matrix row value.
          - `operator` 'equals' | 'not_equals' | 'contains' | 'not_contains' | 'starts_with' | 'ends_with' | 'includes' | 'not_includes' | 'gt' | 'gte' | 'lt' | 'lte' | 'between' | 'is_answered' | 'is_not_answered', required: Comparison operator. Use only operators that are already valid for the chosen source/target.
          - `value` union: Condition value. For between, use [min,max] or {min,max}. For includes/not_includes on multi-choice values, use a string array.
            - string
            - number
            - boolean
            - union[]
              - …
            - object
              - …
            - string[]
        - `logic` object: Optional advanced workflow logic tree. Preserve ids when editing existing logic.
          - `mode` 'simple' | 'custom': Rule logic mode.
          - `nodes` union[]
            - union
              - …
          - `combinators` string[]
          - `groups` object[]
            - `id` string, required
            - `combinator` 'and' | 'or', required
            - `conditionIds` string[], required
        - `then` union, required: Workflow destination. Use existing step ids or thank-you screen ids from formasty_get_form.
          - object
            - `type` 'step', required
            - `stepId` string, required: Destination draft step id.
          - object
            - `type` 'thank_you', required
            - `screenId` string, required: Thank-you screen id from settings.submissions.thankYouScreens.
          - object
            - `type` 'end', required
        - `thenAction` object: Workflow variable mutation attached to a rule or step action.
          - `id` string, required: Stable action id. Reuse existing ids when patching current workflow rules.
          - `variableId` string, required: Workflow variable id to modify.
          - `operation` 'set' | 'add' | 'subtract' | 'multiply' | 'divide' | 'clear' | 'append' | 'prepend', required: Workflow variable operation.
          - `source` object: Workflow variable action source. Reuse ids and targets from the current draft snapshot.
            - `sourceType` 'literal' | 'field' | 'hidden_field' | 'variable': Where the workflow variable action should read its value from.
            - `sourceId` string: Hidden field key or variable id depending on sourceType. For field sources, prefer fieldId; sourceId is accepted as a compatibility alias.
            - `fieldId` string: Field id when reading from a form field.
            - `target` object: Optional workflow target selector for structured field values.
              - …
            - `value` union: Literal fallback value used when sourceType is literal.
              - …
        - `else` union: Workflow destination. Use existing step ids or thank-you screen ids from formasty_get_form.
          - object
            - `type` 'step', required
            - `stepId` string, required: Destination draft step id.
          - object
            - `type` 'thank_you', required
            - `screenId` string, required: Thank-you screen id from settings.submissions.thankYouScreens.
          - object
            - `type` 'end', required
        - `priority` integer: Lower numbers run first when multiple rules apply.
        - `stopProcessing` boolean: Stop evaluating later rules after this one matches.
      - `fallback` object: Per-step fallback routing keyed by step id.
      - `stepActions` object: Per-step workflow variable actions keyed by step id.
      - `layout` object: Workflow canvas layout metadata. Preserve existing values when you are not intentionally changing the layout.
        - `nodes` object
        - `viewport` object
          - `x` number, required
          - `y` number, required
          - `zoom` number, required
        - `panX` number
        - `panY` number
        - `zoom` number
        - `autoArranged` boolean
    - `quiz` union: Optional quiz configuration. Use type=match for recommendation/personality quizzes or type=score for score ranges.
      - object: Optional recommendation/personality quiz configuration.
        - `type` 'match', required
        - `mode` 'match' | 'personality'
        - `enabled` boolean, required
        - `endings` object[], required
          - `screenId` string, required
        - `mappings` object[], required
          - `id` string, required
          - `fieldId` string, required
          - `optionId` string
          - `optionValue` string
          - `value` union
            - string
            - number
            - boolean
          - `target` object: Optional workflow target selector for structured field values.
            - `subfieldKey` string: Optional subfield key for structured values such as address parts.
            - `rowKey` string: Optional matrix row key when a workflow condition targets a matrix row value.
          - `screenId` string, required
          - `weight` number
      - object: Optional score quiz configuration. Use ending minScore/maxScore ranges to resolve the result.
        - `type` 'score', required
        - `enabled` boolean, required
        - `endings` object[], required
          - `screenId` string, required
          - `minScore` number
          - `maxScore` number
        - `mappings` object[], required
          - `id` string, required
          - `fieldId` string, required
          - `optionId` string
          - `optionValue` string
          - `value` union
            - string
            - number
            - boolean
          - `target` object: Optional workflow target selector for structured field values.
            - `subfieldKey` string: Optional subfield key for structured values such as address parts.
            - `rowKey` string: Optional matrix row key when a workflow condition targets a matrix row value.
          - `score` number, required
        - `qualification` object: Optional Business-tier lead qualification tiers. Each tier classifies the computed score into a labeled lead tier when its minScore threshold is met. Requires Business or an active trial.
          - `enabled` boolean, required
          - `tiers` object[], required
            - `id` string, required
            - `label` string, required
            - `color` string: Optional hex color in #RRGGBB format, matching the builder validation.
            - `minScore` number, required
    - `poll` object: Optional poll configuration. Poll publishing is subject to the current workspace plan.
      - `enabled` boolean, required
      - `resultsVisibility` 'after_vote' | 'hidden', required: Whether aggregate poll results are shown after voting or kept hidden.
  - `draft_revision` integer
  - `public_url` string

## Other responses

- `default`: A machine-readable error with a stable code and a recovery hint. The legacy error value is retained for existing clients.

---

[API](https://skmtc.dev/formasty/apis/formasty-forms-api.md) · [All operations](https://skmtc.dev/formasty/apis/formasty-forms-api/llms.txt) · [OpenAPI document](https://skmtc.dev/formasty/apis/formasty-forms-api/revisions/09ad7f50c693?raw)
