Skip to content

Users and groups

User-type fields in Catalyst can contain references to both users and user groups. These fields support two different approaches for accessing data: ID-based access for compatibility with existing systems, and object-based access for enhanced functionality.

ID-Based Access (Legacy Compatibility)

The traditional approach returns lists of IDs, maintaining compatibility with existing configurations:

{{ record.field_user }}

Returns an object containing both user IDs and user group IDs.

Example output

{ "users": [123, 456, 789], "user_groups": [10, 20] }
{{ record.field_user.user_groups }}

Returns an array of user group IDs only.

Object-Based Access (Enhanced Functionality)

For accessing full user and group objects with all their properties, use the .meta syntax:

{{ record.field_user.meta.users }}

Returns an array of user objects only.

{{ record.field_user.meta.meta.user_groups }}

Returns an array of user group objects only.

User Object Properties

When using .meta.users, each user object contains:

PropertyTypeDescription
KEEP 0018integerUser ID
KEEP 0019stringUser's first name
KEEP 0020stringUser's last name
KEEP 0021stringEmail address
KEEP 0022stringCompany name
KEEP 0023stringPhone number
KEEP 0024stringMobile phone number
KEEP 0025booleanDeletion flag - KEEP 0026
KEEP 0027enumAccount type enum - KEEP 0028

Complete user object example

  [
    {
      "id": 525,
      "first_name": "Bridget",
      "last_name": "Marquardt",
      "username": "bridget.marquardt826@example.com",
      "company_name": "",
      "phone": "16253372", 
      "mobile": "27363737" 
    },
    {
      "id": 591,
      "first_name": "Abelardo",
      "last_name": "Gutkowski",
      "username": "abelardo.gutkowski752@example.com",
      "company_name": "",
      "phone": "76235342", 
      "mobile": "93833722" 
    },
    {
      "id": 795,
      "first_name": "Aaron",
      "last_name": "Dalton",
      "username": "aaron@example.domain",
      "company_name": "",
      "phone": "999383833", 
      "mobile": "0002923832" 
    }
  ]

Example usage

{% for user in record.field_assignees.meta.users %}
  - {{ user.first_name }} {{ user.last_name }} ({{ user.username }})
{% endfor %}

Indexing users

You can access specific users by index:

{{ record.field_assignees.users[0] }} 
{{ record.field_assignees.users[0].username }} 
{{ record.field_assignees.users[1].first_name }}

Hidden properties

Some properties are not returned by default but can be accessed explicitly:

{{ record.field_assignees.users[0].is_deleted }} 
{{ record.field_assignees.users[0].account_type }}

Deleted Users Handling

When a user is deleted from the system:

  • Only the id property is returned
  • All other properties are anonymized for privacy
  • The user object will look like: {"id": 525}

Iteration Examples

Basic user loop

{% for users in record.field_usertype.users %} 
    User ID: {{ users.id }}
    Account type: {{ users.account_type }}
{% endfor %}

Safe property access

{% for user in record.field_assignees.users %} 
    {% if user.first_name %} 
        Active User: {{ user.first_name }} {{ user.last_name }} 
    {% else %} 
        Deleted User (ID: {{ user.id }}) 
    {% endif %} 
{% endfor %}

User Group Object Properties

When using .meta.user_groups, each group object contains:

  • id - User ID
  • name - Group name
  • num_of_members - Number of group members

Complete user group object example

    [
    {
      "id": 525,
      "name": "Team ABC",
      "num_of_members": 20
    },
    {
      "id": 999,
      "name": "Lawyers united",
      "num_of_members": 400
    },
    {
      "id": 1249,
      "name": "Research team",
      "num_of_members": 6
    }
  ]

Example

{% for group in record.field_teams.meta.user_groups %}
  - {{ group.name }} ({{ group.num_of_members }} members)
{% endfor %}

Indexing user groups

You can access a specific user group by index:

{{ record.field_usertype.user_groups[0] }}
{{ record.field_usertype.user_groups[0].name }}
{{ record.field_usertype.user_groups[0].num_of_members }}

Mixed Access Example

You can combine both users and groups in a single iteration:

{% for item in record.field_assignees.meta %}
  {% if item.username %}
    User: {{ item.first_name }} {{ item.last_name }}
  {% else %}
    Group: {{ item.name }} ({{ item.num_of_members }} members)
  {% endif %}
{% endfor %}

Supported Contexts

User-type merge fields work in:

Useful info

Empty field: If no users are assigned, the array will be empty [].

idfirst_namelast_nameusernamecompany_namephonemobileis_deletedhiddenaccount_typehidden