Skip to main content
PATCH
Update Saved Form
Update an existing saved form. Every field is optional - send only what should change. Use this to retarget the audience, edit copy, restyle the form to match your brand, or replace the content blocks (for example to remove blocks you no longer want rendered publicly).

Request

string
required
Saved form ID.
string
New internal form name.
string[]
Replacement list targeting. Every submission joins these lists.
string[]
Replacement tag IDs. Pass an empty array to clear tags.
string
skip, merge, or overwrite.
string
New text for the form’s first heading block. Fails if the form has no heading block - edit blocks instead.
string
New text for the form’s first paragraph block. Fails if the form has no paragraph block - edit blocks instead.
string
New submit button label.
string
New confirmation message on the success screen.
string
HTTP or HTTPS success redirect. Pass an empty string to switch back to the confirmation message.
object
Visual overrides merged into the current theme. Any subset of accentColor, backgroundColor, textColor, mutedTextColor, cardColor, borderColor (all #rrggbb), borderRadius (0-32), headingFontFamily, bodyFontFamily, and density (compact | balanced | spacious).
object[]
Full replacement for the form’s content blocks. Read the current blocks with GET /api/v1/forms, modify them, and send the complete array. The form must keep exactly one required email field and one submit button. See Content blocks below.

Content blocks

Blocks render in array order. Every block needs a unique id and a kind. Content blocks (heading, text, image, button, divider, spacer, custom-html, feature-grid, testimonial, countdown) may also set sectionId to "success" or "error" to render inside that screen; input blocks, the submit button, and the success and error blocks always belong to the form itself. Available kinds: form-field, form-step, submit-button, success-screen, error-state, plus the content kinds above.

Form field blocks

kind: "form-field" renders one input. Fields that are not mapped to a built-in subscriber property are stored as subscriber custom attributes keyed by the block’s name.
string
default:"text"
text, email, phone, number, textarea, select, radio, checkbox, consent, or hidden.
string
required
The submitted key, and the custom attribute key when mapsTo is customAttribute. Must start with a letter and may contain letters, digits, _, ., and -. Field names must be unique within a form.
string
default:"customAttribute"
email, firstName, lastName, phone, or customAttribute. The email field must use fieldType: "email" and required: true; first and last name fields must use fieldType: "text"; a mapped phone field must use fieldType: "phone". A form may contain at most one field per built-in target.
string
Accessible name, also shown above the input unless showLabel is false.
string
Placeholder text. Also used as the empty option’s label on select.
boolean
default:"false"
Whether submissions without a value are rejected.
string
Pre-filled value. On a hidden field this is the server-owned value (see below).
boolean
default:"true"
Whether the label renders above the input.
string
full or half. Adjacent half fields pair side by side and stack on mobile.
object[]
Required for select, radio, and checkbox: [{ "value": "pro", "label": "Pro", "id": "pro" }]. Only value is required - label and id default to value. Values and ids must be unique within the field, and submissions outside the option values are rejected. A checkbox field stores an array of the selected values.

Hidden fields

A hidden field with a non-empty defaultValue always stores that server-owned value and ignores whatever the page posts, which is how you stamp a constant such as a form source. A hidden field with an empty defaultValue stores the value the page submits, which is how you pass machine-filled data such as UTM parameters or a page URL. A required hidden field must have a defaultValue.

Example

Validation failures name the offending property, for example blocks[1].options[0].value: Too small: expected string to have >=1 characters.

Responses