> For the complete documentation index, see [llms.txt](https://kb.craftformswp.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kb.craftformswp.com/documentation/form-building/create-form/blocks/consent-field.md).

# Consent Field

The **Consent** field is one checkbox with your own wording next to it: "I agree to the hire terms", "I accept the privacy policy", "Send me the newsletter". The wording can have links and bold text. When the form is sent, CraftForms keeps a record of the consent with the submission: the exact wording the visitor agreed to, a version of that wording and the time. If you change the wording later, older submissions keep the wording their visitors saw.

![The Consent field in the form editor, with links and a page tag in its wording](https://97821998-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM2yV1foUgoGHBC66VBDw%2Fuploads%2FV0PiRgiZ543sM6FmHvZK%2Fconsent-field--consent-block.jpg?alt=media)

### What you need

* **CraftForms (free)**, version 2.3 or later. The Consent field is in the free version.

### Add a Consent field

1. Open your form in the editor (**CraftForms → Forms → Edit**).
2. Click the **+** (block inserter), type **consent** (or *terms*, *privacy*, *gdpr*) and choose **Consent**.
3. Click the text next to the checkbox and write your wording. Select words and use the toolbar's link button to link to your terms or privacy page. Bold and italic work too.
4. In the block settings, set the **Label** and check the **Field Name** (see below).
5. Save the form.

![The block inserter showing the Consent block](https://97821998-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM2yV1foUgoGHBC66VBDw%2Fuploads%2FO7F81BxsTu8YtAF5XzMW%2Fconsent-field--inserter.jpg?alt=media)

Add as many Consent fields as you need: one required for your terms, one optional for the newsletter.

### Settings

| Setting                | What it does                                                                                                                      |
| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| **Label**              | Not shown on the form. It names the field in submissions, emails and exports, for example "Hire terms". The default is "Consent". |
| **Field Name**         | The field's name for conditions, Run only if and tags. Starts as `consent`; give each Consent field its own name.                 |
| **Required**           | On by default: the form can't be sent until the box is ticked. Turn it off for an optional box, such as a newsletter.             |
| **"Required" message** | The message when a required box isn't ticked. Empty: *This field is required*.                                                    |

![The required message under an unticked Consent field](https://97821998-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM2yV1foUgoGHBC66VBDw%2Fuploads%2F7FCKipNfwPBdIBntSWj3%2Fconsent-field--required-error.jpg?alt=media)

### Page tags in the wording

The wording can include tags filled in from the page the form is on, such as `{{post.title}}`: "I agree to the cancellation terms for {{post.title}}." One form can then sit on many pages and show the right wording on each.

Custom fields of the page work with `{{meta.your_key}}`, for example "I understand the {{meta.deposit}} deposit is refundable." For privacy, a `meta.` key only shows once a developer has allowed it with the `craftforms_merge_meta_keys` filter; until then the tag is empty. See [Dynamic Tags and Variables](/documentation/form-building/create-form/dynamic-tags-and-variables.md).

The record keeps the wording with the tags filled in, exactly as the visitor saw it on that page.

### What is stored with each submission

When a ticked Consent field is sent, the submission keeps:

| Kept                               | Example                                                                                           |
| ---------------------------------- | ------------------------------------------------------------------------------------------------- |
| The wording, with its links        | I agree to the `<a href="/hire-terms/">hire terms</a>`. I understand the €50 deposit is refunded… |
| The same wording as plain text     | I agree to the hire terms. I understand the €50 deposit is refunded…                              |
| A version                          | `04565aca4ef9` (a short code that changes whenever you change the wording)                        |
| The language the form was shown in | `en_US`                                                                                           |
| The time of agreement              | 2026-11-05 17:40 (UTC)                                                                            |
| The page it was shown on           | only when the wording has page tags                                                               |

The wording comes from the form as you saved it, never from the visitor's browser, so nobody can send a different text. If the form is [translated](/documentation/form-building/form-translations.md), the record keeps the translation the visitor saw. The version is worked out from your original wording, so one form has one version on every page and in every language until you change the text.

In emails and PDFs the field shows **Agreed on** and the date and time, for example *Agreed on November 5, 2026 5:40 pm*. An unticked optional box shows nothing.

Open a submission in **CraftForms → Submissions** (or **Records → Submissions**) to see the proof: under *Agreed on…* comes the wording the visitor agreed to, word for word, with its **Wording version** and language. **Export CSV** carries the same in the field's column: *Agreed on …: "I agree to the hire terms…" (wording version 04565aca4ef9, en\_US)*.

![A submission with the consent wording, its version and language under "Agreed on"](https://97821998-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM2yV1foUgoGHBC66VBDw%2Fuploads%2F4ZiYXj72KZwEXjt6sqMd%2Fconsent-field--submission-record.jpg?alt=media)

![A submission with "Agreed on November 5, 2026 5:40 pm" under Consent](https://97821998-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM2yV1foUgoGHBC66VBDw%2Fuploads%2FOE7XRBXGB1qxnRGm4bSk%2Fconsent-field--submission.jpg?alt=media)

### Use it in conditions and actions

The field's value is `yes` when ticked and empty when not, like a one-option checkbox. So it works anywhere a checkbox does:

* **Run only if**: add someone to Mailchimp only when the newsletter box is ticked. See [Run only if](/documentation/form-building/create-form/form-settings-post-context/submit-actions/run-only-if-conditional-actions.md).
* **Field Conditions**: show a field only after the box is ticked.
* The **Log In** action can use a Consent field as its "Remember me" box. See [Account Forms](/documentation/form-building/create-form/form-settings-post-context/submit-actions/account-forms.md).

A Consent field hidden by a condition isn't sent, so it counts as not agreed.

### Good to know

* Changing the wording starts a new version. Earlier submissions keep their own wording and version.
* The Consent field is always one checkbox. For several choices, use a Checkboxes Field.
* Imported forms: GDPR, consent and terms fields from Gravity Forms, WPForms and Fluent Forms become Consent fields.
