The data in CM is formatted using JSON, and each gadget has unique formatting for how it stores the data. If you are considering using the API to update or view data, the following outlines the way the data is stored for each gadget for easy reference.
This article refers only to the JSON structure of the gadget when viewing the data directly. If you need more information about options available for configuring gadgets, see the Form Gadgets article.
You can use the list below to jump straight to a gadget, or you can use the keyboard shortcut CTRL+F (⌘+F for Mac).
- System Added Data
- Activities
- Alias
- Checkbox
- Checkboxes
- Course Typeahead
- Course Multiselect
- Credits
- Date Picker
- Dropdown
- File Upload
- Foreign Courses
- Groups Multiselect
- Groups Typeahead
- Inherit From Typeahead
- Inheritance
- Item Multiselect
- Linked Institution Subject Codes
- Number Builder
- Omega Rules
- Options Checkboxes
- Options Dropdown
- Options Multiselect
- Options Radios
- Options Typeahead
- Outcomes
- Program Typeahead
- Proposal Owner
- Radios
- Rich Text
- Table
- Tags
- Text
- Text Area
- Terms Picker
- User Multiselect
- User Typeahead
- Form Templates
- View API Data
- View Option Type Data
- Fields with Specific API Labels
System Added Data
Some data will be present on an item even when a form contains no user added data. That data is needed by CM in order to note details such as the proposal type, the status, and other related meta data. This data can be seen in the API, but should not be changed.
Here is an example of such data as it would appear within a course:
pid: "SyJbZJM3Jx",
createdBy: "63f83bfe837f050018fcfc04",
proposalOwner: "63f83bfe837f050018fcfc04",
status: "active",
meta: {
proposalType: "create",
useStuWorkflow: true,
mode: "edit",
omegarulesText: "Required Courses 2 Total Credits Complete all the following: REC621 - Issues in Leisure and Social Justice (0.50) HIST728 - Indigenous History Major Field (1.00) TS755 - Preaching (0.50) Grand Total Credits: 2",
manualDateEnd: true,
workflowNode: null,
workflowLastNodeApprovalDate: null,
workflowProcessing: false
},
- PID - This is an ID that is shared across multiple versions of an item. For example, ACCT 101 may have an item ID of 67d460f76c2522f514a3fcad that refers to the Winter 2025 version specifically, but referencing it by the PID of SyJbZJM3Jx allows CM to identify the item as ACCT 101, and allows CM to look up the course and then select the appropriate version based on the date. This item can not be changed.
- Created By - Indicates the user who initially created the draft of an item, before it enters the workflow. This may or may not be the same as the Proposal Owner, and can not be changed.
- Proposal Owner - Indicates the user who submitted a proposal into workflow. They would be considered the Proposal Submitter in the first step of the workflow. This item should not be changed.
- Status - Indicates the current status (active, inactive, retired) of an item. This can be changed - for example, changing an item from inactive to active if needed.
- Meta - All data within the 'meta' section is needed by CM and should not be changed.
Activities
{
activities: {
options: {
B14YMyzhkx: {
meetingsPerWeek: 2
},
SyW9Gkzn1l: {
meetingsPerWeek: 2
},
SkDcfyfhJl: {
meetingsPerWeek: 2
}
},
semesterType: "standard15Weeks"
}
With the activities gadget, the options will be for each of columns that have been added. When reviewing the labels, in this example, the first item 'Lecture' would correspond to B14YMyzhkx. The API labels for the columns can not be set and are system generated.
Alias
{
alias:
[
{code: "63647406634d253816db4b31",
number: "101"}
],}
In the Alias gadget, note that the code label is referring to an ID, rather than the text of 'ANTH'. This is because the Subject Codes are housed in an option type, and are referred to by the ID of the individual option type.
When updating this field, the option type id will be required rather than the text of the subject code. The alias gadget will require a specific API code to function.
Checkbox
{checkbox: true}
Single checkbox gadgets only contain the option for true (checked) or false (unchecked), regardless of what the label on the checkbox is.
Checkboxes
{
checkboxes: {checkboxesOption_1: true,checkboxesOption_3: true},
}
With checkboxes, multiple options can be submitted, so each individual option needs to be specified if it is checked. This is written as an array within the checkboxes field, with each option reflecting as true (checked) or false (unchecked).
Course Typeahead
{
coursetypeahead: "BJQ9d4Xth",
}
A course typeahead gadget requires the PID of a course in order to reference it correctly. This is visible by viewing the course data (institution.kuali.co/api/cm/courses/{{courseID}}), and looking up the PID of the course you'd like to attach. Only one course can be selected for this gadget.
Course Multiselect
{
coursemultiselect: [
"SkePj_EQt3",
"r1Z3_NmYh"
],
}
With the course multiselect, multiple options can be submitted, so each individual option needs to be specified in an array within the field, with each option referencing the PID for the courses that are being associated.
This is visible by viewing the course data (institution.kuali.co/api/cm/courses/{{courseID}}), and looking up the PID of the course you'd like to attach. Multiple courses can be added, and must be seperated in the body by a comma.
Credits
{
credits: {
chosen: "fixed",
credits: {
min: "3",
max: "3"
},
value: "3"
}
Credits must specify the whether they are fixed, ranged, etc and then may include the value associated. The credits gadget must use a specific API label to function correctly.
Date Picker
{
datepicker: "2025-03-04",
}
The date picker will allow for dates to be added (such as catalog activation date) and must be formatted as "YYYY-MM-DD" when updating via the API.
Dropdown
{
dropdown: "dropdownOption_1"
}
Dropdown gadgets allow for a single selection, specified by the label of the option selected.
File Upload
{
fileupload: [
{contentType: "image/png",
filename: "Screenshot 2025-03-14 112607.png",
size: 33132,
uploaded: "2025-03-14T17:16:59.287Z",
id: "67d4648b11c9262b1b9c3819"}
],
}
This example shows how a file upload will look in the API; although it is not able to be updated this way. Files should be updated in the system through the user interface.
Groups Multiselect
{
groupsmultiselect: ["641a048f2059140020062729"],
}
The groups multiselect gadget will allow for multiple groups to be listed, seperated by a comma within an array. The groups must be listed by their individual ID, not the text of the associated name.
You can reference the ID for a group by viewing a group, and it will be displayed in the URL - like this: institution.kuali.co/cor/main/#/groups/category/5991d4702dc0cc00016258f6/group/5b57275a5198980001e89676/view
The Id that appears after group in the URL will be the ID for the group.
Groups Typeahead
{
groupstypeahead: "641a03cfeadbe20019ff0487",
}
The groups typeahead gadget will allow for one group to be listed. The group must be listed by its individual ID, not the text of the associated name.
You can reference the ID for a group by viewing a group, and it will be displayed in the URL - like this: institution.kuali.co/cor/main/#/groups/category/5991d4702dc0cc00016258f6/group/5b57275a5198980001e89676/view
The Id that appears after group in the URL will be the ID for the group.
Inherit From Typeahead
{
inheritedFrom: "r1-Q5O47th"
}
The inherit from typeahead gadget requires the PID of an item in order to reference it correctly. This is visible by viewing the course data (institution.kuali.co/api/cm/{{itemtype}}/{{courseID}}), and looking up the PID of the item you'd like to select for data to be inherited from. Only one item can be selected for this gadget.
The inherit from typeahead gadget will use a specific API label to function correctly.
Inheritance
{
inheritance: "Understanding and Managing Organizational Change"
}
The inheritance gadget will display the information that can be brought over when data is inherited. Whether or not this data can be edited would be dependent upon your settings in the form - if it is set to view only it will not be able to be modified. It would be recommended to not update this via the API.
Item Multiselect
{
itemmultiselect: [
"HkQvs_E7Kn",
"rJbPsOVXF2",
"HkQvs_E7Kn"
]
}
With the item multiselect, multiple options can be submitted, so each individual option needs to be specified in an array within the field, with each option referencing the PID for the courses that are being associated. This is visible by viewing the course data (institution.kuali.co/api/cm/courses/{{courseID}}), and looking up the PID of the course you'd like to attach. Multiple courses can be added, and must be seperated in the body by a comma.
Omega Rules
{
omegarules: {
mode: "groupings",
sequenced: false,
groupings: [
{
label: "Required Courses",
key: "Sy7MYeVRi",
inactive: false,
rules:
{
rules: [
{
alpha: "A",
key: "completedCourses",
data:
{
courses: [
"SkgV-947Y3",
"HyeY-qNQK3",
"HJIbcNmYn"
]
}
}
],
logic: "All of A",
groups: [ ]
}
}
]
}
This is an example of how the omega rules gadget looks when formatted. It is recommended to update this information in the user interface rather than the API, as the formatting can become very complex, very quickly.
Options Checkboxes
{
optionscheckboxes: {
67d460235d7813efef0fec03: true
}
}
The options checkboxes gadget will refer to an option type for each value presented, and it will display as the item ID for the option type rather than the human friendly text.
The options checkboxes gadget allows multiple options to be submitted, so each individual option needs to be specified if it is checked. This is written as an array within the checkboxes field, with each option reflecting as true (checked) or false (unchecked).
Options Dropdown
{
optionsdropdown: "67d460235d7813efef0fec03",
subjectCode: "636474139b05406f6995b2fd"
}
The options dropdown gadget allow for a single selection, specified by the item ID for the option type rather than the human friendly text.
A common example of an option dropdown is for a selection of subjectCode, which requires a unique API label.
Options Multiselect
{
optionsmultiselect: [
"67d460235d7813efef0fec03",
"67d4601e11c9262b1b9c0399"
]
}
With the options multiselect, multiple options can be submitted, so each individual option needs to be specified in an array within the field, with each option referencing the item ID for the option type rather than the human friendly text.
Multiple options can be added, and must be seperated in the body by a comma.
Options Radios
{
optionsradios: "67d4601e11c9262b1b9c0399"
}
With the options radios, only a single option can be selected. The selection will reference the item ID for the option type rather than the human friendly text.
Options Typeahead
{
optionstypeahead: "67d460235d7813efef0fec03"
}
The options typeahead gadget will allow for one option to be listed. The selection will reference the item ID for the option type rather than the human friendly text.
Outcomes
{
outcomes: [
{
id: "HJLXIJM2kx",
value: "649304f49e76cc949b842f30",
linkedOutcomes: [
{
programId: "Sy0ky0Rsn",
outcomeId: "H1qovkMn1l"
}
]
}
]
This is an example of how the outcomes gadget looks when formatted. It is recommended to update this information in the user interface rather than the API, as the formatting can become very complex, very quickly.
The outcomes gadget will require a specific API label to function correctly.
Program Typeahead
{
programtypeahead: "Sy0ky0Rsn"
}
Proposal Owner
{
proposalOwner: "63f83bfe837f050018fcfc04"
}
Proposal owner will specify the user who currently owns the proposal, based on their user ID. This field should not be modified.
Radios
{
radios: "radioOption_2"
}
With a radios gadget, only a single option can be selected, specified by the label of the option selected.
Rich Text
{
richtext: "<p>Rich Text fields allow for formatting entered in <b>HTML</b>,
including the ability to use the source code and enter it. </p>"
}
Information can be placed into a rich text field that contains HTML. The HTML must be entered all on a single line, with no line breaks (it may wrap, but do not enter a return or a line break) as it considers a line break to be an invalid character.
Additionally, any items that contain a quote ("") must be escaped by placing a \ in front of the item in order for it to be updated, or else it will result in an error. For example, instead of <a href="https://...."> you need to have <a href=\"https://...\">
Table
{
table: [
{
0: "Text option entered into Table",
1: "67d460235d7813efef0fec03",
2: "2025-03-18"
}
]
}
The table gadget will allow you to enter data into each row, and will be reflected as a number for each column in the row. The table allows for either text, option type selection, or a date to be entered but it will follow the same formatting requirements for those types of fields.
Tags
{
tags: [
"67d466b24284ce34c655b097",
"67d466b4422e00894265c8cf"
]
}
The tags gadget allows for a multiple tags to be listed based on the ID for the option type rather than the human friendly text.
The tags gadget requires a specific API label to function correctly.
Text
{
text: "Text gadget with max char",
number: "100",
title: "Sample of each gadget"
}
This is an example of three different text fields. Text typically is used for a title field or a number field (such as the title of a course, or the course number) and may be used to house other details as well. Formatting is not allowed within a text field, and the information is updated with quotes around the data.
Fields such as Title, Number or Code will require a specific API label.
Text Area
{
textarea: "Text areas provide a large block to input a large amount of unformatted text."
}
A text area allows for an unlimited amount of unformatted text. It will need to be placed within quotes, and no HTML or other formatting will be stored when updating.
Terms Picker
{
dateEnd: "2027-05-03",
dateEndLabel: "Spring 2027",
dateStart: "2023-01-01",
dateStartLabel: "Winter 2023"
}
The Terms picker references Term data as specified under System Settings Term Dates. In general, this should be set within the user interface to avoid potential conflicts and ensure that all dates match.
Dates are set automatically in CM based on the number of terms specified and may vary per institution. If these items are updated, note that these fields use a specific API label.
User Multiselect
{
usermultiselect: [
"67d46722d5f7ba001fd9b306",
"67d4673fa450900018eee07b"
]
}
The user multiselect can be used to select multiple users by their ID.
If you are unsure of the ID for a user, you can look them up within Users, and then the URL will reflect the ID like this: institution.kuali.co/cor/main/#/users/67d46722d5f7ba001fd9b306/details/view.
In the multiselect, the ids should be listed in a comma seperated array.
User Typeahead
{
usertypeahead: "67d4673fa450900018eee07b"
}
The user typeahead can be used to select a single user by their ID.
If you are unsure of the ID for a user, you can look them up within Users, and then the URL will reflect the ID like this: institution.kuali.co/cor/main/#/users/67d46722d5f7ba001fd9b306/details/view
Form Templates
You can easily view the JSON for a form by refencing the API. This will provide the gadget information and relevant data, such as API labels. To view the data, include institution.kuali.co/api/cm/{{ItemType}}/template/body at the end of the URL to your instance of CM.
For example:
- Courses:
institution.kuali.co/api/cm/courses/template/body - Programs:
institution.kuali.co/api/cm/programs/template/body - Policies:
institution.kuali.co/api/cm/policies/template/body - Experiences:
institution.kuali.co/api/cm/experiences/template/body - Specializations:
institution.kuali.co/api/cm/specializations/template/body
Replace 'institution' with the name in your URL, and select the{{ItemType}} of the type of form you want to view.
Note: The item type will still use one of the default types available, even if you have renamed it within your instance. For example, if you refer to 'Specializations' as 'Concentrations', the item type is still considered a Specialization, and the API will refer to it this way.
View API Data
The API can be used to look at the data as it is stored in the database. This is often helpful when you need to reference items that are not visible on the form, such as the PID assigned to an item, option type information, or formatting.
You can easily view the data for any item within CM by referencing the API. This will display the data in JSON. To view the data, include institution.kuali.co/api/cm/{{ItemType}}/{{ItemID}} at the end of the URL to your instance of CM.
For example:
- Courses:
institution.kuali.co/api/cm/courses/{{ItemID} - Programs:
institution.kuali.co/api/cm/programs/{{ItemID} - Policies:
institution.kuali.co/api/cm/policies/{{ItemID} - Experiences:
institution.kuali.co/api/cm/experiences/{{ItemID} - Specializations:
institution.kuali.co/api/cm/specializations/{{ItemID}
Replace 'institution' with the name in your URL, and replace {{ItemId}} with the ID for the item you want to view.
If you need to reference the item ID, you can see it within the URL for any item you are viewing. For example, this screenshot shows an active record for a course, where the item type of courses is highlighted in blue and the item id is highlighted in yellow:
View Option Type Data
Many gadgets use an Option Type to display information on a form. The Option Types are housed under the System Settings > Option Types, and each will have their own unique ID associated with them. If you are updating any of the fields that refer to an Option Type, you'll need to use the ID to reference them, or it will display the 'option not found' error.
You can use the API to reference all data associated with Option Types. To request the Option Type data, you can use a call such as: institution.kuali.co/api/cm/options/types
This will return data that will contain each option type, and each option within each option type. Within this data, if you see type: "optiontypes" - this refers to a specific set of options that you create.
{
name: "Faculty of Approval",
label: "Faculty of Approval",
header: "Faculty of Approval",
placeholder: "Faculty of Approval",
type: "optiontypes",
active: true,
locale: "en-US",
createdAt: "2022-09-21T16:07:34.899Z",
updatedAt: "2022-09-21T16:07:34.899Z",
id: "632b36c6f217b514b2a9f9c1"
},
{
name: "Thesis Option: Milestones to be Completed",
label: "Thesis Option: Milestones to be Completed",
header: "Thesis Option: Milestones to be Completed",
placeholder: "Thesis Option: Milestones to be Completed",
type: "optiontypes",
active: false,
locale: "en-US",
createdAt: "2023-06-01T17:57:09.210Z",
updatedAt: "2023-06-01T17:57:47.120Z",
id: "6478dbf5ac60461057f5efee"
}
This would be representative of the information within the option types, such as:
If you just want the data that is housed when in a specific set, for example, 'Subject Codes' - you can append the title to the end of the url, like this: institution.kuali.co/api/cm/options/types/subjectcodes
If the title of the Option Type contains spaces, you'll need to use %20 instead of a space, such as institution.kuali.co/api/cm/options/types/Grading%20Options
This will return only the data for a specific set, like this:
{
name: "INDG",
description: "Indigenous Studies (INDG)",
type: "subjectcodes",
active: true,
locale: "en-US",
createdAt: "2022-11-04T02:08:28.450Z",
updatedAt: "2022-11-23T18:41:22.056Z",
additionalDescriptions: null,
id: "6364741c3de967605c0874ff"
},
{
name: "REES",
description: "Russian and Eastern European Studies (REES)",
type: "subjectcodes",
active: true,
locale: "en-US",
createdAt: "2022-11-04T02:08:41.602Z",
updatedAt: "2022-11-23T19:08:46.377Z",
additionalDescriptions: null,
id: "636474293802e175a2028b05"
}
This would be representative of the individual options within a selected option types, such as:
Fields with Specific API Labels
The following fields must use a specific API label in order to function correctly, and should not be used for any other purpose:
-
dateStart- Start term/Effective Date/etc- Information must be formatted as a date, using YYYY-MM-DD format
-
dateStartLabel- Term and year of effective date- Information must be formatted as "Term YYYY", such as "Winter 2023" and must match an existing term
-
dateEnd- End Term/End Date/etc- Information must be formatted as a date, using YYYY-MM-DD format
-
dateEndLabel- Term and year of effective date- Information must be formatted as "Term YYYY", such as "Winter 2023" and must match an existing term
-
body- Descriptive content within Policy item type that should show on the catalog- Field can be a rich text or text area, but must use this label to display on the catalog
-
description- Description used by CM that will display on catalog or within the search of CM- Field can be rich text or text area
-
code- Used to provide a unique code for items in CM- On courses, code is created by combining
subjectCodeandnumberand is automatically created - On all other item types, code can be used to create an identifier unique to each record
- Typically a text field
- On courses, code is created by combining
-
number- Used for the number associated with a course- Typically a text field
-
title- Used to provide a title for a record- Typically a text field
-
subjectCode- Used on courses to provide a prefix.- May be a text field, but most commonly established as an options typeahead or drop down to ensure consistency
-
groupFilter1/groupFilter2- Used to specify a group and can be used on the search pages to filter content- May be a group typeahead or dropdown
-
outcomes- Used specifically on the outcomes gadget -
alias- Used specifically on the alias gadget -
credits- Used specifically on the credit gadget -
inheritedFrom- Used specifically on the Inherit From typeahead gadget -
status- Used on the Status change gadget -
tags- Used on the tags gadget
Comments
0 comments
Article is closed for comments.