---
title: "Update a form"
method: PATCH
path: "/forms/{formId}"
tags: ["Forms"]
---

# Update a form

`PATCH /forms/{formId}`

## Request

- Base URL: `https://api.clipform.io/v1`
- URL: `https://api.clipform.io/v1/forms/{formId}`
- Auth: HTTP bearer

Updates a form.

## Path parameters

- `formId` string, uuid, required

## Request body

- object
  - `title` string: The form's own name (form table).
  - `meta_title` string, nullable: SEO/social title for search results and link previews (form_metadata.title, surfaced to the viewer as meta_title). Distinct from the form name `title`.
  - `is_live` boolean
  - `show_step_counter` boolean: Show step counter (e.g. '1/5')
  - `disable_back_navigation` boolean: Prevent respondents from going back
  - `total_steps` integer, nullable: Override total step count (null = auto-calculate)
  - `show_branding` boolean, nullable: Per-form override for "Powered by Clipform" badge. null = inherit from workspace, true = show, false = hide. Free plans always show branding regardless.
  - `moderate_responses` boolean, nullable: Per-form override for moderating open-ended answers on ingest. null = inherit from workspace, true = moderate, false = do not moderate.
  - `primary_color` string: Primary/brand color (hex or CSS color)
  - `background_color` string: Background color (hex, rgba, or CSS color)
  - `font_family` string: Font family name
  - `brand_name` string, nullable: Brand name shown alongside the logo in the viewer
  - `logo_url` string, nullable: URL to a logo image shown in the viewer header
  - `description` string, nullable: SEO description (meta description, og:description)
  - `author` string, nullable: Author/brand name shown to respondents
  - `allow_resume` boolean: Let returning respondents resume an unfinished session instead of restarting.
  - `session_expiry_hours` integer: Hours before a saved resume session expires (clamped 1-720). Default 168 (7 days).
  - `results_public` boolean: Enable the public results portal. The first enable mints a results_share_id server-side; toggling off and back on keeps the same token.

## Response `200`

Form updated

- object
  - `form_id` string, uuid
  - `results_share_id` string, nullable: Public results portal token, present only when results_public was just enabled for the first time.

## Other responses

- `429`: Rate limit exceeded.

---

[API](https://skmtc.dev/clipform/apis/clipform-api.md) · [All operations](https://skmtc.dev/clipform/apis/clipform-api/llms.txt) · [OpenAPI document](https://skmtc.dev/clipform/apis/clipform-api/revisions/490de83af482?raw)
