---
title: "Update an embedded form"
method: PATCH
path: "/api/v1/lead-capture/embedded-forms/{formId}"
tags: ["Lead Capture"]
---

# Update an embedded form

`PATCH /api/v1/lead-capture/embedded-forms/{formId}`

## Request

- Base URL: `https://www.useboom.ai`
- URL: `https://www.useboom.ai/api/v1/lead-capture/embedded-forms/{formId}`
- Auth: HTTP bearer

Edit an embedded form’s draft, replace its allowed sites, or set it ACTIVE or PAUSED. Draft edits reach visitors only when published.

## Path parameters

- `formId` string, required: Form id.

## Request body

- object
  - `draft` object: Any part of the draft, laid over the current one: objects merge, lists (steps, fields, options, endings) are replaced whole, so send the full list. Published keys, types, answer values, the slug and the event name cannot change; publishing refuses that with the reasons.
  - `allowedOrigins` string[]: Every site the pop-up may open on, as bare origins such as `https://www.example.com`. Matching is exact: `https://example.com` does not cover `https://www.example.com`.
  - `status` 'PAUSED' | 'ACTIVE': ACTIVE needs a published version and at least one site.

## Response `200`

Success

- object
  - `id` string, required
  - `name` string, required
  - `status` 'PAUSED' | 'ACTIVE', required
  - `allowedOrigins` string[], required
  - `installKey` string, required: Public; identifies the form in the embed.
  - `publishedVersion` number, nullable, required: The version visitors get; null until first published.
  - `unpublishedChanges` boolean, required: The draft differs from the published version.
  - `updatedAt` string, required
  - `embedTag` string, required: Paste where the form should appear, together with `installTag`.
  - `installTag` string, required
  - `draft` object, required: The editable config: `steps`, `fields` (typed questions with `key`, `options[].value`, `score`, `sensitive`), `endings` (with score ranges), `consent`, `hidden`, `constants`, `partials` (`enabled`, `notice`: keep what a visitor answered when they leave without submitting) and design. Edit it and send it back as `draft` to `lead_capture_embedded_forms_update`; lists are replaced whole. Visitors see nothing until `lead_capture_embedded_forms_publish`.
  - `publishIssues` string[], required: Why the draft cannot be published yet; empty when it can.

## Other responses

- `400`: Validation failed or the request cannot proceed.
- `401`: Missing, malformed, or revoked API key.
- `404`: The resource does not exist in this organization.
- `409`: Conflicts with the current state (duplicates, wrong lifecycle state).
- `422`: The request is well-formed but semantically invalid.
- `429`: Rate limit exceeded — retry after `Retry-After`.
- `500`: Internal server error.
- `503`: Transient error — retry with a narrower request.

## Changes

- **2026-11-03** `7c7a773b12ce`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/useboom/apis/boom-api/changes/api/v1/lead-capture/embedded-forms/:formId/patch.md)

---

[API](https://skmtc.dev/useboom/apis/boom-api.md) - [All operations](https://skmtc.dev/useboom/apis/boom-api/llms.txt) - [OpenAPI document](https://skmtc.dev/useboom/apis/boom-api/revisions/d596d92ed092?raw)
