It's useful to think of Custom Fields (sometimes referred to as Fields) as labels that can be added to different parts of Canopy.

For instance, your initial set up of Canopy may not include some information that's important to your business. Let's say you want to add an emergency phone number for each location where you own kiosks. You can add the emergency phone numbers by adding a Field.

Because Canopy is tracking Locations as part of the initial set up, you would likely want to add a Field to your Locations entity. After adding the Field, you would then enter a support phone number for each Location.

Fields can contain information that you manually type in (such as our support phone numbers) or they can contain data that's coming from Canopy itself. For example, if you wanted to know the date and time of the most recent software update on a kiosk, a Field can be used to display that data in Canopy.

Besides Locations, Fields can be used to display information and data on other top-level entities, such as Devices, Customers or Transactions. The great thing is that Fields are highly-customizable, so you can create and assign them as you see fit.

To help explain how they work, we'll walk step-by-step through the example of adding a support phone number to our Locations.

1. Click on the gear icon in the upper right and then click Settings

A screenshot of part of the Canopy dashboard interface showing a portion of the main navigation menu on the left side with options including Dashboard, Operations, Locations, Devices, Customers, Transactions visible. The main content area displays a line chart visualizing summary date regadring KPIs on 26 devices. To the right is a KPI dashboard with columns for various metrics. In the upper right corner, there's a gear/settings icon and a "Settings" dropdown menu option visible.

2. On the Settings page, look for the Fields item in the left side menu.

The Settings page showing the left navigation menu with various options including Organization, Branding (highlighted in blue), General, Fields, Time, Users, Grid, API, Actions, Labels, Lead Configuration, and Motion. The main content area displays Branding configuration options with text about organization logos and file size limits. There's a red arrow pointing to the "Fields" menu item in the left navigation. The Branding settings interface shows settings options including Header Logo, Favicon, Browser Title, Brand Color, and Secondary Color, making it possible to customize the Canopy experience.

3. To add an attribute to Locations, select Locations from the App drop down.

The Settings page showing the left navigation menu with various options including Organization, Branding, General, Fields (highlighted in blue), Time, Users, Grid, API, Actions, Labels, Lead Configuration, and Motion. The main content area displays branding configuration options with text about organization logos and file size limits. There's a red arrow pointing to the "Fields" menu item in the left navigation.

4. To add a new Field, click the plus (+) button at the top of the General Info tab.

The Fields interface after selecting "Locations" from the App dropdown in the previous step. The page shows "Fields - Add custom fields and collections to Canopy applications" at the top with "Locations" selected in the App dropdown on the right. The interface displays "General Info" (which is currently active and highlighted in orange). Below is a table showing existing fields including "Device Created By" (field 0), "Organization" (field 101 with an information icon), and "Manager On Duty" (field 101). There's a red arrow pointing to a plus (+) button in the upper right corner of the General Info section, which is used to add new fields to the Locations entity.

5. In the Select Field Type modal, we will select Text to hold our phone number.

The "Select Attribute Type" modal dialog that appears after clicking the plus (+) button from the previous screenshot. This modal displays in a lightbox format and reveals various field type options in a grid layout with icons and descriptions. The available options include: Text ("Basic text (under 255 characters)"), Bool ("True/false value (can be set as true or false)"), Int ("Displays plain numbers (no decimal value)"), Decimal ("Used for numbers with a decimal value"), Date ("Used to contain calendar formatting"), Enum ("Used to show a list of options as a dropdown"), JSON ("Display the value in a JSON format"), List ("Used to display an editable list components"), and Paragraph. (The modal appears over a grayed-out background showing the underlying Fields interface.)

6. In the new, unnamed Field form, fill in all of the appropriate boxes such as the Title, Category and Super Category.

7. In the table below will be a list of options. Here are the available options and a description of each one:

