Creating Additional Fields
Additional fields in contact cards store app-specific information about contacts, such as onboarding answers, fitness goals, subscription preferences, important dates, locations, and usage statistics. You can use this data for advanced segmentation and deeper personalization of communications.
Additional Fields Tab
Additional fields are available in the account settings on the Additional fields tab. By default, the account contains only the Personal list with the Birthday and Gender fields.

The additional fields list displays:
- Field type, such as text input or date.
- Field name.
- Variable used for message personalization and as the field key in SDK requests.
- Field ID.
- Edit field button.
- Delete field button.

You can create lists and add fields to them.
Creating a List
Lists help you group fields by purpose. For example, use Onboarding for information collected during onboarding and Usage statistics for calculated engagement metrics. To create a field list:
- Click New list of fields.

- Enter the list name.

- If necessary, change the personalization key generated automatically from the list name. The key is used to build variables for the fields in this list, so choose a short and clear value.

- Click Save.

Note
- The list remains inactive until you add its first field.
- Before deleting a list that contains fields, delete all fields from the list.
Adding Fields
- Click the plus icon to create a field in the list.

- Enter the field name and, if necessary, edit the automatically generated personalization key.

- Select the field type. Text input is selected by default.

NoteA field's type can't be changed after creation ā for example, you can't switch an existing field from Date and time to Date. To use a different type, create a new field.
Field Types
Depending on the contact data type, the following field types are available:
- Text input can contain up to 1,000 characters, including letters and integers. Special characters are not supported. Use this type, for example, to store a user's name, preferred workout, or city.
- Text area can contain up to 5,000 characters, including letters and integers. Special characters are not supported. Use this type, for example, to store answers to open-ended onboarding questions.
- Number can contain only integer values from -2147483647 to 2147483647, such as a workout count or the number of completed sessions.
- Fractional number can contain integers and decimal values, such as an average workout duration or subscription revenue.
- Date ā values must use the ISO 8601 format:
YYYY-MM-DD. Use the Regular date option when creating dynamic segments for communication related to recurring events, such as birthdays or membership anniversaries.

- Date and time ā accepted formats are
YYYY-MM-DDTHH:mm:ssZfor UTC andYYYY-MM-DDTHH:mm:ss±HH:mmwith a UTC offset. Use this type for date-and-time values, such as a trial expiration time or the scheduled start of a training plan. - Drop-down list contains predefined values, such as a user's fitness goal, subscription status, or preferred language.
ImportantDo not use a period (
.) in the field name. For example, useFitness goalorFitness_goalinstead ofFitness.goal.

- Checkbox allows you to store multiple selected values.

NoteThe set of options for a Checkbox field is fixed when the field is created ā you can't add or remove options afterward. If you need a different set of options, create a new field.
NoteThere's no API endpoint for creating additional fields, and no bulk way to create them ā each field is created individually. The API below only lets you retrieve the list of existing fields (with Get additional fields) and update a contact's value for one of those fields ā pass the field's numeric ID and the new value in the
fieldsarray of the Add/update contacts method, as shown below. Neither call creates a new field. You can create a field two ways: through this UI, or by importing a file with a column for it ā unmapped columns are auto-created as new fields during field mapping. File import only supports the Text input, Text area, Number, Fractional number, Date, and Date and time types; Drop-down list and Checkbox fields still need to be created manually, since their predefined option lists aren't set during import.To replicate the same field set across multiple accounts, use Get additional fields to list the field names, types, and allowed values from one account, then recreate them in each other account ā manually, or for the supported types, by importing a small file (for example, one placeholder contact with a column per field) to auto-create them. The field definitions remain even after you delete the contact that created them. Avoid uploading real customer data to another account just to replicate fields ā use placeholder data instead.
Working with Additional Fields via API
Retrieving the Field List
To retrieve additional field lists and their IDs, keys, types, and allowed values, use the Get additional fields method:
GET /api/v1/additionalfields
You can pass the ID returned in additionalFields[].id as fields[].id when adding or updating contacts.
After you create an additional field, synchronization may take up to one hour. Until synchronization is complete, the field may be unavailable through the API.
NoteMoving an existing field to a different list also triggers a resync ā the API can keep returning the field's previous values for up to 24 hours after the move, even though the UI already shows the change. There's no way to force an immediate refresh.
Updating a Checkbox Field
To write or update a Checkbox field using the Add/update contacts API method, pass the numeric field ID in the fields array. Separate multiple values in the value parameter with commas:
{
"contacts": [
{
"channels": [
{
"type": "email",
"value": "[email protected]"
}
],
"fields": [
{
"id": 87166,
"value": "Strength training,Yoga"
}
]
}
],
"dedupeOn": "email",
"customFieldsIDs": [
87166
]
}In customFieldsIDs, specify the IDs of the additional fields to update. This parameter is required when updating an existing contact. Only the fields listed in this array are updated.
Updating Additional Fields via SDK
Use contact field variables without the % characters as keys when updating additional fields through the SDK.

Android example:
val userAttributes = UserAttributes(
email = user.email,
fields = listOf(
UserCustomField(
key = "TRAININGAPP.GOAL",
value = "lose weight"
)
)
)
val user = User(userAttributes = userAttributes)
Reteno.instance.setUserAttributes(
externalUserId = "USER_ID",
user = user
)iOS example:
let userAttributes = UserAttributes(
email: user.email,
fields: [
UserCustomField(
key: "TRAININGAPP.GOAL",
value: "lose weight"
)
]
)
Reteno.updateUserAttributes(
externalUserId: "USER_ID",
userAttributes: userAttributes
)Custom Fields in Widget Integrations
All integrations available in the widget builder support passing widget data into custom fields on the integration's side. For most integrations, the widget builder can fetch the list of existing custom fields directly from the integration so you can select the target field. For a few integrations, this list can't be fetched ā you need to know the target field's key. Some of these integrations still let you create a new custom field directly at the point of subscription, even though the existing list can't be fetched.
| Integration | Fetch existing custom field list | Create new field at subscribe time |
|---|---|---|
| Klaviyo | Not supported | Not supported |
| Omnisend | Not supported | Supported |
| Pipedrive | Not supported | Not supported |
| SalesDrive | Not supported | Supported |
| Shopify | Not supported | Not supported |
| Userlist | Not supported | Supported |
Updated 7 days ago
