> For the complete documentation index, see [llms.txt](https://help.openloyalty.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.openloyalty.io/integrations-and-data-exchange/custom-fields/setting-up-custom-fields.md).

# Setting up Custom Fields

The Custom Fields **schema** is managed in the **Custom Fields** module (Configuration → Custom Fields). Each supported area — Members, Direct, Referral, Automation, Leaderboards, Challenges, Rewards, and Fortune Wheels — has its own separate schema, listed by module on the main screen.

## 🛠️ Creating a group

{% stepper %}
{% step %}

## Open a module

From **Custom Fields**, select the module you want to configure, e.g. **Members**.
{% endstep %}

{% step %}

## Add a group

Click **Add group** and fill in the group's **Name**, **System code**, and an optional **Description**. The description is shown to admins wherever the group's values are displayed (e.g. on the Single Member View).
{% endstep %}

{% step %}

## Add fields to the group

Click **Add field** and choose a type: **Subgroup**, **String**, **Single select**, **Multi select**, **Number**, **Boolean**, or **Date**.
{% endstep %}

{% step %}

## Configure the field

Set the field's **Name**, **System code**, whether it's **Required**, and — for Single select / Multi select — the **Collection** it draws predefined values from. Save and repeat for every field the group needs.
{% endstep %}

{% step %}

## Add a subgroup (Members only)

To let a member hold several rows of the same shape (e.g. multiple vehicles), click **Add group → Subgroup** instead of a simple field, then add the row-level fields (e.g. Plate No, VIN, Make) the same way.
{% endstep %}
{% endstepper %}

## Field settings

* **Name** — the label shown on forms and in views.
* **System code** — the technical key used in the API, imports, and exports. Upper-case characters are allowed (e.g. `FeatureSubscriptionHHC`), so you can keep naming consistent with an external system.
* **Required** — a required field is marked with an asterisk on the entity form, and the record can't be saved without a value.
* **Predefined values** — for Single select / Multi select, the Collection the values come from. See [Collections](/integrations-and-data-exchange/collections.md).
* **Status** — each field and group can be activated or deactivated independently without deleting it.

{% hint style="warning" %}
**A field's type can't be changed after it's created.** If you need a different type, create a new field. The **system code is immutable** too — only the name/label can be edited later.
{% endhint %}

{% hint style="info" %}
Names and system codes only need to be unique **within their own group or subgroup** — the same name or code can be reused in a different group or a different subgroup.
{% endhint %}

Each module tracks how many fields are currently used against its limit (shown as a counter, e.g. **9 / 25 fields used**), so you can plan a schema before rolling it out.

## Managing an existing schema

* **Edit** a group or field to adjust its name, description, or configuration.
* **Deactivate** a field or group to hide it from forms without deleting its stored data.
* **Delete** a field or group using the trash icon — this permanently removes it and any values stored against it.


---

# 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://help.openloyalty.io/integrations-and-data-exchange/custom-fields/setting-up-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.
