---
description: >-
  Define and manage profile schema settings to control the profile fields
  displayed to users in the Loyalty Microsite, including core fields,
  attributes, and required/optional fields.
---

# 5. Profile schema

## About profile schema in the Loyalty Microsite

The profile schema in the Loyalty Microsite is a JSON-defined configuration that specifies the user profile fields displayed on the **/profile** page and during sign-up. By setting the profile schema, you control which core fields and custom attributes are shown, required, or optional in your users’ profiles.

## Managing profile schema in the Loyalty Console

The profile schema is accessible in the Loyalty Console under **Settings > Profile Schema**. Here, you can:

* Add or remove fields based on your loyalty program requirements.
* Set specific fields as required to ensure users provide essential information.
* Add custom fields, which are created as user attributes in the Loyalty Engine once completed by the user.

## Default profile schema

The default schema includes only the user’s first name and last name (defined as givenName and familyName in JSON). If you want users to see additional information or profile attributes from the Loyalty Engine, you need to add these fields manually to the schema.

## Structure of the profile schema

The profile schema uses JSON Schema Draft-06 standards, which allow you to specify the type, title, and format of each field, as well as mark fields as required or optional. Here’s a sample schema with additional fields, including city, region, and attributes such as company name:

<details>

<summary>Sample profile schema</summary>

{% code overflow="wrap" lineNumbers="true" %}
```json
{
    "type": "object",
    "$schema": "http://json-schema.org/draft-06/schema#",
    "properties": {
        "profile": {
            "type": "object",
            "title": "",
            "required": [
                "givenName",
                "familyName",
                "attributes"
            ],
            "properties": {
                "city": {
                    "type": ["string", "null"],
                    "title": "City"
                },
                "region": {
                    "type": ["string", "null"],
                    "title": "Region"
                },
                "country": {
                    "type": ["string", "null"],
                    "title": "Country"
                },
                "postcode": {
                    "type": ["string", "null"],
                    "title": "Postcode"
                },
                "birthdate": {
                    "type": ["string", "null"],
                    "title": "Date of Birth",
                    "format": "date"
                },
                "givenName": {
                    "type": "string",
                    "title": "Given name"
                },
                "familyName": {
                    "type": "string",
                    "title": "Family name"
                },
                "attributes": {
                    "type": "object",
                    "title": "",
                    "required": ["companyName"],
                    "properties": {
                        "companyName": {
                            "type": "string",
                            "title": "Company Name"
                        }
                    }
                }
            }
        }
    }
}
```
{% endcode %}

</details>

## Required vs. optional fields

* **Required Fields:** Users must complete these fields to access the microsite. If a required field isn’t completed, users will be prompted to fill it in when they access the microsite.
* **Optional Fields:** Optional fields are displayed only on the **/profile** page, allowing users to fill them in at their discretion.

## Embedded authentication considerations

For embedded authentication setups, a profile schema is usually not necessary, as users are generally managed within your CRM or primary user database. In this setup, users should already have an edit profile page available on the host website or wherever the source of authentication resides.

The user’s profile data is typically synced from your system, so it’s best to avoid duplicating fields in both the microsite and your CRM, maintaining a single source of truth for user information.

***

## FAQs

#### Can I remove the default fields (first name and last name) from the profile schema?

The default schema includes first and last name as core fields. You may hide these fields on the microsite, but removing them from the schema can lead to incomplete user profiles and may impact certain platform functionalities as these are required fields in the Loyalty Engine.

Ensure any required fields you remove from the schema are passed in advance of the user accessing the microsite, or else they will see an error and not be able to use the microsite.

#### What’s the difference between required and optional fields?

Required fields are mandatory and will prompt users to complete them before accessing other microsite features. Optional fields only appear on the **/profile** page and do not interrupt user flow if left incomplete.

{% hint style="info" %}
`givenName`, `familyName` and `email` are the only fields required at API level. The profile schema enforces additional required fields in the Loyalty Microsite but not at API level.
{% endhint %}

#### Can I control which profile fields appear on sign-up?

Yes, all required fields in the profile schema will appear on the sign-up page for new users and on the profile completion screen for existing users who haven’t yet provided the required information or when using embedded authentication.

#### Will my schema changes immediately update all user profiles?

No, updating the schema does not alter existing user profiles directly. However, any changes to required fields will immediately impact what users see in the microsite. If a new required field is added, users will be prompted to complete it on their next login if it hasn’t been filled already, and their profile will be updated at that point.
