---
title: "Create an embedded form"
method: POST
path: "/api/v1/lead-capture/embedded-forms"
tags: ["Lead Capture"]
---

# Create an embedded form

`POST /api/v1/lead-capture/embedded-forms`

## Request

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

Create an embedded form, PAUSED and unpublished. Edit its draft with lead_capture_embedded_forms_update, publish it with lead_capture_embedded_forms_publish, then set it ACTIVE. Visitors see nothing until it is published, ACTIVE, and embedded on an allowed site.

## Request body

- object
  - `name` string, required: Internal name, unique in the organization.
  - `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`.
  - `draft` object: A full starting config (see lead_capture_embedded_forms_get). Omitted: one email question and a thank-you ending, the slug taken from the name. Set `language.default` (en, es or pt) to the language the copy is written in: publishing checks the required text in it.

## Response `201`

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/post.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)
