Skyward Qmlativ
Overview of Skyward Qmlativ, a platform for managing student information, financials, and human resources, featuring REST integration for seamless data exchange.
This is the new Skyward. Featuring student information, financial management, and human resources software for schools and municipalities.
About
Table | Key | Read | Create | Update | Delete |
---|---|---|---|---|---|
Curriculum Subject | SubjectID | ||||
Demographics Address | AddressID | ||||
Demographics Country | CountryID | ||||
Demographics County | CountyID | ||||
Demographics Directional | DirectionalID | ||||
Demographics EmailType | EmailTypeID | ||||
Demographics GenderIdentity | GenderIdentityID | ||||
Demographics Language | LanguageID | ||||
Demographics NameAddress | NameAddressID | ||||
Demographics NameAlias | NameAliasID | ||||
Demographics NameEmail | NameEmailID | ||||
Demographics NamePhone | NamePhoneID | ||||
Demographics NameSuffix | NameSuffixID | ||||
Demographics NameTitle | NameTitleID | ||||
Demographics Name | NameID | ||||
Demographics Occupation | OppucationID | ||||
Demographics PhoneType | PhoneTypeID | ||||
Demographics Relationship | RelationshipID | ||||
Demographics Street | StreetID | ||||
Demographics Zip | ZIpID | ||||
District Building | BuildingID | ||||
District BuildingSchoolYear | BuildingSchoolYearID | ||||
District CalendarYear | CalendarYearID | ||||
District ConfigEntityYear | ConfigEntityYearID | ||||
District District | DistrictID | ||||
District DistrictSchoolYear | DIstrictSchoolYearID | ||||
District Entity | EntityID | ||||
District FiscalYear | FiscalYearID | ||||
District Floor | FloorID | ||||
District Room | RoomID | ||||
District RoomType | RoomTypeID | ||||
District SchoolYear | SchoolYearID | ||||
Employee Calendar | CalendarID | ||||
Employee CheckLocation | CheckLocationID | ||||
Employee DegreeType | DegreeTypeID | ||||
Employee Degree | DegreeID | ||||
Employee EmployeeDistrict | EmployeeDistrictID | ||||
Employee EmployeeFiscalYear | EmployeeFiscalYear | ||||
Employee Employee | EmployeeID | ||||
Employee EmployeeYearExperience | EmployeeYearExperienceID | ||||
Employee Employment | EmploymentID | ||||
Employee EmploymentStatus | EmploymentStatusID | ||||
Employee Termination | TerminationID | ||||
Enrollment EntitySchool | EntitySchoolID | ||||
Enrollment EntryCode | EntryCodeID | ||||
Enrollment EntryWithdrawal | EntryWithdrawalID | ||||
Enrollment GradeLevel | GradeLevelID | ||||
Enrollment Homeroom | HomeroomID | ||||
Enrollment School | SchoolID | ||||
Enrollment StudentEntityYear | StudentEntityYearID | ||||
Enrollment StudentType | StudentTypeID | ||||
Enrollment WithdrawalCode | WithdrawalCodeID | ||||
Family Family | FamilyID | ||||
Family FamilyGuardian | FamilyGuardianID | ||||
Family StudentFamily | StudentFamilyID | ||||
Family StudentGuardian | StudentGuardianID | ||||
FoodService Customer | CustomerID | ||||
Position Assignment | AssignmentID | ||||
Position AssignmentDetail | AssignmentDetailID | ||||
Position AssignmentType | AssignmentTypeID | ||||
Position Department | DepartmentID | ||||
Position EmployeePlacement | EmployeePlacementID | ||||
Position EmployeePlacementDetail | EmployeePlacementDetailID | ||||
Position EmployeePositionType | EmployeePositionTypeID | ||||
Position FTEGroup | FTEGroupID | ||||
Position JobType | JobTypeID | ||||
Position Lane | LaneID | ||||
Position Matrix | MatrixID | ||||
Position MatrixLane | MatrixLaneID | ||||
Position Placement | PlacementID | ||||
Position Position | PositionID | ||||
Position PositionDistribution | PositionDistributionID | ||||
Position PositionDistributionSet | PositionDistributionSetID | ||||
Position PositionGroup | PositionGroupID | ||||
Position PositionType | PositionTypeID | ||||
Position Step | StepID | ||||
Scheduling CourseType | CourseTypeID | ||||
Scheduling Course | CourseID | ||||
Scheduling Meet | MeetID | ||||
Scheduling MeetSummary | MeetSummaryID | ||||
Scheduling SchedulingTeam | SchedulingTeamID | ||||
Scheduling Section | SectionID | ||||
Scheduling StaffMeet | StaffMeetID | ||||
Scheduling StudentSection | StudentSectionID | ||||
Security AuthenticationRole | AuthenticationRoleID | ||||
Security User | UserID | ||||
SkySys State | StateID | ||||
Staff ConfigEntityGroupYear | ConfigEntityGroupYearID | ||||
Staff Department | DepartmentID | ||||
Staff Staff | StaffID | ||||
Staff StaffDepartment | StaffDepartmentID | ||||
Staff StaffEntityYear | StaffEntityYearID | ||||
Staff StaffStaffType | StaffStaffTypeID | ||||
Staff StaffType | StaffTypeID | ||||
StateReporting StateInternetAccess | StateInternetAccessID | ||||
StateReporting StateInternetAccessType | StateInternetAccessTypeID | ||||
Student InternetAccess | InternetAccessID | ||||
Student InternetAccessType | InternetAccessTypeID | ||||
Student StudentCustomCode | StudentCustomCodeID | ||||
Student Student | StudentID |
Referencing Table | Foreign Key | Parent table | Primary Key |
---|---|---|---|
Demographics_Address | CountyID | Demographics_County | CountyID |
Demographics_Address | StreetID | Demographics_Street | StreetID |
Demographics_Address | ZipID | Demographics_Zip | ZipID |
Demographics_NameAddress | AddressID | Demographics_Address | AddressID |
Demographics_NameAddress | NameID | Demographics_Name | NameID |
Demographics_NameEmail | EmailTypeID | Demographics_EmailType | EmailTypeID |
Demographics_NameEmail | NameID | Demographics_Name | NameID |
Demographics_NamePhone | NameID | Demographics_Name | NameID |
Demographics_NamePhone | PhoneTypeID | Demographics_PhoneType | PhoneTypeID |
Demographics_Name | NameSuffixID | Demographics_NameSuffix | NameSuffixID |
Demographics_Name | NameSuffixIDLegal | Demographics_NameSuffix | NameSuffixIDLegal |
Demographics_Name | NameTitleID | Demographics_NameTitle | NameTitleID |
Demographics_Name | NameTitleIDLegal | Demographics_NameTitle | NameTitleIDLegal |
Demographics_Street | DirectionalID | Demographics_Directional | DirectionalID |
Demographics_Street | ZipID | Demographics_Zip | ZipID |
District_BuildingSchoolYear | BuildingID | District_Building | BuildingID |
District_BuildingSchoolYear | SchoolYearID | District_SchoolYear | SchoolYearID |
District_ConfigEntityYear | EntityID | District_Entity | EntityID |
District_ConfigEntityYear | SchoolYearID | District_SchoolYear | SchoolYearID |
District_District | BuildingID | District_Building | BuildingID |
District_DistrictSchoolYear | DistrictID | District_District | DistrictID |
District_DistrictSchoolYear | SchoolYearID | District_SchoolYear | SchoolYearID |
District_Room | BuildingID | District_Building | BuildingID |
District_Room | RoomTypeID | District_RoomType | RoomTypeID |
District_RoomType | DistrictID | District_District | DistrictID |
Family_FamilyGuardian | FamilyID | Family_Family | FamilyID |
Family_FamilyGuardian | NameID | Demographics_Name | NameID |
Family_StudentFamily | FamilyID | Family_Family | FamilyID |
Family_StudentFamily | StudentID | Student_Student | StudentID |
Family_StudentGuardian | NameIDGuardian | Demographics_Name | NameIDGuardian |
Family_StudentGuardian | StudentID | Student_Student | StudentID |
FoodService_Customer | NameID | Demographics_Name | NameID |
Scheduling_CourseType | EntityID | District_Entity | EntityID |
Scheduling_CourseType | SchoolYearID | District_SchoolYear | SchoolYearID |
Scheduling_Course | EntityID | District_Entity | EntityID |
Scheduling_Course | SchoolYearID | District_SchoolYear | SchoolYearID |
Scheduling_Course | SubjectID | Curriculum_Subject | SubjectID |
Scheduling_Meet | EntityID | District_Entity | EntityID |
Scheduling_Meet | RoomID | District_Room | RoomID |
Scheduling_Meet | SchoolYearID | District_SchoolYear | SchoolYearID |
Scheduling_Meet | SectionID | Scheduling_Section | SectionID |
Scheduling_MeetSummary | MeetID | Scheduling_Meet | MeetID |
Scheduling_Section | CourseID | Scheduling_Course | CourseID |
Scheduling_Section | EntityID | District_Entity | EntityID |
Scheduling_StaffMeet | MeetID | Scheduling_Meet | MeetID |
Scheduling_StaffMeet | SectionID | Scheduling_Section | SectionID |
Scheduling_StaffMeet | StaffID | Staff_Staff | StaffID |
Scheduling_StudentSection | SectionID | Scheduling_Section | SectionID |
Scheduling_StudentSection | StudentID | Student_Student | StudentID |
Staff_Staff | DistrictID | District_District | DistrictID |
Staff_Staff | NameID | Demographics_Name | NameID |
Staff_StaffEntityYear | EntityID | District_Entity | EntityID |
Staff_StaffEntityYear | RoomIDDefault | District_Room | RoomIDDefault |
Staff_StaffEntityYear | SchoolYearID | District_SchoolYear | SchoolYearID |
Staff_StaffEntityYear | StaffID | Staff_Staff | StaffID |
Staff_StaffStaffType | StaffID | Staff_Staff | StaffID |
Staff_StaffStaffType | StaffTypeID | Staff_StaffType | StaffTypeID |
Staff_StaffType | DistrictID | District_District | DistrictID |
Staff_StaffType | SchoolYearID | District_SchoolYear | SchoolYearID |
Student_Student | LocationEntityID | District_Entity | LocationEntityID |
Curriculum_Subject | DistrictID | District_District | DistrictID |
Curriculum_Subject | SchoolYearID | District_SchoolYear | SchoolYearID |
District_Building | AddressID | Demographics_Address | AddressID |
District_Building | DistrictID | District_District | DistrictID |
Employee_CheckLocation | DistrictID | District_District | DistrictID |
Employee_EmployeeDistrict | CheckLocationID | Employee_CheckLocation | CheckLocationID |
Employee_EmployeeDistrict | DistrictID | District_District | DistrictID |
Employee_EmployeeDistrict | EmployeeID | Employee_Employee | EmployeeID |
Employee_EmployeeFiscalYear | DistrictID | District_District | DistrictID |
Employee_EmployeeFiscalYear | EmployeeID | Employee_Employee | EmployeeID |
Employee_Employee | NameID | Demographics_Name | NameID |
Employee_Employment | DistrictID | District_District | DistrictID |
Employee_Employment | EmployeeID | Employee_Employee | EmployeeID |
Employee_Employment | EmploymentStatusID | Employee_EmploymentStatus | EmploymentStatusID |
Employee_Employment | TerminationID | Employee_Termination | TerminationID |
Employee_EmploymentStatus | DistrictID | District_District | DistrictID |
Employee_Termination | DistrictID | District_District | DistrictID |
Position_EmployeePlacement | EmployeeID | Employee_Employee | EmployeeID |
Position_EmployeePlacement | PlacementID | Position_Placement | PlacementID |
Position_EmployeePlacementDetail | EmployeePlacementID | Position_EmployeePlacement | EmployeePlacementID |
Position_EmployeePlacementDetail | LaneID | Position_Lane | LaneID |
Position_Lane | DistrictID | District_District | DistrictID |
Position_Placement | DistrictID | District_District | DistrictID |
Position_PositionNumber | DistrictID | District_District | DistrictID |
Note
Access to data is controlled by Skyward approval. Please refer to the Integration Access XML for specifics to which table and fields are available.
Navigating to the Integration List
Every Integration will have a record available within Qmlativ, which you can view by navigating to the Integration List screen. To locate this list of Integrations:
Open the Main menu within Qmlativ.
Select the Administrative Access portal.
Choose the API module.
Select the Integration feature.
Explanation of the integration list
On the Integration List screen, you will see a list of Integrations. By default, these Integrations are sorted by the Vendor Name (1) and then by the Product Name (2), which should make the Integrations easy to locate within the list. The Description (3) column provides an explanation of the purpose of the Integration, and should help you, as the district, determine if the Integration will be useful for your district. The Status (4) column shows the current state of the Integration, such as whether it is Available or if it has been Discontinued. A Discontinued Integration that appears for you is one that has either recently been discontinued from use or one that you have used in the past which is no longer available.
The Has Development Permissions (5) column provides an indication of whether the Integration is allowed to access your environment while it is in development by the vendor. In a Live environment, this should display as unchecked, however, in a Training environment, you may see this item checked if you are working with a vendor for development purposes.
The Can Generate Secret (6) column provides an indication as to whether you, as the district, are allowed to generate the secret that is used for the Integration’s authentication. If this box is checked, the vendor has enabled the option and expects that you will provide the secret to them using a secure method so they may authenticate with Qmlativ (see the Vendor Integration Setup below). If this option is unchecked, the vendor has chosen to manage secret authentication themselves using Skyward’s secure Partner Portal.
Starting integration access setup
From the Integration List screen, click the Open (1) button on the Integration for which you want to grant access, this will take you to the Integration Details screen.
On the Integration Details screen, select the Integration Accesses (1) tab, which will display a list of Integration Access records available for this Integration (note that no records will display when you first view this screen). Click the Add Integration Access (2) button to begin the Add Integration Access workflow
Add Integration Access Workflow
In the Add Integration Access Workflow, you will need to set the following fields on the Integration:
Name (required): This is a “friendly” name that allows the district to easily identify the Integration Access and allow the district to differentiate it from another Integration Access for the same Integration. It is often useful to name this with the Integration’s name plus the year or purpose of the access being granted, such as “{Integration} 2023” or “{Integration} Vendor Testing”. Note: this name does not affect the access credentials used to connect to the API(s).
Description (optional): This description allows you to provide more details on the purpose of the Integration Access if the Name field does not provide enough context.
Integration (required): When starting the Add Integration Access Workflow from the Integration Details screen, the Integration will be automatically set to the Integration which was selected at the start of the workflow. When starting the workflow from other locations, such as the Integration Access List screen, this field will need to be filled in with the name of the Integration to which you are granting access.
Key (required): This key functions as the Client Key or “username” by the third-party vendor when authenticating with Qmlativ’s APIs. This value must be unique, and the third-party vendor may require that the value be configured to a specific value (see Vendor Integration Setup below).
Authentication Type (required): The indicates the type(s) of authentication are available to the third-party vendor when authenticating with Qmlativ. Skyward recommends setting this option to “Any”, as this will allow the vendor to access the Integration using their preferred authentication type, and it will not require any changes to be made if other authentication types are added or removed in the future. a. NOTE: “Basic” is currently offered as an option for the authentication type, but this option will be removed at the start of the 2024-25 school year and is not recommended.
Is Active (required): Indicates whether the Integration Access is active.
Effective Date (required): The date from which the Integration Access becomes available to the third-party vendor.
Expiration Date (optional): The date after which the Integration Access is no longer available to the third-party vendor. • NOTE: an Integration Access is only truly active if the “Is Active” checkbox is checked and if the current date falls after the Effective Date and before the Expiration Date. If no Expiration Date is provided, then the Integration Access will not expire, and will remain active as long as the “Is Active” box is checked, and the current date is after the Effective Date.
Additional Configuration
Beyond the above settings on the Add Integration Access workflow, there may be additional configuration necessary depending on the APIs used by the third-party Integration. If any additional configuration is necessary, a Configuration section will appear below the Expiration Date.
OneRoster Configuration
Description: the OneRoster API allows third-party Integrations access to rostering information, such as name and certain demographic information, as well as information related to scheduling and grading.
Click the arrow (1) next to the OneRoster Configuration selector, this will display a list of available OneRoster Configurations. Click the Select (2) button next to the appropriate configuration, if one is available, or click the Add One Roster Configuration (3) button to add a new configuration.
Adding a OneRoster Configuration
On the Add One Roster Configuration workflow, you will need to fill in several fields:
One Roster Vendor (required): this is the name of the vendor as configured for the purposes of OneRoster communications. Click the arrow next to the selector to select the name of an existing vendor or click the Add One Roster Vendor button within the list to add a new vendor. The workflow for adding a new vendor contains a single field, which is the vendor’s name.
Code (required): this is a generic code that can be used to identify the OneRoster configuration.
Description (optional): this description allows you to provide additional context for the configuration, such as notes about a specific vendor or Integration.
District (required): select your district from the list.
Allow Grade Pass Back (optional): this option allows the third-party vendor’s Integration to write grade information back into Qmlativ. a. NOTE: Selecting this option requires additional licensing from Skyward for the grade pass back to function. If you are uncertain if your district has the appropriate licensing, you may look in Administrative Access > System > System Profile, then select the Products Owned tab and search for the “QM OneRoster API with writeback” product. If you do not have this products owned record available and would like to use the grade pass back option, please contact your Sales Representative.
Custom API Configuration
Description: the Custom API allows third-party Integrations to potentially access any field within Qmlativ. However, the fields to which they have access are limited based on review by Skyward.
To see a list of the fields to which an Integration has access, you can navigate to Administration Access > API > Integration, open the specific Integration from the list, then click on the Integration APIs tab. On the Integration APIs tab, select the Custom API from the list, and a list of Integration Objects and Integration Fields will be displayed in the lists below.
Click the magnifying glass (1) next to the Custom API Entities selector, this will display a list of available Entities. Check the boxes (2) next to the Entities that you want the Integration to access when using the Custom API.
NOTE: in a single-district configuration, it is common to select all Entities from the list, so that the Integration may access information from the entire district. However, there may be situations where limiting access to specific Entities may be required, such as for certain licenses (for instance, if a high school uses an Integration, but the elementary school does not).
In a multi-district configuration, it is common to create a separate Integration Access for each district that is utilizing the Integration, and then limiting the Integration Access to the entities within that specific district. This will allow more granular control on a district-by-district basis.
Saving Integration Access
After filling in the main section of the Add Integration Access workflow (1) and any additional configuration (2), click the Save button to complete the first step of the workflow.
Completing the Add Integration Access Workflow
After saving the workflow, you will be presented with a window indicating that the process was completed successfully, which means the Integration Access record was created.
If the Integration allows you to generate a secret, you will have a Generate Secret (1) button displayed at the top along with the Close (2) button. If you are not allowed to generate the secret, you will only see the Close button. Click the Generate Secret (1) button to generate a secret for this Integration Access.
NOTE: the Generate Secret button will generally only be available to you if the third-party vendor offers a form of self-setup for the Integration or if the Integration is being used from a physical device that requires setup at the district (such as a time tracking device). This option is entirely dependent upon the third-party vendor’s Integration setup, and when available, should include instructions in the Vendor Integration Setup section below.
Starting the generate secret workflow
If you clicked the Generate Secret button above, you will automatically begin the Generate Secret Workflow. However, if you clicked the Close button instead, or you otherwise need to generate a new secret for an Integration, you can navigate to the Integration Accesses tab (1) on the Integration Details screen, as explained above, and look at the Can Generate Secret column (2) to see if you are allowed to generate a secret. If you can generate a secret, you can click the down arrow on the row (3) and click the Generate Secret button to start the workflow, and you can continue the workflow as outlined in the Completing the Add Integration Access step above.
Completing the workflow
After starting the Generate Secret Workflow, you will need to copy the Secret that is generated from the box on the screen. To make this easy, you can click the Copy (1) button. Once you have copied the information, you need to make sure the I Have Copied This Data (2) box has been checked (this will happen automatically when you click the Copy button), then click the Run Process (3) button to complete the process.
Enter the necessary information for the system
Customer/Tenant ID
e.g <CUSTOMER>.skyward.com/<CUSTOMER>API
Client ID
Enter the Client Key from the Skyward Integration Access Screen
Client Key
Enter the Client Secret from the Skyward Integration Access Screen
Integration Key
Please reach out to Tools4ever Support (support@tools4ever.com) to obtain this key. This key is generate on a per customer basis for acces to use the integration
Entity ID
Typically, this is going to be "1". It is the ID of the DIstrict the request is calling for. In cases where there are multiple districts under one tenant, then a system per district is required
School Year ID
If blank, the latest active School Year is used. Else you can specify the ID of the School Year to target
Fiscal Year ID
If blank, the latest active Fiscal Year is used. Else you can specify the ID of the Fiscal Year to target