> For the complete documentation index, see [llms.txt](https://help.felt.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.felt.com/layers/forms.md).

# Forms

Design the form people fill in when they add or edit a feature, on the web or in the Field App, so the data you capture stays consistent.

A form collects a feature's attributes when people add or edit it, on the web or in the Field App. Each attribute becomes a field, such as a text box, dropdown, or photo field. A field survey uses the form to capture data. See [Run a field survey](/field-app/run-a-field-survey.md).

## Set up a form

1. In edit mode, click the layer's **···** menu in the legend and click **Edit attributes**. For a new layer, the same dialog opens when you [create the layer](/layers/create-layers.md).
2. Click **Add attribute** and select a type, or select an existing attribute in the list.
3. Adjust the attribute's settings in the **Basics**, **Survey**, and **Table** sections. The **Preview** on the right shows the form as you go.
4. Drag attributes in the list to set the order of the form's fields.
5. Click **Update layer**.

Use the **Survey** and **Table** sections to hide a field from the form or the table. Hidden fields keep their data. To show a field without allowing edits, turn on **Read only** in **Basics**.

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2Fgit-blob-99bdab2c9474631fae9f13a70025f0b5d8b59846%2Fedit-attributes-dialog.webp?alt=media" alt="Edit attributes dialog for hurricane claims with the Add attribute types listed, the attribute list, and a form preview."><figcaption></figcaption></figure>

## Supported attribute types

An attribute's type sets what kind of value its field accepts, and you can't change it after you add the attribute. See [Add, rename, or delete attributes](/layers/edit-features.md#add-rename-or-delete-attributes).

| Type    | Holds                                                        | Example                                   |
| ------- | ------------------------------------------------------------ | ----------------------------------------- |
| Text    | Any text                                                     | `Area 1`, `Reviewing proposal`            |
| Number  | Whole or decimal numbers                                     | `10`, `0.54`                              |
| Boolean | True or false                                                | `true`                                    |
| Date    | A date, and optionally a time (turn on **Show time**)        | `2027-01-01 16:30`                        |
| Image   | One or more photos or files per feature                      | A `.jpg`, `.png`, `.heic`, or `.pdf` file |
| Person  | A member of your workspace, such as the inspector for a site | `Nora Smith`                              |

To add photos to features, add an Image attribute. People can then attach photos in the feature editor or take them in the Field App. You can also use the attribute as the header image of a [popup](/styling/popups.md).

## Add a dropdown list

A dropdown (single-select field) offers a fixed list of choices, which keeps values consistent. Text and Number attributes can use one.

1. In the **Edit attributes** dialog, select the attribute.
2. In the **Basics** section, set **Form type** to **Single-select**.
3. In the **Values** list, enter each value you want to offer, or paste a list separated by commas or line breaks to add many at once. Each value gets its own row.

To turn a Text or Number attribute that already has values into a dropdown, follow the same steps. When you set **Form type** to **Single-select**, the first row of the empty **Values** list shows how many values are in your data. Click **Prefill** in that row to build the list from them. For an attribute with many values, the button reads **Prefill top** and the number of values it adds. The row doesn't appear for a new attribute, or once the list has values.

A dropdown holds one value per feature. To record several choices for one feature, add a Boolean attribute for each choice.

## Advanced form settings

{% hint style="success" %}
Available on the Business and Enterprise plans. [Compare plans](https://felt.com/pricing#compare)
{% endhint %}

Use required fields and show if conditions to control what a form collects. Set them in the **Edit attributes** dialog.

### Make a field required

Select the attribute and turn on **Required** in **Basics**. The field then shows an asterisk (\*), and the feature can't be saved until the field is filled in. Saving with it empty shows *This field is required*.

### Show if conditions

A show if condition makes a field appear only when another field's answer meets a condition. For example, ask for a damage rating only when `Damage observed` is true.

1. In the **Edit attributes** dialog, select the field that should appear conditionally.
2. In the **Survey** section, next to **Show if**, click **Add condition**.
3. Select the field to check, a comparison, and a value.
4. Optional: Add more conditions, and select whether all or any of them must be met.

If a field's show if condition is no longer met, Felt clears its value the next time the feature is saved. Conditions affect only the form; the table and exports show every value.

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2Fgit-blob-df5979b1e60e4e1a4d5110c0e12864282812bc6c%2Fedit-attributes-show-if.webp?alt=media" alt="Edit attributes dialog with Show if set so Policy type shows when Inspection status is Closed."><figcaption></figcaption></figure>

## Metadata fields

Metadata fields are attributes Felt fills in automatically. Add one with **Add attribute**, like any other attribute. They're read-only and hidden from the form by default; to show one, turn off **Hidden** in its **Survey** section.

Measurement fields record each feature's size and update when its geometry changes.

| Field     | Layer type | Records                         |
| --------- | ---------- | ------------------------------- |
| Length    | Line       | The line's length               |
| Perimeter | Polygon    | The distance around the polygon |
| Area      | Polygon    | The polygon's area              |

### Edit tracking fields

{% hint style="success" %}
Available on the Business and Enterprise plans. [Compare plans](https://felt.com/pricing#compare)
{% endhint %}

Edit tracking fields record who created or last changed each feature, and when: Created at, Created by, Modified at, and Modified by.

## Frequently asked questions

<details>

<summary>Can a field be calculated or filled in automatically?</summary>

No. Apart from metadata fields, Felt doesn't calculate a field from other fields or from the feature's location. To fill in values for many features at once, ask [Felt AI](/felt-ai/ai-assistant.md) or use the Join operation in [Spatial analysis](/analysis-and-dashboards/spatial-analysis.md).

</details>

<details>

<summary>Can a dropdown's options depend on another field or come from a layer?</summary>

No. A dropdown's values are a fixed list you enter or prefill once. To adapt a form to earlier answers, add a field for each case and use [show if conditions](#show-if-conditions) to show only the one that applies.

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://help.felt.com/layers/forms.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
