update_hosted_form
Change a hosted form's presentation — or its fields — after creating it.
You shipped a hosted form and now want a different button label, a different accent colour, or to switch it into (or out of) conversational mode. This changes that, live on the next page load — the formId, embed snippet, and share link never change.
Pass only the settings you want to change; everything else is left exactly as it was. An empty string resets a theme value back to the widget's default.
It edits the form's fields too — this is the master-form move: change the fields once here and
every page that embeds the form picks up the change on the next load, with no re-embedding. New
fields are re-checked against the HubSpot form you submit to, the same check create_hosted_form
runs. The one thing it can't change is where submissions go — for a different destination, create a
new form with create_hosted_form.
Change a hosted form's presentation after creating it
Change an existing hosted form — its presentation (title, button text, theme colours, whether it asks one question per screen) or its fields. Editing fields here is the master-form edit: this form may be embedded on several pages, and a field change applies to every one of them at once, instead of editing each page separately. `submit` (where a submission goes) can never change — for a different destination, create a new form. If this form posts to a HubSpot form, new `fields` are re-checked against it, same as create_hosted_form: a field the HubSpot form doesn't define is rejected before anything is saved. The change is live on the next page load; the formId, embed snippet and share link never change. Pass only the settings you want to change; the rest are left alone. An empty string resets a theme value to its default.
Parameters
| Name | Type | Description | |
|---|---|---|---|
formId | string | required | — |
name | string | optional | The form's title — the page title, and the heading above the fields in a standard (non-conversational) form. |
buttonText | string | optional | The submit button's label. Name what the visitor gets, never "Submit". |
brandColor | string | optional | Primary brand colour, e.g. "#0f766e". "" resets to default. |
inkColor | string | optional | Body text colour. "" resets to default. |
bgColor | string | optional | Background of the hosted /f/ page (not the embed). "" resets to default. |
radius | string | optional | Corner radius, e.g. "8px". "" resets to default. |
fontFamily | string | optional | Font family. "" resets to default. |
mode | "conversational" | "" | optional | "conversational" asks one question per screen; "" clears it back to a standard form. Omit to leave unchanged. |
style | object | optional | Custom style knobs, as { knob: value }. Allowed knobs: surface, border (colours, e.g. "#0b1211"); fieldGap, labelSize (lengths, e.g. "24px"); buttonInk (colour); shadow ("none"|"soft"|"strong"). "" resets a knob to default. Invalid names/values are rejected. Presentation only — never touches fields or where submissions go. |
fields | object[] | optional | Replace the form's fields. This is the master-form edit: change fields here and every page that embeds this form updates at once. Omit to leave fields unchanged. |
steps | integer[] | optional | Field counts per step for the new fields, e.g. [2,3]. Only used with `fields`; omit for a single-page form. |