Option Description
Event If you want to use Event data to fill in the field, you can use this field to set the Event data. Click the Add Event button and then choose the appropriate Type, Subtype and Detail to use (see more about using Events in the How To Add Dynamic Data to Fields section below.
Hint Adds a short description below the input field.
Tooltip Adds a detailed description on mouse hover.
Cascade Hierarchy Enable this option to display this field at sub-organization levels in the hierarchy.
Creatable Enable this option if you want this field to be displayed when the user creates a new entity (such as a device or location). Some fields are only used by Canopy so it may not need to be displayed to the user when creating an entity.
Updatable Enable this option if you want the field to be able to be updated by users. If not enabled, the field will be grayed out and only updated by Canopy itself.
Hidden Enable this option to prevent the field from being shown to users. For example, if the field contains sensitive data that's only used as part of an Action in Canopy, you might not want to display that data to a user.
Searchable in UI Enable this option to have the field displayed in the list of filter options on the main grid page.
Grid Default Enable this option if you wan the field to be displayed by default in the grid. In other words, when the user resets the options in the main grid page, the field will be shown by default.
Sortable in Grid Enable this option if the column that contains this field in the main grid should be sortable.
Visibility Conditions If you only want this field displayed when certain conditions are met, you can add the conditions here as part of this option. For example, if this field should only be shown for Windows devices, you an add those conditions here.

8. Click Save Changes to finish creating the Field.

9. To view the new Field, navigate to a Location Details page and see the new Field in the General Info tab.

A location details example Field page for "Banyan Office" that appears after completing the field creation process from the previous screenshots. The page displays a map at the top showing the location marker in the Alpharetta, Georgia area. Below the map is comprehensive location information including the address (showing details like street address, phone numbers, and other contact information). The page shows various data fields and tabs for managing location-specific information.

10. To edit the Field, click into the field and type the new information (the support phone number) and then click on the Save button on the right side of the General Info box.

A detailed view of the "Banyan Office" location page showing the complete interface after navigating from the Fields creation process. The page displays a map of the southeastern United States with a location marker, and below it shows multiple tabs including "General Info", "All MDM Devices", "iOS Devices", "Android Devices", "Buildings", "Devices", and "Customers". The General Info tab is currently active and shows a comprehensive form with location details including fields like "Device Created By" (Banyan Office), "Support Phone" (2025557878), "Organization" (Banyan Labs), "Status" (Open [Installed]), and various address fields. On the right side, there are additional fields showing contact information including "Contact Email", "Contact Phone Number", and other location-specific data. There's a prominent blue "Save" button in the right corner with a red arrow pointing to it, indicating where users would save their field edits. Also visible in the middle left panel of the Canopy software are available Actions organized in sections: Device - System Actions (Reboot, Screen Shot, Service Control, Run Network Diagnosis, Query Device), MDM Service - Android General (Refresh Device, Lock Device, Replace Policy, Unenroll Device), MDM Service - Android Enterprise (Restart Device), MDM Service - General (Assign Location, Assign Device Role), MDM Service - Refresh Frequency (Update Refresh Frequency), and MDM Service - iOS General (Refresh Device Details, Refresh Device Information, Refresh Profile List).

How To Add Dynamic Data to Fields

Sometimes, it's helpful to use incoming data to populate a Field automatically rather than having to type something in manually. For example, we can use a Field to automatically display the User Name of the user who added a Device to Canopy by mapping the DeviceCreate Event to the Field (more details on this below).

Other examples might include the date and time when a software installation took place on a device or the inventory status for a product. The use cases vary by set up but Canopy can accommodate lots of different scenarios for working with data in this way.

To add this type of dynamic data to a Field, you will create a Field in a similar way to how we described it above except when you get to the form used to create a new Field, you'll want to click on Add Event button. See the screenshot below:

The screenshot shows some of the Field Settings in Canopy, including the "Override System Field" toggle with the title "This is to override system field" at the top. Then, Type (with "Select the type of field you want to create" and dropdowns for "Variable Type" showing "Text" and "Input Type" showing "Text field"). Then Event (with "Select an event to populate this field" and an "Add Event" button with a green plus icon that has a red arrow pointing to it. Next in the list is Hint (with "Add a short description below the input field") and then Tooltip (with "Add a detailed description on mouse hover"). Below these are toggle switches for various field options including "Cascade Hierarchy" ("Show this field at sub-organizations in the hierarchy"), "Bulk Update" ("Allow users to bulk update this field"), and "Creatable" ("Show this field whenever creating a new entity"). The left navigation shows the Settings menu with "Fields" highlighted in blue.

In the modal that pops up, you'll want to define the Event data that should populate this Field. In this case, we've chosen the name of the user who created the device in the system.

The "Add Event" modal dialog that appears after clicking the "Add Event" button from the previous screenshot. This lightbox modal displays three columns: Type (showing options like "event" which is highlighted in blue, "heartbeat", and "statistic"), Sub Type (showing various event sub-types including "hal.device.offline", "hal.device.online", "kiosk.software.os.process_running", "leaf.command.requested", "deviceCreate" which is highlighted in blue, "kiosk.software.os.process_dead", and "kiosk.software.os.process_restarted"), and Details (showing event properties like "version", "billable", "deviceId", "location", "createdBy" which is highlighted in blue, "ipAddress", and "qualifier"). At the bottom of the modal, it shows "Event: event.deviceCreate.createdBy" and "Example Payload: leaftest.demo.banyan.labs". The modal has "Cancel" and "Apply" buttons at the **bottom.

After the Field Event data updates, it will display on the corresponding page. See below for our new Field displaying on a Device Details page:

The "Five Points" location details page showing the result of the dynamic field creation process from the previous screenshots. The page displays a map of the southeastern United States with a location marker in the Atlanta, Georgia area, and below it shows multiple tabs including "General Info", "Buildings", "Devices", and "Customers" with "General Info" currently active. The General Info section shows various location fields including "Device Created By", "Organization", "Manager On Duty", "Status", and "Manager On Duty Phone". There's a red arrow pointing to the "Device Created By" field which displays "steve.johnson", demonstrating how the dynamic field created in the previous steps now automatically populates with the username of whoever created devices at this location. The right side shows additional contact and address information for the Five Points location.

How To Add a Fields Table

Fields can be used to do more than add one-time information such as a phone number. You can also use Fields to populate a table of data.

To start creating a Fields Table, navigate to the Fields page under Settings. Then, use the App dropdown to select the Entity where you want to add the table (i.e. Customers, Devices, Locations, Inventory, etc.).

After making your App selection, look for the three horizontal dots at the top of the table, just below the App selection. Click them to reveal the menu and then select Create Table:

The Settings page, again with the Fields settings blue highlighted and the Fields settings interface showing the table management functionality that follows the field creation process. The left navigation shows "Fields" highlighted in blue. The main content area displays "Fields - Add custom fields and collections to Canopy applications" with "Devices" selected in the App dropdown on the right. The interface shows several tabs including "Canopy Integration", "General Info", "My Example Table" (highlighted in orange), and "Network Interfaces". Below the tabs is a section titled "My Example Table" with an information icon, and it shows "Weather Event" as an entry (item 1). In the upper right area, there's a three-dot menu (⋯) button with a dropdown menu visible showing options including "Create Table" (with a red arrow pointing to it) and "Delete Current Tab". The right sidebar shows various configuration sections including "Custom Fields", "Default Fields", "Field Collections", and "Editing Variable Types".

On the next screen, give the table a Title and then select the type of data to be used to populate the Fields by clicking on the 'Add Event' button. In the below example, we want to build a table displaying information about the various peripheral hardware pieces integrated with our version of Canopy:

The "New Table" modal dialog that appears after selecting "Create Table" from the previous screenshot's menu. This lightbox modal shows the table configuration interface with several sections: At the top is a "Title" field showing example text "My New Table" and "Related Entity Title Desc". Below that is an "Event" section with "Select an event to populate this field" text and an "Add Event" button with a green plus icon. The modal includes several toggle options: "Cascade Hierarchy" ("Show this table at sub-organizations in the hierarchy") which is enabled/orange, "Hidden" ("Hide this table from the UI (this will disable some settings)") which is disabled, and "Sortable in Grid" ("Enable the column to be sortable when this field appears in a data table") which is also disabled. At the bottom are "Cancel" and "Save" buttons. The modal appears over the grayed-out Settings page showing the Fields interface in the background.

In the modal that pops up, choose the type of data you want to use to populate the columns in your table. In our example, we want to use a data Type of 'statistic' and the Sub Type of 'weather'. Click the 'Apply' button in the lower right of the modal to save.

The "Add Event" modal dialog that appears after clicking "Add Event" from the table creation form in the previous screenshot. This lightbox modal shows the event selection interface with three columns: Type (showing options including "event", "heartbeat", and "statistic" which is highlighted in blue), Sub Type (displaying various statistic sub-types including "leaf.printer.status", "leaf.r212.status", "networkStats", "systemInfo", "systemUtilization", and "weather" which is highlighted in blue). At the bottom of the modal, it displays "Event: statistic.weather" and "Example Payload: weather". There's also a disclaimer stating "Events list is refreshed on a 15 minute interval" with an information icon. The modal has "Custom Event" toggle (which is off), "Cancel" and "Apply" buttons at the bottom.

After you click apply, you will have the options to Cascade Hierarchy, Hidden and Sortable in Grid. For more details on those options, please see the table above.

Next, we will need to add columns to display our data. To do that, click the Plus sign at the top to add the column information:

The Settings page Fields interface after applying the weather event selection from the previous screenshot. The left navigation shows "Fields" highlighted in blue. The main content area displays "Fields - Add custom fields and collections to Canopy applications" with "Devices" selected in the App dropdown. The interface shows multiple tabs including "Canopy Integration", "General Info", "My Example Table", "My New Table" (highlighted in orange), "Network Interfaces", and "Testing". Below the tabs, there's a "Weather Events" section, and under "My New Table" with an information icon, it shows two existing columns: "AccountName" (field 0) and "Humidity" (field 0). There's a red arrow pointing to a plus (+) sign button in the upper right area of the table section, which is used to add new columns to the table.

In the modal popup, choose the data format for the column:

The "Select Attribute Type" modal dialog that appears after clicking the plus (+) button to add a new column to the table from the previous screenshot. This lightbox modal displays various field type options in a grid layout with icons and descriptions, identical to the earlier field type selection modal. The available options include: Text ("Display text (under 255 characters)"), Bool ("This binary value can be set 'true' or 'false'"), Int ("Display plain numbers (no decimal value)"), Decimal ("Ideal for numbers with a decimal value"), Date ("Store date in various formats"), Enum ("Display a list of options in a dropdown"), JSON ("Display the value in a JSON format"), List ("Display an editable list component"), and Paragraph. The modal appears over a grayed-out background showing the underlying Fields interface.

With the data format chosen, you will next need to choose the data to use in the column. Click on the 'Change Event' button for the column:

The column configuration form that appears after selecting the data format from the previous modal. This form shows the setup for a new table column with several sections: At the top is a "Name" field with the helper text "Related Entity Name Desc" showing "lowTemp" as the example Name. Below that is a "Type" section with "Select the type of field you want to create" helper text, showing dropdowns for "Variable Type" (example set to "Text") and "Input Type" (example showing "Text field"). The "Format And Style" section has helper text, "Select a style to apply to your data. Some styles require specific data structures to display correctly" with Format and Style fields. The "Event" section has helper text "Select an event to populate this field" with "statistic.weather" displayed and a "Change Event" button with a green circular icon that has a red arrow pointing to it. Below are "Hint" with helper text "Add a short description below the input field" and "Tooltip" with helper text "Add a detailed description on mouse hover" sections for adding descriptions to the field.

The options for the data will be tied to the data Type and Sub Type chosen earlier. In our case, it's tied to the data Type of 'statistic' and the Sub Type of 'weather'. For this example, we'll choose to have the 'lowTemp' information in this column. This will give us information about how low the temperature was in the spot where this device was located and you can see an example payload of 'statistic.weather.lowTemp' in the screenshot below. Click the Apply button to save the data information:

The "Add Event" modal dialog that appears after clicking "Change Event" from the previous column configuration form. This lightbox modal shows the Details section for the weather statistic event type, displaying a list of available weather data options including "icon", "deleted", "lowTemp" (which is highlighted in blue), "forecast", "highTemp", "humidity", and "latitude". Below the selection list is a disclaimer stating "Events list is refreshed on a 15 minute interval" with an information icon. At the bottom of the modal, it shows "Event: statistic.weather.lowTemp" and "Example Payload: 23.56", demonstrating the specific data path and a sample temperature value. The modal includes a "Custom Event" toggle option and "Cancel" and "Apply" buttons at the bottom.

Now, we're ready to give our column a name that will be displayed at the top of the column. Since this is displaying the 'lowTemp' information, we'll just call this column Low Temperature:

The column configuration form after applying the lowTemp event selection from the previous screenshot. This form shows the setup for the "Low Temperature" column with several sections visible. At the top, there's a "Title" section showing "Low Temperature" in the title field with "Related Entity Title Desc" helper text below it. The "Name" section has helper text "Related Entity Name Desc" and shows "lowTemp". The "Type" section has helper text "Select the type of field you want to create" with dropdowns for "Variable Type" (set to "Text") and "Input Type" (showing "Text field"). Below that is the "Format And Style" section explaining "Select a style to apply to your data. Some styles require specific data structures to display correctly" with Format and Style input fields. At the bottom, there's an "Event" section showing "statistic.weather.lowTemp" and a "Change Event" button. There's a red arrow pointing to the "Low Temperature" title field, indicating where users can customize the column display name. The interface also shows other table columns in the background including "AccountName" and "Humidity".

Continue building out the table with the columns of data appropriate to your set up.

Defining an optional Identifier

If you want the table to be a historical list, where each time an event is received, you write a record into the table, then you do not need to define an Identifier field. However, suppose you want the table to be a list of components or records where a primary key value exists. In that case, you should create that field first, and then return to the overall table definition and select that field as the identifier. For example, if you're monitoring hardware components or a list of installed software, you wouldn't want a new record in the table each time you received a status for the hardware or software component. Therefore, you would designate a field as the primary key or "Identifier" field.

To do this, you will want to select the columns that you have defined as the identifier for the table. Click on the edit button next to the title of your table, and you can find the identifier field. This will serve as the key against which your data will be matched.

The "Weather Events" table configuration modal that appears when editing the overall table settings. This modal shows the table-level configuration options including: At the top, a "Title" section showing "Weather Events" in the title field with "Related Entity Title Desc" below it. Below that is an "Identifier" section with the description "If provided, will be used as an id for related entities" and a dropdown field labeled "Identifier" showing "Weather Account ID" selected (with a red arrow pointing to this dropdown). The "Event" section displays "statistic.weather.darkSkyId" with a "Change Event" button. At the bottom are toggle options including "Cascade Hierarchy" ("Show this table's at sub-organizations in the hierarchy") which is enabled/orange, "Hidden" ("Hide this table from the UI (this will disable some settings)") which is disabled, and "Sortable in Grid" ("Enable the column to be sortable when this field appears in a data table") which is also disabled.

Then, when finished, go to the module to see the table in action.

In the above case, we would continue building information about the weather and then visit the Devices page. On the Device page, we could click on any individual Device Details page to view the new Table called 'My New Table' with our Fields populated.

Below is a screenshot of a Device Details page with the weather-themed table built out to include other columns containing information on the Humidity and Low Temperatures:

A Devices page showing the completed weather-themed Fields table in action. The interface displays various dashboard widgets at the top including "Canopy Link 0%", "Controller -%", "Software Availability -%", and "Hardware Availability -%". Below that are multiple navigation tabs including "General Info", "IoT Automations", "Action History", "Network Interfaces", "Scheduled Actions", "Update History", "Bins", "My Example Table", "Canopy Integration", and "My New Table" (highlighted in orange). Additional tabs show "Weather Events", "Testing", "Locations", "Transactions", "Customers", "Incidents", "Inventory", "Files", and "Events". The main content area displays a data table with two columns: "Humidity" and "Low Temperature". The table shows several rows of weather data with humidity values (2, 22, 22, 84, 87, 87) and corresponding low temperature readings (42.29, 19.2, 48.2, 28.39). At the bottom is pagination showing "1 - 6 of 6 items" with navigation controls and "20 items per page" dropdown. There's also a "Refresh Rate" option in the upper right corner of the table.