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

# Typeform

> Each response to a Typeform form creates a Contact from the email.

## What it brings into Brein

Each response creates or fills in a **Contact**, and their **Company** by the email domain. If you ask at connect time, it also opens an **Opportunity**.

Typeform has no fixed fields: every question in your form is different. So the template knows only one thing for sure.

| From Typeform | Goes to |
| - | - |
| The first answer of type email | Contact email |

The name, phone, company and the rest arrive as **new fields, undecided**. You assign them once on the Integration's page and from then on they are stored.

## Connect it

Typeform's signing secret is set when you create the webhook with its API. You need a Typeform token and your form id (it is in its address: in `https://yourcompany.typeform.com/to/u6nXL7` it is `u6nXL7`).

<Steps>
  <Step title="In Brein">
    Go to **Settings → Integrations → Connect → Typeform**. Copy the **address** and the **secret**. The secret is shown only once.
  </Step>

  <Step title="Create the webhook in Typeform">
    With the Typeform webhooks API (*Create or update webhook*):

    ```bash theme={"theme":"github-light"}
    curl -X PUT "https://api.typeform.com/forms/<form id>/webhooks/brein" \
      -H "Authorization: Bearer $TYPEFORM_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{
        "url": "https://api.trybrein.com/api/v1/door/<Source id>",
        "enabled": true,
        "secret": "<the Brein secret>",
        "event_types": { "form_response": true }
      }'
    ```

    `brein` is the name you give this webhook on that form. Typeform signs each notice with the `secret` and Brein verifies it with the `Typeform-Signature` header.
  </Step>

  <Step title="Answer the form">
    You will see the Arrival in Brein. Review the **new fields, undecided** and assign the name, phone and company. Then reprocess the Arrivals that ended up with no person.
  </Step>
</Steps>

## Which events to choose

Only `form_response`: a complete response.

## Limits

* The template maps **only the email**. You assign the rest, because it depends on each form's questions.
* A form without a required email question can bring **no person** responses.
* You need one webhook per form.

More about results, how people are recognized and privacy: [Integrations](/integrations). Source: [securing webhooks in Typeform](https://www.typeform.com/developers/webhooks/secure-your-webhooks/).


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