RECIPE: Create a Wix Form

Download skillThe skill is a reference md and part of wix-manage skill. You can use the following command to add the full wix-manage skill to your project:
Copy

Standard call shape (every curl below). The <AUTH> placeholder is shorthand for Authorization: Bearer <TOKEN> only. Body-bearing requests also need Content-Type: application/json.

Create a form on a Wix site that appears in the Forms & Submissions dashboard. The form collects visitor information (e.g., name, email) and can automatically upsert contacts on submission.


Create the form

Call the Create Form endpoint with the wix.form_app.form namespace. The Wix Forms app (appDefId: 14ce1214-b278-a7e4-1373-00cebd1bef7c) is usually already installed on sites.

Copy

The response includes the created form with its id. Store this ID to manage the form later.

Verify the form in the dashboard: https://manage.wix.com/dashboard/{siteId}/forms

Key Details

Field Configuration

  • All id fields (for formFields, steps) and all fieldId references in the layout must be valid UUIDs. Generate fresh UUIDs for each form you create — do not reuse the example UUIDs above.
  • Each field needs a unique id and a unique target value. The target is used to map submissions to contact fields.
  • CRITICAL: The identifier must be a recognized Wix value. Custom identifiers like "product_name" or "color_preference" will cause the field to be silently dropped from the form — no error is thrown. For any generic/custom text field, use "TEXT_INPUT" as the identifier and set the display name via the label property in textInputOptions.
  • For plain text fields, use "format": "UNKNOWN_FORMAT". For email fields, use "format": "EMAIL". For phone fields, use "format": "PHONE". Valid format values: UNKNOWN_FORMAT, DATE, TIME, DATE_TIME, EMAIL, URL, UUID, PHONE, URI, HOSTNAME, COLOR_HEX, CURRENCY, LANGUAGE, DATE_OPTIONAL_TIME.
  • The submit button is a DISPLAY field with identifier: "SUBMIT_BUTTON".
  • Build the complete form in one call — do not create throwaway "test" forms to probe field shapes. A site has a low form cap (~4 forms); iterative probing hits the cap (maximum number of forms reached), forcing you to GET the form list and DELETE the test forms before the real create can succeed. Assemble all fields (including any RADIO_GROUP/DROPDOWN per § "Choice fields") and POST once.

Field Types Reference

IdentifiercomponentTypeformatUse case
TEXT_INPUTTEXT_INPUTUNKNOWN_FORMATGeneric single-line text (use label for display name)
CONTACTS_FIRST_NAMETEXT_INPUTUNKNOWN_FORMATContact first name
CONTACTS_LAST_NAMETEXT_INPUTUNKNOWN_FORMATContact last name
CONTACTS_EMAILTEXT_INPUTEMAILContact email
CONTACTS_PHONETEXT_INPUTPHONEContact phone
SUBMIT_BUTTONN/A (DISPLAY field)N/ASubmit button
TEXT_INPUTRADIO_GROUPUNKNOWN_FORMATSingle-choice from a fixed list (radio buttons) — see § "Choice fields"
TEXT_INPUTDROPDOWNUNKNOWN_FORMATSingle-choice from a fixed list (dropdown) — same shape as RADIO_GROUP

Note: LONG_TEXT_INPUT is not supported as a componentType via REST — it throws INVALID_ARGUMENT. Use TEXT_INPUT for all text fields.

Choice fields (RADIO_GROUP / DROPDOWN)

A single-choice field (radio buttons or a dropdown — e.g. an RSVP "Will you attend?") is a STRING input field, not a separate field type. It uses identifier: "TEXT_INPUT", inputType: "STRING", and sets componentType to RADIO_GROUP (or DROPDOWN) inside stringOptions. Two things must agree or the field breaks:

  1. stringOptions.validation.enum must list every option value (an empty enum is for free-text only).
  2. stringOptions.radioGroupOptions.options[] carries the rendered choices — each option needs its own UUID id, a value, and a label. (For DROPDOWN, use dropdownOptions with the same {id, value, label} shape.)

CRITICAL — silent fallback to TEXT_INPUT. If radioGroupOptions is missing/malformed (wrong key like choices instead of options, an option missing its id, or an empty validation.enum), the API does not error — it silently creates the field as a plain TEXT_INPUT. If a choice field renders as a text box, this is why. Build it correctly on the first call; do not probe.

Copy

numberOfColumns is a string enum ("ONE", "TWO", "THREE") controlling the radio layout — omit it and the field still works (defaults to one column).

Layout

The steps[].layout.large.items array controls how fields are positioned:

  • row and column set the position (0-based grid)
  • width sets the column span (max 12 for full width, 6 for half)
  • height is typically 1

Post-Submission Triggers

The postSubmissionTriggers.upsertContact object maps form field targets to contact fields, so each submission automatically creates or updates a contact. The fieldsMapping keys must match the target values from the form fields.

Prerequisites

The Wix Forms app (appDefId: 14ce1214-b278-a7e4-1373-00cebd1bef7c) must be installed on the site. It is usually pre-installed, but if the API returns a "missing installed app" error, install it first using the Install Wix Apps recipe.

Troubleshooting

ErrorCauseFix
Unrecognized value passed for enumInvalid componentType value (e.g., LONG_TEXT_INPUT)Use only componentType values from the schema: TEXT_INPUT, RADIO_GROUP, DROPDOWN, DATE_TIME, PHONE_INPUT, DATE_INPUT, TIME_INPUT, DATE_PICKER, PASSWORD
Field silently missing from created formCustom identifier value (e.g., "product_name")Use a recognized identifier like TEXT_INPUT and set display name via label
Choice field rendered as a plain text boxradioGroupOptions/dropdownOptions malformed (wrong key, option missing id, empty validation.enum) — API silently falls back to TEXT_INPUTMatch the § "Choice fields" shape exactly: componentType in stringOptions, options[] each with a UUID id, and validation.enum listing all option values
maximum number of forms reached / form-cap errorSites cap at ~4 forms; reached by creating throwaway test formsGET form-schema-service/v4/forms then DELETE the unwanted forms; build the real form in one call (don't probe)
Permissions for given namespace not foundwix.form_app.form namespace not activeEnsure the Wix Forms app is installed; try creating a form through the UI first to activate the namespace
missing installed appWix Forms app not installedInstall app 14ce1214-b278-a7e4-1373-00cebd1bef7c via the Install Wix Apps recipe
Did this help?