> For the complete documentation index, see [llms.txt](https://docs.b2core.b2broker.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.b2core.b2broker.com/back-office-guide/system/custom-fields.md).

# Custom fields

Custom fields let you collect additional client information beyond the standard profile fields. You define a field once and organize it into a group. You can then add it to a registration form, where clients fill it in during registration, and its value can always be filled in or edited by an admin on the client profile.

You manage custom fields in the **System** > **Custom Fields** menu, which contains two pages:

* **Groups** — sections that organize related fields.
* **Fields** — the individual fields, each belonging to a group.

Access to custom fields is controlled by the following permissions, which you grant to back-office user groups in **System** > **Users** > **Groups**.

| Permission                      | Grants the ability to                           |
| ------------------------------- | ----------------------------------------------- |
| View Custom Fields              | View the **Groups** and **Fields** pages.       |
| Create Custom Fields            | Create groups, fields, and options.             |
| Update Custom Fields            | Edit groups, fields, and options.               |
| Archive Custom Fields           | Archive groups, fields, and options.            |
| View client custom field values | View custom field values on the client profile. |
| Edit client custom field values | Edit custom field values on the client profile. |

## Groups

A group is a labeled section that holds related fields. On the client profile and in the registration form, fields are displayed under their group.

The **Groups** page lists the existing groups with the following information.

**Label (English)**

The group name shown to clients and admins. You can localize this label through B2TRANSLATE (see [Translations](#translations)).

***

**Machine name**

A unique identifier used in translation keys and the API. You set the machine name when you create the group, and it can't be changed afterward.

***

**Sort order**

The position of the group relative to other groups. Groups with a lower sort order appear first.

To create a group:

{% stepper %}
{% step %}
Navigate to **System** > **Custom Fields** > **Groups**.
{% endstep %}

{% step %}
Click **Create**.
{% endstep %}

{% step %}
Specify the **Label (English)**, **Machine name**, and **Sort order**.
{% endstep %}

{% step %}
Click **Save**.
{% endstep %}
{% endstepper %}

To edit a group, click the **Edit** button. You can change the **Label** and **Sort order**; the **Machine name** is fixed.

To archive a group, click the **Archive** button. Archived groups are hidden from new registration forms, but they remain visible on client profiles where a stored value exists, so retiring a group never hides data already collected.

## Fields

A field is a single input, such as a text box, a dropdown, or a date picker. Each field belongs to one group.

The **Fields** page lists the existing fields with their **Label (English)**, **Machine name**, **Type**, and **Group**.

### Field types

The following field types are supported.

| Type        | Description                                 |
| ----------- | ------------------------------------------- |
| Text        | A single-line text input.                   |
| Multiline   | A multi-line text area.                     |
| Email       | A text input validated as an email address. |
| URL         | A text input validated as a URL.            |
| Phone       | A phone number input.                       |
| Integer     | A whole number.                             |
| Decimal     | A number with a fractional part.            |
| Boolean     | A yes/no value.                             |
| Select      | A dropdown allowing a single option.        |
| Multiselect | A dropdown allowing multiple options.       |
| Date        | A calendar date.                            |
| Date & time | A calendar date with a time.                |

### Create a field

To create a field:

{% stepper %}
{% step %}
Navigate to **System** > **Custom Fields** > **Fields**.
{% endstep %}

{% step %}
Click **Create**.
{% endstep %}

{% step %}
Specify the **Label (English)**, **Machine name**, **Type**, and **Group**.
{% endstep %}

{% step %}
In the **Required / validation** section, configure the validation rules (see [Validation rules](#validation-rules)).
{% endstep %}

{% step %}
Click **Save**.
{% endstep %}
{% endstepper %}

When editing a field, you can change its **Label**, **Group**, and validation rules. The **Machine name** and **Type** are set at creation and can't be changed.

To archive a field, click the **Archive** button. Like groups, archived fields stay visible on client profiles where a stored value exists.

### Validation rules

The **Required / validation** section shows only the rules that apply to the selected field type.

| Rule          | Applies to                  | Description                                |
| ------------- | --------------------------- | ------------------------------------------ |
| Required      | All types                   | The field must be filled in.               |
| Min length    | Text, Multiline             | The minimum number of characters.          |
| Max length    | Text, Multiline, Email, URL | The maximum number of characters.          |
| Regex pattern | Text, Multiline             | A regular expression the value must match. |
| Min           | Integer, Decimal            | The minimum allowed value.                 |
| Max           | Integer, Decimal            | The maximum allowed value.                 |
| Min date      | Date, Date & time           | The earliest allowed date.                 |
| Max date      | Date, Date & time           | The latest allowed date.                   |
| Min options   | Multiselect                 | The minimum number of selected options.    |
| Max options   | Multiselect                 | The maximum number of selected options.    |

{% hint style="info" %}
**Required** applies to the client registration form, where clients must fill in the field to continue. On the client profile, admins can save partial data even when a required field is empty; the format and option rules still apply to any value that is entered.
{% endhint %}

## Options for Select and Multiselect fields

Fields of the **Select** and **Multiselect** types need a list of options. After you create such a field, open its edit page to manage the options at the bottom.

Each option has the following parameters.

**Value**

The value stored when the option is selected. It must be unique within the field.

***

**Label (English)**

The text shown to the client. You can localize this label through B2TRANSLATE (see [Translations](#translations)).

***

**Machine name**

An identifier used in translation keys.

To add an option, fill in the fields in the option row and click **Add option**. To archive an option, click the **Archive** button next to it.

## Show custom fields during registration

You choose which custom fields appear in a registration form on the registration configuration edit page in **System** > **Registration**.

{% hint style="warning" %}
Custom fields can only be added to the new registration flows configured in **System** > **Registration**. They are not available in the legacy [Wizards](/back-office-guide/system/wizards.md), where registration fields are set up through the [Registration wizard configuration](/back-office-guide/system/wizards.md#registration-wizard) and appear on the client's [Advanced tab](/back-office-guide/clients/general/advanced-tab.md).

The **Wizards** and their **Advanced** step are considered legacy. Once the migration to the **System** > **Registration** settings is complete, they will be removed.
{% endhint %}

{% stepper %}
{% step %}
Open the registration configuration you want to edit.
{% endstep %}

{% step %}
In the **Custom Fields** section, select the fields to show in the registration form.
{% endstep %}

{% step %}
Click **Save**.
{% endstep %}
{% endstepper %}

Fields marked as **Required** must be filled in by the client before they can complete the registration.

If no custom fields exist yet, the section links to the **Custom Fields** page where you can create them.

## Edit custom field values on a client profile

Open a client profile and go to the **Custom Fields** tab to view and edit the values collected for that client. Fields are grouped the same way as on the registration form.

Viewing values requires the **View client custom field values** permission, and editing them requires the **Edit client custom field values** permission.

Archived fields and groups remain visible on the tab as long as the client has a stored value for them, so retiring a field never hides previously collected data.

## Translations

Labels for groups, fields, and options are entered in English and can be localized through B2TRANSLATE. The registration form uses the following translation key patterns:

* Fields — `Common.Registration.Form.Fields.<machineName>.Label`
* Options — `Common.Registration.Form.Options.<optionName>.Label`

To speed up localization, the registration configuration edit page provides a **Copy B2TRANSLATE keys JSON** button. It copies a JSON object that maps the translation keys to their English values for the custom fields currently selected in the form, their select and multiselect options, and the Terms & Conditions items. Paste the JSON into the **Common** tab in B2TRANSLATE.


---

# 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.b2core.b2broker.com/back-office-guide/system/custom-fields.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
