> ## Documentation Index
> Fetch the complete documentation index at: https://docs.useboom.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Embedded forms

> A form inside your own page — tests with a score and a result, sign-ups, lead forms — that saves every answer in Boom and starts a journey.

An embedded form sits **inside** a page on your site, where you place it: a
test with a score and a result ("test de estrés"), a webinar sign-up, a lead
form on a landing page. Each answer is saved in Boom, the person becomes a lead
in your [CDP](/cdp/overview) people, and the form records an
[event](/events) a [journey](/journeys) can start from, within seconds.

<Note>
  Embedded forms are part of the Lead Capture add-on. If you don't see
  **Forms** under **Settings → Add-ons → Lead Capture**, ask your account
  manager to turn them on for your organization.
</Note>

## Build a form

In **Settings → Add-ons → Lead Capture**, choose **New → Form** and start from
a template (*Lead form*, *Webinar registration*, *Short test*) or blank.

* **Questions**, grouped in **steps**: one question per step feels like
  Typeform; several make a classic form. Types: short and long text, email,
  phone, number, single choice, multiple choice, dropdown, scale (0–10 or 1–5)
  and plain text with no question.
* Each question has a **key** (how it is stored, e.g. `sleep`) and each answer
  a **value** (e.g. `badly`). Labels can change any time and in any language;
  keys and values are what your segments and journeys read, so they freeze
  once the form is published.
* **Scoring**: give answers points (a scale scores the number picked) and add
  **results** with a score range — "0–3: low stress", "4–8: high stress" — plus
  one result for anything else. The visitor sees the result that matches;
  Boom picks it, never the page.
* **Hidden fields** carry values from the page's address (`?campaign=octubre`)
  onto the response; `utm_*` tags are kept automatically. **Constants** put a
  fixed value on every response, such as a webinar's date.

A form needs a required email or phone question, so every response belongs to
a person journeys can reach.

## Publish, then go live

You edit a **draft**; visitors only ever see a **published version**. Publish
when the draft is ready: Boom refuses with the reasons if something is missing,
and lists the journeys and segments still reading a question or answer you
removed. Then set the form **Active**.

Pages already open keep working for an hour after you publish a new version, so
nobody loses their answers mid-form.

## Put it on your site

Paste both tags where the form should appear (the **Install** tab has them with
your key):

```html theme={null}
<div data-boom-form="blc_live_…"></div>
<script async src="https://www.useboom.ai/widget/v1/lc/blc_live_…"></script>
```

Add every site that shows it under **Allowed sites** — matching is exact, so
`https://example.com` does not cover `https://www.example.com`. The form fits
the width of its container and grows to fit each question; turn on **Fixed
height** under **Design** to keep it one size.

After a submission the page receives a `boom:form-submitted` event (no answers,
no contact details) for your own analytics; turn on **Push to dataLayer** to
send `boom_form_submitted` to Google Tag Manager for your ad pixels.

## Make it look like yours

Visitors see one question at a time, with the question as the headline. They
can answer with the keyboard: a letter picks an answer, a number picks a point
on a scale, and Enter moves on. A question with a single answer moves on by
itself.

Under **Design**, start from a look (Paper, Graphite, Sand, Forest, Ocean,
Plum, Mono, or Brand, which is built from your accent colour), then adjust it:
accent and text colours, font, answer style, corners, button shape, alignment,
question size, a background image, or no background at all so the form sits on
your page. Fonts are served by Boom, so your visitors' browsers never contact a
font company.

Under **Questions**, turn on the **Welcome screen** to open with a title, a
line and a Start button before the first question.

## Share a link instead

For ads, your bio or an email, turn on **Hosted page** in the form's settings:
the form gets its own page at
`www.useboom.ai/f/<your-workspace>/<form>`, with your title and description for
link previews. Search engines are kept out unless you allow them. Turning the
page off takes it down with the next publish, within a few minutes. A hosted
form cannot ask for passwords, card numbers, PINs or one-time codes, and its
result buttons and redirects can only go to your allowed sites.

## What each response creates

* A **lead** in People (`source: lead_capture`), never merged into an existing
  customer by what someone typed. Answers are saved on the person under
  `<form>_<key>`, the result as `<form>_result` and the score as
  `<form>_score`, so "everyone who got *high stress* on the stress test" is a
  segment with no setup.
* An **event** named after the form (for example `test_estres_submitted`) with
  every answer by key, the score and result, hidden fields and UTMs. Build a
  journey on it in the journey builder: the event and all its properties are
  there as soon as the form is published.
* A **response** in the form's **Responses** tab, with a CSV export.

Journeys only start for people who ticked the marketing box (or forms that show
none). With a phone question, the WhatsApp opt-in box is required.

## Sensitive questions (health and similar)

Mark a question **sensitive** when its answer is health data or as private.
Then:

* the answer is stored encrypted and saved on the person as a
  [sensitive field](/hide-sensitive-data): agents never see it, and only people
  with access to sensitive data do;
* the answer, the score and the result are left off the event;
* the form must ask for consent to process the answers, with a link to your
  privacy notice, before it can be published;
* responses are deleted after a retention period (a year by default).

Once published, a sensitive question stays sensitive.

## When someone asks you to stop or to delete their answers

From a response, an admin can act on a person's privacy request:

* **Withdraw consent** adds them to Do Not Contact (in People), so
  nothing is sent to them on any channel, turns their WhatsApp and email
  opt-ins off, and stops the journeys still running for them. Remove them from
  Do Not Contact to message them again.
* **Erase** deletes every form response of theirs, the events those
  responses created and the answers saved on their profile, right away. The
  person stays in People with their contact details; delete them there too if
  they asked for that.

## Use it from your tools

Everything above is available on the [REST API and MCP](/use-mcp):
`lead_capture_embedded_forms_list`, `…_get`, `…_create`, `…_update` (edit the
draft, sites and status), `…_publish`, and `lead_capture_form_responses_list`.
Agents always see sensitive answers as `[redacted]`. An organization **API
key** reads them in full, like the rest of the REST API, so give keys only to
systems that need the data.

## Keep another tool in sync

Moving off another email tool gradually? Build a journey on the form's event
with an **HTTP request** step that posts the response to the other tool's API.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.